unzip: fix thinko with le/be conv and size (closes bug 129)
awk: make "struct global" hack more robust wrt alignment (closes bug 131)
This commit is contained in:
parent
8e5de2aab7
commit
9aa5c652e9
@ -140,7 +140,7 @@ struct BUG_cde_header_must_be_16_bytes {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define FIX_ENDIANNESS_CDE(cde_header) do { \
|
#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)
|
} while (0)
|
||||||
|
|
||||||
enum { zip_fd = 3 };
|
enum { zip_fd = 3 };
|
||||||
|
@ -389,8 +389,12 @@ static const uint16_t PRIMES[] ALIGN2 = { 251, 1021, 4093, 16381, 65521 };
|
|||||||
|
|
||||||
|
|
||||||
/* Globals. Split in two parts so that first one is addressed
|
/* 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 {
|
struct globals {
|
||||||
|
double t_double;
|
||||||
chain beginseq, mainseq, endseq;
|
chain beginseq, mainseq, endseq;
|
||||||
chain *seq;
|
chain *seq;
|
||||||
node *break_ptr, *continue_ptr;
|
node *break_ptr, *continue_ptr;
|
||||||
@ -439,16 +443,16 @@ struct globals2 {
|
|||||||
tsplitter exec_builtin__tspl;
|
tsplitter exec_builtin__tspl;
|
||||||
|
|
||||||
/* biggest and least used members go last */
|
/* biggest and least used members go last */
|
||||||
double t_double;
|
|
||||||
tsplitter fsplitter, rsplitter;
|
tsplitter fsplitter, rsplitter;
|
||||||
};
|
};
|
||||||
#define G1 (ptr_to_globals[-1])
|
#define G1 (ptr_to_globals[-1])
|
||||||
#define G (*(struct globals2 *)ptr_to_globals)
|
#define G (*(struct globals2 *)ptr_to_globals)
|
||||||
/* For debug. nm --size-sort awk.o | grep -vi ' [tr] ' */
|
/* For debug. nm --size-sort awk.o | grep -vi ' [tr] ' */
|
||||||
/* char G1size[sizeof(G1)]; - 0x6c */
|
/*char G1size[sizeof(G1)]; - 0x74 */
|
||||||
/* char Gsize[sizeof(G)]; - 0x1cc */
|
/*char Gsize[sizeof(G)]; - 0x1c4 */
|
||||||
/* Trying to keep most of members accessible with short offsets: */
|
/* 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 beginseq (G1.beginseq )
|
||||||
#define mainseq (G1.mainseq )
|
#define mainseq (G1.mainseq )
|
||||||
#define endseq (G1.endseq )
|
#define endseq (G1.endseq )
|
||||||
@ -476,7 +480,6 @@ struct globals2 {
|
|||||||
#define t_info (G.t_info )
|
#define t_info (G.t_info )
|
||||||
#define t_tclass (G.t_tclass )
|
#define t_tclass (G.t_tclass )
|
||||||
#define t_string (G.t_string )
|
#define t_string (G.t_string )
|
||||||
#define t_double (G.t_double )
|
|
||||||
#define t_lineno (G.t_lineno )
|
#define t_lineno (G.t_lineno )
|
||||||
#define t_rollback (G.t_rollback )
|
#define t_rollback (G.t_rollback )
|
||||||
#define intvar (G.intvar )
|
#define intvar (G.intvar )
|
||||||
|
Loading…
Reference in New Issue
Block a user