[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Patches] Clean up some cross-localedef code



I've applied this patch to clean up some of the cross-localedef code in 
EGLIBC's localedef to align more closely with the glibc code, as modified 
by the first-stage patch I sent to make glibc use the better interfaces 
internally in localedef.  Some fixes are for coding standards, some for 
compiler warnings found while preparing that patch for glibc; some revert 
changes once made to avoid C99 features in localedef (there's really no 
point in trying to make it usable by old host compilers).

This should facilitate merges after some version of that patch is in 
glibc, as well as making it easier to see what pieces remain to merge.

As a reminder, I do not plan to merge any sort of separate build system 
for cross-localedef or support for building localedef for a system other 
than that for which glibc is being built; I only plan to merge the changes 
to allow localedef built with glibc for one system using glibc to be used 
to generate locales for another system using glibc.  If you wish to 
continue to use a cross-localedef binary after EGLIBC is phased out, other 
than through running a localedef binary from a normal glibc build with the 
libc from that build, you should plan to work on implementing such 
features for glibc in the near future.

Index: locale/programs/locfile.c
===================================================================
--- locale/programs/locfile.c	(revision 23928)
+++ locale/programs/locfile.c	(working copy)
@@ -656,8 +656,8 @@
 }
 
 /* Start building an element that contains several different pieces of data.
-   Subsequent calls to add_locale_*() will add data to the same element up
-   till the next call to end_locale_structure().  The element's alignment
+   Subsequent calls to add_locale_* will add data to the same element up
+   till the next call to end_locale_structure.  The element's alignment
    is dictated by the first piece of data added to it.  */
 void
 start_locale_structure (struct locale_file *file)
@@ -666,8 +666,8 @@
   file->structure_stage = 1;
 }
 
-/* Finish a structure element that was started by start_locale_structure().
-   Empty structures are OK and behave like add_locale_empty().  */
+/* Finish a structure element that was started by start_locale_structure.
+   Empty structures are OK and behave like add_locale_empty.  */
 void
 end_locale_structure (struct locale_file *file)
 {
@@ -677,9 +677,9 @@
 }
 
 /* Start building data that goes before the next element's recorded offset.
-   Subsequent calls to add_locale_*() will add data to the file without
+   Subsequent calls to add_locale_* will add data to the file without
    treating any of it as the start of a new element.  Calling
-   end_locale_prelude() switches back to the usual behavior.  */
+   end_locale_prelude switches back to the usual behavior.  */
 void
 start_locale_prelude (struct locale_file *file)
 {
@@ -687,7 +687,7 @@
   file->structure_stage = 3;
 }
 
-/* End a block started by start_locale_prelude().  */
+/* End a block started by start_locale_prelude.  */
 void
 end_locale_prelude (struct locale_file *file)
 {
Index: locale/programs/locarchive.c
===================================================================
--- locale/programs/locarchive.c	(revision 23928)
+++ locale/programs/locarchive.c	(working copy)
@@ -326,7 +326,6 @@
   unsigned int cnt, loccnt;
   struct namehashent *oldnamehashtab;
   struct locarhandle new_ah;
-  struct oldlocrecent *oldlocrecarray;
   size_t prefix_len = output_prefix ? strlen (output_prefix) : 0;
   char archivefname[prefix_len + sizeof (ARCHIVE_NAME)];
   char fname[prefix_len + sizeof (ARCHIVE_NAME) + sizeof (".XXXXXX") - 1];
@@ -457,7 +456,7 @@
 					   + head->namehash_offset);
 
   /* Sort the old locrec table in order of data position.  */
-  oldlocrecarray = alloca (sizeof (*oldlocrecarray) * head->namehash_size);
+  struct oldlocrecent oldlocrecarray[head->namehash_size];
   for (cnt = 0, loccnt = 0; cnt < head->namehash_size; ++cnt)
     if (oldnamehashtab[cnt].locrec_offset != 0)
       {
@@ -1129,9 +1128,9 @@
 	unsigned int nstrings;
 	unsigned int strindex[0];
       } *filedata = data[LC_CTYPE].addr;
