]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Clean up locale file alignment handling.
authorJoseph Myers <joseph@codesourcery.com>
Tue, 8 Oct 2013 00:14:08 +0000 (00:14 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Tue, 8 Oct 2013 00:14:08 +0000 (00:14 +0000)
ChangeLog
locale/loadlocale.c
locale/programs/3level.h
locale/programs/ld-collate.c
locale/programs/ld-ctype.c
locale/programs/locfile.c

index 211606be64e6407c8daabb136178dd19c96e5218..5c8fef0ef4b431df5c218622aa0c3bc535aacf46 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2013-10-07  Joseph Myers  <joseph@codesourcery.com>
+
+       * locale/loadlocale.c (_nl_intern_locale_data): Use
+       LOCFILE_ALIGNED_P.
+       * locale/programs/3level.h (CONCAT(add_locale_,TABLE)): Use
+       LOCFILE_ALIGN_UP and LOCFILE_ALIGN.
+       * locale/programs/ld-collate.c (obstack_int32_grow): Assert that
+       obstack data is appropriately aligned.
+       (obstack_int32_grow_fast): Likewise.
+       * locale/programs/ld-ctype.c (ctype_output): Use LOCFILE_ALIGN.
+       * locale/programs/locfile.c (add_locale_uint32): Likewise.
+       (add_locale_uint32_array): Likewise.
+
 2013-10-07  Siddhesh Poyarekar  <siddhesh@redhat.com>
 
        * benchtests/Makefile: Remove ARGLIST and RET variables.
index de7e3d01da117ce60131e63813ce75082e8f4696..45162f1364f10d16633e562b23246568a4c1fa59 100644 (file)
@@ -148,7 +148,7 @@ _nl_intern_locale_data (int category, const void *data, size_t datasize)
        newdata->values[cnt].string = newdata->filedata + idx;
       else
        {
-         if (idx % __alignof__ (u_int32_t) != 0)
+         if (!LOCFILE_ALIGNED_P (idx))
            goto puntdata;
          newdata->values[cnt].word =
            *((const u_int32_t *) (newdata->filedata + idx));
index b8d6ca0235f77db771fa593993da79fff517d737..c5f024fe3544156f5d8027e539e3abc91d66b2b6 100644 (file)
@@ -270,7 +270,7 @@ CONCAT(add_locale_,TABLE) (struct locale_file *file, struct TABLE *t)
     + t->level1_size * sizeof (uint32_t)
     + (t->level2_size << t->q) * sizeof (uint32_t)
     + (t->level3_size << t->p) * sizeof (ELEMENT);
-  t->result_size = (last_offset + 3) & ~3ul;
+  t->result_size = LOCFILE_ALIGN_UP (last_offset);
 
   level2_offset =
     5 * sizeof (uint32_t)
@@ -308,7 +308,7 @@ CONCAT(add_locale_,TABLE) (struct locale_file *file, struct TABLE *t)
                             t->level3_size << t->p);
   else
     abort ();
-  align_locale_data (file, 4);
+  align_locale_data (file, LOCFILE_ALIGN);
   end_locale_structure (file);
 
   if (t->level1_alloc > 0)
index 31e2d0585919c1b8368fbdaf1089dc4e30b6165b..d88a6de56e6403d2554a184acfbedf4ad56197a8 100644 (file)
@@ -44,6 +44,7 @@ static inline void
 __attribute ((always_inline))
 obstack_int32_grow (struct obstack *obstack, int32_t data)
 {
+  assert (LOCFILE_ALIGNED_P (obstack_object_size (obstack)));
   data = maybe_swap_uint32 (data);
   if (sizeof (int32_t) == sizeof (int))
     obstack_int_grow (obstack, data);
@@ -55,6 +56,7 @@ static inline void
 __attribute ((always_inline))
 obstack_int32_grow_fast (struct obstack *obstack, int32_t data)
 {
+  assert (LOCFILE_ALIGNED_P (obstack_object_size (obstack)));
   data = maybe_swap_uint32 (data);
   if (sizeof (int32_t) == sizeof (int))
     obstack_int_grow_fast (obstack, data);
index 169629445981e30156f7fbdfdd30ba13c83fe447..e7e17b86f9c5315a5fe7aa4b918b4810c8151218 100644 (file)
@@ -1032,7 +1032,7 @@ ctype_output (struct localedef_t *locale, const struct charmap_t *charmap,
            for (cnt = 0; cnt < ctype->nr_charclass; ++cnt)
              add_locale_string (&file, ctype->classnames[cnt]);
            add_locale_char (&file, 0);
-           align_locale_data (&file, 4);
+           align_locale_data (&file, LOCFILE_ALIGN);
            end_locale_structure (&file);
            break;
 
@@ -1042,7 +1042,7 @@ ctype_output (struct localedef_t *locale, const struct charmap_t *charmap,
            for (cnt = 0; cnt < ctype->map_collection_nr; ++cnt)
              add_locale_string (&file, ctype->mapnames[cnt]);
            add_locale_char (&file, 0);
-           align_locale_data (&file, 4);
+           align_locale_data (&file, LOCFILE_ALIGN);
            end_locale_structure (&file);
            break;
 
index 4969391bf5723138712f20cf081cf889376940de..3e76ec92a091dee359d546f110d58efb96ea791f 100644 (file)
@@ -627,7 +627,7 @@ add_locale_wstring (struct locale_file *file, const uint32_t *string)
 void
 add_locale_uint32 (struct locale_file *file, uint32_t value)
 {
-  align_locale_data (file, sizeof (uint32_t));
+  align_locale_data (file, LOCFILE_ALIGN);
   record_offset (file);
   value = maybe_swap_uint32 (value);
   obstack_grow (&file->data, &value, sizeof (value));
@@ -639,7 +639,7 @@ void
 add_locale_uint32_array (struct locale_file *file,
                         const uint32_t *data, size_t n_elems)
 {
-  align_locale_data (file, sizeof (uint32_t));
+  align_locale_data (file, LOCFILE_ALIGN);
   record_offset (file);
   obstack_grow (&file->data, data, n_elems * sizeof (uint32_t));
   maybe_swap_uint32_obstack (&file->data, n_elems);