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

r4285 - in glibc-package/branches/eglibc-2.11/debian: . patches patches/any



Author: aurel32
Date: 2010-05-24 17:01:16 +0000 (Mon, 24 May 2010)
New Revision: 4285

Added:
   glibc-package/branches/eglibc-2.11/debian/patches/any/cvs-glob.diff
   glibc-package/branches/eglibc-2.11/debian/patches/any/cvs-umount-nofollow.diff
Modified:
   glibc-package/branches/eglibc-2.11/debian/changelog
   glibc-package/branches/eglibc-2.11/debian/patches/series
Log:
  * Add debian/patches/any/cvs-glob.diff from upstream to fix glob() with empty
    pattern.



Modified: glibc-package/branches/eglibc-2.11/debian/changelog
===================================================================
--- glibc-package/branches/eglibc-2.11/debian/changelog	2010-05-24 16:53:38 UTC (rev 4284)
+++ glibc-package/branches/eglibc-2.11/debian/changelog	2010-05-24 17:01:16 UTC (rev 4285)
@@ -81,6 +81,8 @@
     the getaddrinfo loop on the first successful.
   * Add debian/patches/any/cvs-umount-nofollow.diff from upstream to define
     UMOUNT_NOFOLLOW.
+  * Add debian/patches/any/cvs-glob.diff from upstream to fix glob() with empty
+    pattern.
 
   [ Samuel Thibault ]
   * debian/patches/hurd-i386/submitted-rtld_lock_recursive.diff: New patch to
@@ -97,7 +99,7 @@
   * Add kfreebsd/local-dosavesse.diff, which does not work,
     so rather use also added kfreebsd/local-nosavesse.diff
 
- -- Aurelien Jarno <aurel32@debian.org>  Mon, 24 May 2010 18:53:06 +0200
+ -- Aurelien Jarno <aurel32@debian.org>  Mon, 24 May 2010 19:00:25 +0200
 
 eglibc (2.10.2-9) unstable; urgency=low
 

