bug-gnulib
[Top][All Lists]
Advanced

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

fnmatch_loop.c sync from libc


From: Paul Eggert
Subject: fnmatch_loop.c sync from libc
Date: Tue, 23 Jan 2007 16:16:53 -0800
User-agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/21.4 (gnu/linux)

I installed this:

2007-01-23  Paul Eggert  <address@hidden>

        Import the following changes from libc.

        2005-10-14  Ulrich Drepper  <address@hidden>

        * lib/fnmatch_loop.c: Adjust for changed secondary hash function.

        2004-12-01  Jakub Jelinek  <address@hidden>

        * lib/fnmatch_loop.c (internal_fnmatch): Clear is_seqval after
        normal_bracket label.

        2004-09-01  Jakub Jelinek  <address@hidden>

        [BZ #361]
        * lib/fnmatch_loop.c (FCT): For backslash between brackets, branch
        to normal_bracket after fetching the next character.

--- lib/fnmatch_loop.c  6 Jul 2006 21:51:30 -0000       1.13
+++ lib/fnmatch_loop.c  24 Jan 2007 00:15:45 -0000
@@ -1,5 +1,6 @@
 /* Copyright (C) 
1991,1992,1993,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006
-       Free Software Foundation, Inc.
+   Free Software Foundation, Inc.
+   This file is part of the GNU C Library.

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -233,8 +234,7 @@ FCT (const CHAR *pattern, const CHAR *st
                    c = FOLD ((UCHAR) *p);
                    ++p;

-                   if (c == fn)
-                     goto matched;
+                   goto normal_bracket;
                  }
                else if (c == L_('[') && *p == L_(':'))
                  {
@@ -494,24 +494,31 @@ FCT (const CHAR *pattern, const CHAR *st

                            idx = 0;
                            elem = hash % table_size;
-                           second = hash % (table_size - 2);
-                           while (symb_table[2 * elem] != 0)
+                           if (symb_table[2 * elem] != 0)
                              {
-                               /* First compare the hashing value.  */
-                               if (symb_table[2 * elem] == hash
-                                   && c1 == extra[symb_table[2 * elem + 1]]
-                                   && memcmp (str,
-                                              &extra[symb_table[2 * elem + 1]
-                                                    + 1], c1) == 0)
+                               second = hash % (table_size - 2) + 1;
+
+                               do
                                  {
-                                   /* Yep, this is the entry.  */
-                                   idx = symb_table[2 * elem + 1];
-                                   idx += 1 + extra[idx];
-                                   break;
-                                 }
+                                   /* First compare the hashing value.  */
+                                   if (symb_table[2 * elem] == hash
+                                       && (c1
+                                           == extra[symb_table[2 * elem + 1]])
+                                       && memcmp (str,
+                                                  &extra[symb_table[2 * elem
+                                                                    + 1]
+                                                         + 1], c1) == 0)
+                                     {
+                                       /* Yep, this is the entry.  */
+                                       idx = symb_table[2 * elem + 1];
+                                       idx += 1 + extra[idx];
+                                       break;
+                                     }

-                               /* Next entry.  */
-                               elem += second;
+                                   /* Next entry.  */
+                                   elem += second;
+                                 }
+                               while (symb_table[2 * elem] != 0);
                              }

                            if (symb_table[2 * elem] != 0)
@@ -592,6 +599,9 @@ FCT (const CHAR *pattern, const CHAR *st
                        if (!is_range && c == fn)
                          goto matched;

+                       /* This is needed if we goto normal_bracket; from
+                          outside of is_seqval's scope.  */
+                       is_seqval = false;
                        cold = c;
                        c = *p++;
                      }
@@ -703,25 +713,30 @@ FCT (const CHAR *pattern, const CHAR *st

                                idx = 0;
                                elem = hash % table_size;
-                               second = hash % (table_size - 2);
-                               while (symb_table[2 * elem] != 0)
+                               if (symb_table[2 * elem] != 0)
                                  {
-                               /* First compare the hashing value.  */
-                                   if (symb_table[2 * elem] == hash
-                                       && (c1
-                                           == extra[symb_table[2 * elem + 1]])
-                                       && memcmp (str,
-                                                  &extra[symb_table[2 * elem + 
1]
-                                                        + 1], c1) == 0)
+                                   second = hash % (table_size - 2) + 1;
+
+                                   do
                                      {
-                                       /* Yep, this is the entry.  */
-                                       idx = symb_table[2 * elem + 1];
-                                       idx += 1 + extra[idx];
-                                       break;
-                                     }
+                                       /* First compare the hashing value.  */
+                                       if (symb_table[2 * elem] == hash
+                                           && (c1
+                                               == extra[symb_table[2 * elem + 
1]])
+                                           && memcmp (str,
+                                                      &extra[symb_table[2 * 
elem + 1]
+                                                             + 1], c1) == 0)
+                                         {
+                                           /* Yep, this is the entry.  */
+                                           idx = symb_table[2 * elem + 1];
+                                           idx += 1 + extra[idx];
+                                           break;
+                                         }

-                                   /* Next entry.  */
-                                   elem += second;
+                                       /* Next entry.  */
+                                       elem += second;
+                                     }
+                                   while (symb_table[2 * elem] != 0);
                                  }

                                if (symb_table[2 * elem] != 0)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]