diff --git a/ChangeLog b/ChangeLog index 4d180a1b4..a6beab995 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2012-02-09 Vladimir Serbinenko + + * grub-core/gnulib/regex.h (re_pattern_buffer): Declare buffer as + re_dfa_t to avoid breaking alignment invariants. + * grub-core/gnulib/regex_internal.h (re_dfa_t): Moved to ... + * grub-core/gnulib/regex.h (re_dfa_t): ... here. + 2012-02-09 Vladimir Serbinenko * grub-core/loader/i386/xnu.c (grub_xnu_boot): Fix printf. diff --git a/grub-core/gnulib/regcomp.c b/grub-core/gnulib/regcomp.c index d153e3c2e..083469ef3 100644 --- a/grub-core/gnulib/regcomp.c +++ b/grub-core/gnulib/regcomp.c @@ -776,7 +776,7 @@ re_compile_internal (regex_t *preg, const char * pattern, size_t length, if (dfa == NULL) return REG_ESPACE; preg->allocated = sizeof (re_dfa_t); - preg->buffer = (unsigned char *) dfa; + preg->buffer = dfa; } preg->used = sizeof (re_dfa_t); diff --git a/grub-core/gnulib/regex.h b/grub-core/gnulib/regex.h index e8bd5496c..1c139d680 100644 --- a/grub-core/gnulib/regex.h +++ b/grub-core/gnulib/regex.h @@ -448,12 +448,15 @@ typedef enum compiled, the `re_nsub' field is available. All other fields are private to the regex routines. */ +struct re_dfa_t; +typedef struct re_dfa_t re_dfa_t; + struct re_pattern_buffer { /* Space that holds the compiled pattern. It is declared as `unsigned char *' because its elements are sometimes used as array indexes. */ - unsigned char *_REG_RE_NAME (buffer); + re_dfa_t *_REG_RE_NAME (buffer); /* Number of bytes to which `buffer' points. */ __re_long_size_t _REG_RE_NAME (allocated); diff --git a/grub-core/gnulib/regex_internal.h b/grub-core/gnulib/regex_internal.h index 5aa5aa287..e5b6679d1 100644 --- a/grub-core/gnulib/regex_internal.h +++ b/grub-core/gnulib/regex_internal.h @@ -413,10 +413,6 @@ struct re_string_t }; typedef struct re_string_t re_string_t; - -struct re_dfa_t; -typedef struct re_dfa_t re_dfa_t; - #ifndef _LIBC # if defined __i386__ && !defined __EMX__ # define internal_function __attribute ((regparm (3), stdcall))