* locale/programs/ld-collate.c (collate_read): Optimize a bit.
authorUlrich Drepper <drepper@redhat.com>
Fri, 12 Oct 2007 15:54:54 +0000 (15:54 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 12 Oct 2007 15:54:54 +0000 (15:54 +0000)
(skip_to): Fix problems with parameter of elifdef/elifndef.

ChangeLog
locale/programs/ld-collate.c

index 7d43d5a..ea3bcab 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-10-12  Ulrich Drepper  <drepper@redhat.com>
+
+       * locale/programs/ld-collate.c (collate_read): Optimize a bit.
+       (skip_to): Fix problems with parameter of elifdef/elifndef.
+
 2007-10-11  Ulrich Drepper  <drepper@redhat.com>
 
        * iconv/gconv_simple.c: Add some branch prediction.
index 145a27f..bf22a2c 100644 (file)
@@ -2662,13 +2662,16 @@ skip_to (struct linereader *ldfile, struct locale_collate_t *collate,
          if (nowtok == tok_eof || nowtok == tok_end)
            return nowtok;
        }
-      else if ((!to_endif && (nowtok == tok_else || nowtok == tok_elifdef
-                             || nowtok == tok_elifndef))
-              || nowtok == tok_endif)
+      else if (nowtok == tok_endif || (!to_endif && nowtok == tok_else))
        {
          lr_ignore_rest (ldfile, 1);
          return nowtok;
        }
+      else if (!to_endif && (nowtok == tok_elifdef || nowtok == tok_elifndef))
+       {
+         /* Do not read the rest of the line.  */
+         return nowtok;
+       }
       else if (nowtok == tok_else)
        {
          lr_error (ldfile, _("%s: more then one 'else'"), "LC_COLLATE");
@@ -2709,15 +2712,18 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
   /* The rest of the line containing `LC_COLLATE' must be free.  */
   lr_ignore_rest (ldfile, 1);
 
-  do
+  while (1)
     {
-      now = lr_token (ldfile, charmap, result, NULL, verbose);
-      nowtok = now->tok;
-    }
-  while (nowtok == tok_eol);
+      do
+       {
+         now = lr_token (ldfile, charmap, result, NULL, verbose);
+         nowtok = now->tok;
+       }
+      while (nowtok == tok_eol);
+
+      if (nowtok != tok_define)
+       break;
 
-  while (nowtok == tok_define)
-    {
       if (ignore_content)
        lr_ignore_rest (ldfile, 0);
       else
@@ -2738,13 +2744,6 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
              lr_ignore_rest (ldfile, 1);
            }
        }
-
-      do
-       {
-         now = lr_token (ldfile, charmap, result, NULL, verbose);
-         nowtok = now->tok;
-       }
-      while (nowtok == tok_eol);
     }
 
   if (nowtok == tok_copy)