public inbox for libc-hacker@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Fix glob with empty pattern and patterns ending in slash
@ 2010-03-22 15:14 Andreas Schwab
  2010-03-24 19:01 ` Ulrich Drepper
  0 siblings, 1 reply; 3+ messages in thread
From: Andreas Schwab @ 2010-03-22 15:14 UTC (permalink / raw)
  To: libc-hacker

* posix/glob.c (glob): Match only directories when pattern ends in
a slash.  Return no match when pattern is empty.
---
 posix/glob.c |   46 ++++++++--------------------------------------
 1 files changed, 8 insertions(+), 38 deletions(-)

diff --git a/posix/glob.c b/posix/glob.c
index 73081ec..ab1c63f 100644
--- a/posix/glob.c
+++ b/posix/glob.c
@@ -489,44 +489,6 @@ glob (pattern, flags, errfunc, pglob)
       *((char *) mempcpy (newp, pattern, dirlen)) = '\0';
       dirname = newp;
       ++filename;
-
-      if (filename[0] == '\0'
-#if defined __MSDOS__ || defined WINDOWS32
-          && dirname[dirlen - 1] != ':'
-	  && (dirlen < 3 || dirname[dirlen - 2] != ':'
-	      || dirname[dirlen - 1] != '/')
-#endif
-	  && dirlen > 1)
-	/* "pattern/".  Expand "pattern", appending slashes.  */
-	{
-	  int orig_flags = flags;
-	  if (!(flags & GLOB_NOESCAPE) && dirname[dirlen - 1] == '\\')
-	    {
-	      /* "pattern\\/".  Remove the final backslash if it hasn't
-		 been quoted.  */
-	      char *p = (char *) &dirname[dirlen - 1];
-
-	      while (p > dirname && p[-1] == '\\') --p;
-	      if ((&dirname[dirlen] - p) & 1)
-		{
-		  *(char *) &dirname[--dirlen] = '\0';
-		  flags &= ~(GLOB_NOCHECK | GLOB_NOMAGIC);
-		}
-	    }
-	  int val = glob (dirname, flags | GLOB_MARK, errfunc, pglob);
-	  if (val == 0)
-	    pglob->gl_flags = ((pglob->gl_flags & ~GLOB_MARK)
-			       | (flags & GLOB_MARK));
-	  else if (val == GLOB_NOMATCH && flags != orig_flags)
-	    {
-	      /* Make sure globfree (&dirs); is a nop.  */
-	      dirs.gl_pathv = NULL;
-	      flags = orig_flags;
-	      oldcount = pglob->gl_pathc + pglob->gl_offs;
-	      goto no_matches;
-	    }
-	  return val;
-	}
     }
 
   if (!(flags & GLOB_APPEND))
@@ -549,6 +511,14 @@ glob (pattern, flags, errfunc, pglob)
 
   oldcount = pglob->gl_pathc + pglob->gl_offs;
 
+  /* An empty pattern cannot match any file name.  */
+  if (pattern[0] == '\0')
+    {
+      /* Make sure globfree (&dirs); is a nop.  */
+      dirs.gl_pathv = NULL;
+      goto no_matches;
+    }
+
 #ifndef VMS
   if ((flags & (GLOB_TILDE|GLOB_TILDE_CHECK)) && dirname[0] == '~')
     {
-- 
1.7.0.1


Andreas.

-- 
Andreas Schwab, schwab@redhat.com
GPG Key fingerprint = D4E8 DBE3 3813 BB5D FA84  5EC7 45C6 250E 6F00 984E
"And now for something completely different."

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Fix glob with empty pattern and patterns ending in slash
  2010-03-22 15:14 [PATCH] Fix glob with empty pattern and patterns ending in slash Andreas Schwab
@ 2010-03-24 19:01 ` Ulrich Drepper
  2010-03-25 10:07   ` Andreas Schwab
  0 siblings, 1 reply; 3+ messages in thread
From: Ulrich Drepper @ 2010-03-24 19:01 UTC (permalink / raw)
  To: libc-hacker

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I see the problem with empty patterns and check in a slightly changed
patch for that.  What is the issue with trailing slashes?  I need a test
case.  For the other change there also should have been a test case.

- -- 
➧ Ulrich Drepper ➧ Red Hat, Inc. ➧ 444 Castro St ➧ Mountain View, CA ❖
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/

iEYEARECAAYFAkuqYYQACgkQ2ijCOnn/RHT3uwCeOczWg6VpNUuL7mg1LprYP0DU
ZoYAn2t8oVH/EoajN6IQZsiIrmXEqk34
=0+ar
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Fix glob with empty pattern and patterns ending in slash
  2010-03-24 19:01 ` Ulrich Drepper
@ 2010-03-25 10:07   ` Andreas Schwab
  0 siblings, 0 replies; 3+ messages in thread
From: Andreas Schwab @ 2010-03-25 10:07 UTC (permalink / raw)
  To: Ulrich Drepper; +Cc: libc-hacker

Ulrich Drepper <drepper@redhat.com> writes:

> What is the issue with trailing slashes?

It's inconsistent.  Globbing with "*/" returns only directories, but
"**/" or "?*/" returns all files with directories marked.  Either result
could be the intented one, but IMHO the first one is more useful, and
consistent with globbing in bash and other shells.

Andreas.

-- 
Andreas Schwab, schwab@redhat.com
GPG Key fingerprint = D4E8 DBE3 3813 BB5D FA84  5EC7 45C6 250E 6F00 984E
"And now for something completely different."

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-03-25 10:07 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-03-22 15:14 [PATCH] Fix glob with empty pattern and patterns ending in slash Andreas Schwab
2010-03-24 19:01 ` Ulrich Drepper
2010-03-25 10:07   ` Andreas Schwab

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).