-      char *normalized_codeset_name = NULL;
       codeset = (char *) filedata
 	+ filedata->strindex[_NL_ITEM_INDEX (_NL_CTYPE_CODESET_NAME)];
+      char *normalized_codeset_name = NULL;
 
       normalized_codeset = _nl_normalize_codeset (codeset, strlen (codeset));
       mask |= XPG_NORM_CODESET;
Index: locale/programs/ld-ctype.c
===================================================================
--- locale/programs/ld-ctype.c	(revision 23928)
+++ locale/programs/ld-ctype.c	(working copy)
@@ -119,7 +119,7 @@
 #define TABLE idx_table
 #define ELEMENT uint32_t
 #define DEFAULT ((uint32_t) ~0)
-#define NO_FINALIZE
+#define NO_ADD_LOCALE
 #include "3level.h"
 
 #define TABLE wcwidth_table
@@ -3542,7 +3542,7 @@
   size_t i, j, k;
   uint32_t reorder3[t->level3_size];
   uint32_t reorder2[t->level2_size];
-  uint32_t level1_offset, level2_offset, level3_offset;
+  uint32_t level2_offset, level3_offset;
 
   /* Uniquify level3 blocks.  */
   k = 0;
@@ -3598,8 +3598,6 @@
     + (t->level2_size << t->q) * sizeof (uint32_t)
     + (t->level3_size << t->p) * sizeof (uint32_t);
 
-  level1_offset =
-    5 * sizeof (uint32_t);
   level2_offset =
     5 * sizeof (uint32_t)
     + t->level1_size * sizeof (uint32_t);
Index: locale/programs/locfile.h
===================================================================
--- locale/programs/locfile.h	(revision 23928)
+++ locale/programs/locfile.h	(working copy)
@@ -26,7 +26,8 @@
 #include "localedef.h"
 
 /* Structure for storing the contents of a category file.  */
-struct locale_file {
+struct locale_file
+{
   size_t n_elements, next_element;
   uint32_t *offsets;
   struct obstack data;
@@ -135,6 +136,7 @@
 extern void write_locale_data (const char *output_path, int catidx,
 			       const char *category, struct locale_file *file);
 
+
 /* Entrypoints for the parsers of the individual categories.  */
 
 /* Handle LC_CTYPE category.  */
Index: locale/programs/ld-collate.c
===================================================================
--- locale/programs/ld-collate.c	(revision 23928)
+++ locale/programs/ld-collate.c	(working copy)
@@ -169,7 +169,7 @@
 #define ELEMENT struct element_t *
 #define DEFAULT NULL
 #define ITERATE
-#define NO_FINALIZE
+#define NO_ADD_LOCALE
 #include "3level.h"
 
 /* Sparse table of int32_t.  */
@@ -1194,7 +1194,6 @@
 		{
 		  struct element_t *elem;
 		  size_t namelen;
-		  void *ptr;
 
 		  /* I don't think this can ever happen.  */
 		  assert (seq->name != NULL);
@@ -1207,6 +1206,7 @@
 		  /* Now we are ready to insert the new value in the
 		     sequence.  Find out whether the element is
 		     already known.  */
+		  void *ptr;
 		  if (find_entry (&collate->seq_table, seq->name, namelen,
 				  &ptr) != 0)
 		    {
@@ -1360,13 +1360,13 @@
 	      struct charseq *seq;
 	      uint32_t wc;
 	      int cnt;
-	      void *ptr;
 
 	      /* Generate the name.  */
 	      sprintf (buf + preflen, base == 10 ? "%0*ld" : "%0*lX",
 		       (int) (lenfrom - preflen), from);
 
 	      /* Look whether this name is already defined.  */
+	      void *ptr;
 	      if (find_entry (&collate->seq_table, buf, symlen, &ptr) == 0)
 		{
 		  /* Copy back the result.  */
@@ -2340,7 +2340,7 @@
     obstack_1grow (&weightpool, 0);
 
   /* Now add the four tables.  */
-  add_locale_uint32_array (&file, tablemb, 256);
+  add_locale_uint32_array (&file, (const uint32_t *) tablemb, 256);
   add_locale_raw_obstack (&file, &weightpool);
   add_locale_raw_obstack (&file, &extrapool);
   add_locale_raw_obstack (&file, &indirectpool);
Index: locale/programs/3level.h
===================================================================
--- locale/programs/3level.h	(revision 23928)
+++ locale/programs/3level.h	(working copy)
@@ -26,7 +26,8 @@
      ELEMENT      to the type of every entry
      DEFAULT      to the default value for empty entries
      ITERATE      if you want the TABLE_iterate function to be defined
-     NO_FINALIZE  if you don't want the TABLE_finalize function to be defined
+     NO_ADD_LOCALE  if you don't want the add_locale_TABLE function
+		    to be defined
 
    This will define
 
@@ -36,7 +37,7 @@
      void TABLE_add (struct TABLE *t, uint32_t wc, ELEMENT value);
      void TABLE_iterate (struct TABLE *t,
 			 void (*fn) (uint32_t wc, ELEMENT value));
-     void TABLE_finalize (struct TABLE *t);
+     void add_locale_TABLE (struct locale_file *file, struct TABLE *t);
 */
 
 #define CONCAT(a,b) CONCAT1(a,b)
@@ -57,6 +58,7 @@
   size_t level3_alloc;
   size_t level3_size;
   ELEMENT *level3;
+  /* Size of compressed representation.  */
   size_t result_size;
 };
 
@@ -204,7 +206,7 @@
 }
 #endif
 
-#ifndef NO_FINALIZE
+#ifndef NO_ADD_LOCALE
 /* Finalize and shrink.  */
 static void
 CONCAT(add_locale_,TABLE) (struct locale_file *file, struct TABLE *t)
@@ -212,7 +214,7 @@
   size_t i, j, k;
   uint32_t reorder3[t->level3_size];
   uint32_t reorder2[t->level2_size];
-  uint32_t level1_offset, level2_offset, level3_offset, last_offset;
+  uint32_t level2_offset, level3_offset, last_offset;
 
   /* Uniquify level3 blocks.  */
   k = 0;
@@ -262,6 +264,7 @@
     if (t->level1[i] != EMPTY)
       t->level1[i] = reorder2[t->level1[i]];
 
+  /* Create and fill the resulting compressed representation.  */
   last_offset =
     5 * sizeof (uint32_t)
     + t->level1_size * sizeof (uint32_t)
@@ -269,8 +272,6 @@
     + (t->level3_size << t->p) * sizeof (ELEMENT);
   t->result_size = (last_offset + 3) & ~3ul;
 
-  level1_offset =
-    5 * sizeof (uint32_t);
   level2_offset =
     5 * sizeof (uint32_t)
     + t->level1_size * sizeof (uint32_t);
@@ -305,6 +306,8 @@
   else if (sizeof (ELEMENT) == sizeof (uint32_t))
     add_locale_uint32_array (file, (uint32_t *) t->level3,
 			     t->level3_size << t->p);
+  else
+    abort ();
   align_locale_data (file, 4);
   end_locale_structure (file);
 
@@ -322,4 +325,4 @@
 #undef ELEMENT
 #undef DEFAULT
 #undef ITERATE
-#undef NO_FINALIZE
+#undef NO_ADD_LOCALE
Index: ChangeLog.eglibc
===================================================================
--- ChangeLog.eglibc	(revision 23928)
+++ ChangeLog.eglibc	(working copy)
@@ -1,3 +1,12 @@
+2013-09-05  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
+
+	* locale/programs/3level.h, locale/programs/ld-collate.c,
+	locale/programs/ld-ctype.c, locale/programs/locarchive.c,
+	locale/programs/locfile.c, locale/programs/locfile.h: Revert
+	spurious differences from glibc, fix coding standards and
+	otherwise align with
+	<https://sourceware.org/ml/libc-alpha/2013-09/msg00148.html>.
+
 2013-08-29  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
 
 	* Makerules, elf/Makefile, elf/do-rel.h, extra-lib.mk,

-- 
Joseph S. Myers
joseph@xxxxxxxxxxxxxxxx
_______________________________________________
Patches mailing list
Patches@xxxxxxxxxx
http://eglibc.org/cgi-bin/mailman/listinfo/patches