svn commit: trunk/busybox: archival editors

vda at busybox.net vda at busybox.net
Thu Feb 26 11:21:04 UTC 2009


Author: vda
Date: 2009-02-26 11:21:04 +0000 (Thu, 26 Feb 2009)
New Revision: 25459

Log:
unzip: fix thinko with le/be conv and size (closes bug 129)
awk: make "struct global" hack more robust wrt alignment (closes bug 131)



Modified:
   trunk/busybox/archival/unzip.c
   trunk/busybox/editors/awk.c


Changeset:
Modified: trunk/busybox/archival/unzip.c
===================================================================
--- trunk/busybox/archival/unzip.c	2009-02-26 08:05:14 UTC (rev 25458)
+++ trunk/busybox/archival/unzip.c	2009-02-26 11:21:04 UTC (rev 25459)
@@ -140,7 +140,7 @@
 };
 
 #define FIX_ENDIANNESS_CDE(cde_header) do { \
-	(cde_header).formatted.cds_offset = SWAP_LE16((cde_header).formatted.cds_offset); \
+	(cde_header).formatted.cds_offset = SWAP_LE32((cde_header).formatted.cds_offset); \
 } while (0)
 
 enum { zip_fd = 3 };

Modified: trunk/busybox/editors/awk.c
===================================================================
--- trunk/busybox/editors/awk.c	2009-02-26 08:05:14 UTC (rev 25458)
+++ trunk/busybox/editors/awk.c	2009-02-26 11:21:04 UTC (rev 25459)
@@ -389,8 +389,12 @@
 
 
 /* Globals. Split in two parts so that first one is addressed
- * with (mostly short) negative offsets */
+ * with (mostly short) negative offsets.
+ * NB: it's unsafe to put members of type "double"
+ * into globals2 (gcc may fail to align them).
+ */
 struct globals {
+	double t_double;
 	chain beginseq, mainseq, endseq;
 	chain *seq;
 	node *break_ptr, *continue_ptr;
@@ -439,16 +443,16 @@
 	tsplitter exec_builtin__tspl;
 
 	/* biggest and least used members go last */
-	double t_double;
 	tsplitter fsplitter, rsplitter;
 };
 #define G1 (ptr_to_globals[-1])
 #define G (*(struct globals2 *)ptr_to_globals)
 /* For debug. nm --size-sort awk.o | grep -vi ' [tr] ' */
-/* char G1size[sizeof(G1)]; - 0x6c */
-/* char Gsize[sizeof(G)]; - 0x1cc */
+/*char G1size[sizeof(G1)]; - 0x74 */
+/*char Gsize[sizeof(G)]; - 0x1c4 */
 /* Trying to keep most of members accessible with short offsets: */
-/* char Gofs_seed[offsetof(struct globals2, evaluate__seed)]; - 0x90 */
+/*char Gofs_seed[offsetof(struct globals2, evaluate__seed)]; - 0x90 */
+#define t_double     (G1.t_double    )
 #define beginseq     (G1.beginseq    )
 #define mainseq      (G1.mainseq     )
 #define endseq       (G1.endseq      )
@@ -476,7 +480,6 @@
 #define t_info       (G.t_info      )
 #define t_tclass     (G.t_tclass    )
 #define t_string     (G.t_string    )
-#define t_double     (G.t_double    )
 #define t_lineno     (G.t_lineno    )
 #define t_rollback   (G.t_rollback  )
 #define intvar       (G.intvar      )



More information about the busybox-cvs mailing list