Added: glibc-package/branches/eglibc-2.11/debian/patches/any/cvs-glob.diff
===================================================================
--- glibc-package/branches/eglibc-2.11/debian/patches/any/cvs-glob.diff	                        (rev 0)
+++ glibc-package/branches/eglibc-2.11/debian/patches/any/cvs-glob.diff	2010-05-24 17:01:16 UTC (rev 4285)
@@ -0,0 +1,271 @@
+2010-03-27  Ulrich Drepper  <drepper@redhat.com>
+
+	* posix/glob.c (glob): Initialize oldcount early, too.
+
+2010-03-24  Ulrich Drepper  <drepper@redhat.com>
+	    Andreas Schwab  <andreas@redhat.com>
+
+	* posix/glob.c (glob): Clean up gl_pathc and gl_pathv earlier.
+	If pattern is "" bail out early
+
+diff --git a/posix/glob.c b/posix/glob.c
+index 73081ec..3ae055d 100644
+--- a/posix/glob.c
++++ b/posix/glob.c
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007, 2008
++/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010
+    Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+@@ -421,6 +421,26 @@
+ 	}
+     }
+ 
++  if (!(flags & GLOB_APPEND))
++    {
++      pglob->gl_pathc = 0;
++      if (!(flags & GLOB_DOOFFS))
++	pglob->gl_pathv = NULL;
++      else
++	{
++	  size_t i;
++	  pglob->gl_pathv = (char **) malloc ((pglob->gl_offs + 1)
++					      * sizeof (char *));
++	  if (pglob->gl_pathv == NULL)
++	    return GLOB_NOSPACE;
++
++	  for (i = 0; i <= pglob->gl_offs; ++i)
++	    pglob->gl_pathv[i] = NULL;
++	}
++    }
++
++  oldcount = pglob->gl_pathc + pglob->gl_offs;
++
+   /* Find the filename.  */
+   filename = strrchr (pattern, '/');
+ #if defined __MSDOS__ || defined WINDOWS32
+@@ -448,6 +468,12 @@
+ 	}
+       else
+ 	{
++	  if (__builtin_expect (pattern[0] == '\0', 0))
++	    {
++	      dirs.gl_pathv = NULL;
++	      goto no_matches;
++	    }
++
+ 	  filename = pattern;
+ #ifdef _AMIGA
+ 	  dirname = "";
+@@ -495,7 +521,7 @@
+ 
+       if (filename[0] == '\0'
+ #if defined __MSDOS__ || defined WINDOWS32
+-          && dirname[dirlen - 1] != ':'
++	  && dirname[dirlen - 1] != ':'
+ 	  && (dirlen < 3 || dirname[dirlen - 2] != ':'
+ 	      || dirname[dirlen - 1] != '/')
+ #endif
+@@ -532,26 +558,6 @@
+ 	}
+     }
+ 
+-  if (!(flags & GLOB_APPEND))
+-    {
+-      pglob->gl_pathc = 0;
+-      if (!(flags & GLOB_DOOFFS))
+-        pglob->gl_pathv = NULL;
+-      else
+-	{
+-	  size_t i;
+-	  pglob->gl_pathv = (char **) malloc ((pglob->gl_offs + 1)
+-					      * sizeof (char *));
+-	  if (pglob->gl_pathv == NULL)
+-	    return GLOB_NOSPACE;
+-
+-	  for (i = 0; i <= pglob->gl_offs; ++i)
+-	    pglob->gl_pathv[i] = NULL;
+-	}
+-    }
+-
+-  oldcount = pglob->gl_pathc + pglob->gl_offs;
+-
+ #ifndef VMS
+   if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && dirname[0] == '~')
+     {
+@@ -567,7 +573,7 @@
+ # else
+ #  ifdef WINDOWS32
+ 	  if (home_dir == NULL || home_dir[0] == '\0')
+-            home_dir = "c:/users/default"; /* poor default */
++	    home_dir = "c:/users/default"; /* poor default */
+ #  else
+ #   if ! _LIBC || __OPTION_EGLIBC_GETLOGIN
+ 	  if (home_dir == NULL || home_dir[0] == '\0')
+diff --git a/posix/tst-gnuglob.c b/posix/tst-gnuglob.c
+index 95bfbae..d4539bd 100644
+--- a/posix/tst-gnuglob.c
++++ b/posix/tst-gnuglob.c
+@@ -1,6 +1,6 @@
+ /* Test the GNU extensions in glob which allow the user to provide callbacks
+    for the filesystem access functions.
+-   Copyright (C) 2001-2002, 2007 Free Software Foundation, Inc.
++   Copyright (C) 2001-2002, 2007, 2010 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
+ 
+@@ -61,9 +61,9 @@ static struct
+       { "..", 3, DT_DIR },
+       { ".foo", 3, DT_REG },
+       { "dir1lev3", 3, DT_DIR },
+-        { ".", 4, DT_DIR },
+-        { "..", 4, DT_DIR },
+-        { "file1lev4", 4, DT_REG },
++	{ ".", 4, DT_DIR },
++	{ "..", 4, DT_DIR },
++	{ "file1lev4", 4, DT_REG },
+       { "file1lev3", 3, DT_REG },
+       { "file2lev3", 3, DT_REG },
+     { "file2lev2", 2, DT_REG },
+@@ -81,9 +81,9 @@ static struct
+       { "..", 3, DT_DIR },
+       { ".foo", 3, DT_REG },
+       { ".dir", 3, DT_DIR },
+-        { ".", 4, DT_DIR },
+-        { "..", 4, DT_DIR },
+-        { "hidden", 4, DT_REG }
++	{ ".", 4, DT_DIR },
++	{ "..", 4, DT_DIR },
++	{ "hidden", 4, DT_REG }
+ };
+ #define nfiles (sizeof (filesystem) / sizeof (filesystem[0]))
+ 
+@@ -283,7 +283,7 @@ static const char *glob_errstring[] =
+ static const char *
+ flagstr (int flags)
+ {
+-  const char *strs[] =
++  static const char *const strs[] =
+   {
+     "GLOB_ERR", "GLOB_MARK", "GLOB_NOSORT", "GLOB_DOOFSS", "GLOB_NOCHECK",
+     "GLOB_APPEND", "GLOB_NOESCAPE", "GLOB_PERIOD", "GLOB_MAGCHAR",
+@@ -312,6 +312,29 @@ flagstr (int flags)
+     }
+ 
+   return buf;
++#undef nstrs
++}
++
++
++static const char *
++errstr (int val)
++{
++  static const char *const strs[] =
++    {
++      [GLOB_NOSPACE] = "GLOB_NOSPACE",
++      [GLOB_ABORTED] = "GLOB_ABORTED",
++      [GLOB_NOMATCH] = "GLOB_NOMATCH",
++      [GLOB_NOSYS] = "GLOB_NOSYS"
++    };
++#define nstrs (sizeof (strs) / sizeof (strs[0]))
++  static char buf[100];
++  if (val < 0 || val >= nstrs || strs[val] == NULL)
++    {
++      snprintf (buf, sizeof (buf), "GLOB_??? (%d)", val);
++      return buf;
++    }
++  return strs[val];
++#undef nstrs
+ }
+ 
+ 
+@@ -376,28 +399,34 @@ main (void)
+   gl.gl_lstat = my_stat;
+   gl.gl_stat = my_stat;
+ 
+-#define test(a, b, c...) \
++#define test(a, b, r, c...) \
+   fmt = a;								      \
+-  flags = b;								      \
++  flags = GLOB_ALTDIRFUNC | b;						      \
+   errval = glob (fmt, flags, NULL, &gl);				      \
+-  if (errval != 0)							      \
++  if (errval != r)							      \
+     {									      \
+-      printf ("glob (\"%s\", %s) failed: %s\n", fmt, flagstr (flags),	      \
+-	      errval >= 0 && errval < nglob_errstring			      \
+-	      ? glob_errstring[errval] : "???");			      \
++      if (r == 0)							      \
++	printf ("glob (\"%s\", %s) failed: %s\n", fmt, flagstr (flags),	      \
++		errval >= 0 && errval < nglob_errstring			      \
++		? glob_errstring[errval] : "???");			      \
++      else								      \
++	printf ("glob (\"%s\", %s) did not fail\n", fmt, flagstr (flags));    \
+       result = 1;							      \
+     }									      \
++  else if (r == 0)							      \
++    result |= test_result (fmt, flags, &gl, (const char *[]) { c, NULL });    \
+   else									      \
+-    result |= test_result (fmt, flags, &gl, (const char *[]) { c, NULL })
++    printf ("result for glob (\"%s\", %s) = %s\n\n", fmt, flagstr (flags),    \
++	    errstr (errval))
+ 
+-  test ("*/*/*", GLOB_ALTDIRFUNC,
++  test ("*/*/*", 0, 0,
+ 	"dir1lev1/dir2lev2/dir1lev3",
+ 	"dir1lev1/dir2lev2/file1lev3",
+ 	"dir1lev1/dir2lev2/file2lev3",
+ 	"dir1lev1/dir3lev2/file3lev3",
+ 	"dir1lev1/dir3lev2/file4lev3");
+ 
+-  test ("*/*/*", GLOB_ALTDIRFUNC | GLOB_PERIOD,
++  test ("*/*/*", GLOB_PERIOD, 0,
+ 	"dir1lev1/dir1lev2/.",
+ 	"dir1lev1/dir1lev2/..",
+ 	"dir1lev1/dir2lev2/.",
+@@ -415,7 +444,7 @@ main (void)
+ 	"dir2lev1/dir1lev2/.dir",
+ 	"dir2lev1/dir1lev2/.foo");
+ 
+-  test ("*/*/.*", GLOB_ALTDIRFUNC,
++  test ("*/*/.*", 0, 0,
+ 	"dir1lev1/dir1lev2/.",
+ 	"dir1lev1/dir1lev2/..",
+ 	"dir1lev1/dir2lev2/.",
+@@ -428,7 +457,7 @@ main (void)
+ 	"dir2lev1/dir1lev2/.dir",
+ 	"dir2lev1/dir1lev2/.foo");
+ 
+-  test ("*1*/*2*/.*", GLOB_ALTDIRFUNC,
++  test ("*1*/*2*/.*", 0, 0,
+ 	"dir1lev1/dir1lev2/.",
+ 	"dir1lev1/dir1lev2/..",
+ 	"dir1lev1/dir2lev2/.",
+@@ -441,7 +470,7 @@ main (void)
+ 	"dir2lev1/dir1lev2/.dir",
+ 	"dir2lev1/dir1lev2/.foo");
+ 
+-  test ("*1*/*1*/.*", GLOB_ALTDIRFUNC,
++  test ("*1*/*1*/.*", 0, 0,
+ 	"dir1lev1/dir1lev2/.",
+ 	"dir1lev1/dir1lev2/..",
+ 	"dir2lev1/dir1lev2/.",
+@@ -449,12 +478,16 @@ main (void)
+ 	"dir2lev1/dir1lev2/.dir",
+ 	"dir2lev1/dir1lev2/.foo");
+ 
+-  test ("\\/*", GLOB_ALTDIRFUNC,
++  test ("\\/*", 0, 0,
+ 	"/dir1lev1",
+ 	"/dir2lev1",
+ 	"/file1lev1",
+ 	"/file2lev1");
+ 
++  test ("", 0, GLOB_NOMATCH, NULL);
++
++  test ("", GLOB_NOCHECK, 0, "");
++
+   globfree (&gl);
+ 
+   return result;

Added: glibc-package/branches/eglibc-2.11/debian/patches/any/cvs-umount-nofollow.diff
===================================================================
--- glibc-package/branches/eglibc-2.11/debian/patches/any/cvs-umount-nofollow.diff	                        (rev 0)
+++ glibc-package/branches/eglibc-2.11/debian/patches/any/cvs-umount-nofollow.diff	2010-05-24 17:01:16 UTC (rev 4285)
@@ -0,0 +1,20 @@
+2010-03-12  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/unix/sysv/linux/sys/mount.h (UMOUNT_NOFOLLOW): Define.
+
+diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h
+index a41220d..923b461 100644
+--- a/sysdeps/unix/sysv/linux/sys/mount.h
++++ b/sysdeps/unix/sysv/linux/sys/mount.h
+@@ -123,8 +123,10 @@ enum
+ #define MNT_FORCE MNT_FORCE
+   MNT_DETACH = 2,		/* Just detach from the tree.  */
+ #define MNT_DETACH MNT_DETACH
+-  MNT_EXPIRE = 4		/* Mark for expiry.  */
++  MNT_EXPIRE = 4,		/* Mark for expiry.  */
+ #define MNT_EXPIRE MNT_EXPIRE
++  UMOUNT_NOFOLLOW = 8		/* Don't follow symlink on umount.  */
++#define UMOUNT_NOFOLLOW UMOUNT_NOFOLLOW
+ };
+ 
+ 

Modified: glibc-package/branches/eglibc-2.11/debian/patches/series
===================================================================
--- glibc-package/branches/eglibc-2.11/debian/patches/series	2010-05-24 16:53:38 UTC (rev 4284)
+++ glibc-package/branches/eglibc-2.11/debian/patches/series	2010-05-24 17:01:16 UTC (rev 4285)
@@ -230,3 +230,4 @@
 any/local-gai-rfc1918-scope-global.patch
 any/cvs-getaddrinfo.diff
 any/cvs-umount-nofollow.diff
+any/cvs-glob.diff


Reply to: