bug-gnulib
[Top][All Lists]
Advanced

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

[PATCH 3/3] glob: test previous patch


From: Eric Blake
Subject: [PATCH 3/3] glob: test previous patch
Date: Mon, 22 Mar 2010 17:34:29 -0600

* tests/test-glob.c (main): Enhance test.
* doc/posix-functions/glob.texi (glob): Document the fix.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog                     |    6 +++
 doc/posix-functions/glob.texi |    4 ++
 tests/test-glob.c             |   78 ++++++++++++++++++++++++++++++++++++++--
 3 files changed, 84 insertions(+), 4 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 43386c8..1aad7f6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-03-22  Eric Blake  <address@hidden>
+
+       glob: test previous patch
+       * tests/test-glob.c (main): Enhance test.
+       * doc/posix-functions/glob.texi (glob): Document the fix.
+
 2010-03-22  Andreas Schwab  <address@hidden>

        glob: fix empty pattern and patterns ending in slash
diff --git a/doc/posix-functions/glob.texi b/doc/posix-functions/glob.texi
index 3f73489..eab26d1 100644
--- a/doc/posix-functions/glob.texi
+++ b/doc/posix-functions/glob.texi
@@ -14,6 +14,10 @@ glob
 @item
 This function may list symbolic links to nonexistent files among the results,
 on some platforms.
address@hidden
+On some platforms, this function fails to recognize that the empty
+pattern cannot match any files:
+glibc 2.11.
 @end itemize

 Portability problems not fixed by Gnulib:
diff --git a/tests/test-glob.c b/tests/test-glob.c
index ab2d531..93f6b2b 100644
--- a/tests/test-glob.c
+++ b/tests/test-glob.c
@@ -25,12 +25,34 @@ SIGNATURE_CHECK (glob, int, (char const *, int, int (*) 
(char const *, int),
                              glob_t *));
 SIGNATURE_CHECK (globfree, void, (glob_t *));

+#include <errno.h>
 #include <string.h>

 #include "macros.h"

 #define GL_NO_SUCH_FILE "/gnulib-magic-does-not-exist"

+#define STREQ(a, b) (strcmp (a, b) == 0)
+
+static int iteration;
+static int
+errfunc (char const *name, int error)
+{
+  switch (iteration)
+    {
+    case 1:
+      ASSERT (STREQ (name, GL_NO_SUCH_FILE));
+      ASSERT (error == ENOENT);
+      return 0;
+    case 2:
+      ASSERT (STREQ (name, GL_NO_SUCH_FILE));
+      ASSERT (error == ENOENT);
+      return 1;
+    default:
+      ASSERT (0);
+    }
+}
+
 int
 main ()
 {
@@ -44,20 +66,46 @@ main ()

   res = glob (".", 0, NULL, &g);
   ASSERT (res == 0 && g.gl_pathc == 1);
+  ASSERT (STREQ (g.gl_pathv[0], "."));
+  ASSERT (g.gl_pathv[1] == NULL);
   globfree (&g);

   res = glob (".", GLOB_NOSORT, NULL, &g);
   ASSERT (res == 0 && g.gl_pathc == 1);
+  ASSERT (STREQ (g.gl_pathv[0], "."));
+  ASSERT (g.gl_pathv[1] == NULL);
   globfree (&g);

   res = glob (".", GLOB_MARK, NULL, &g);
   ASSERT (res == 0 && g.gl_pathc == 1);
+  ASSERT (STREQ (g.gl_pathv[0], "./"));
+  ASSERT (g.gl_pathv[1] == NULL);

   res = glob (".", GLOB_APPEND, NULL, &g);
   ASSERT (res == 0 && g.gl_pathc == 2);
+  ASSERT (STREQ (g.gl_pathv[0], "./"));
+  ASSERT (STREQ (g.gl_pathv[1], "."));
+  ASSERT (g.gl_pathv[2] == NULL);
+  globfree (&g);
+
+  ASSERT (g.gl_offs == 0);
+  g.gl_offs = 1;
+  res = glob (".", GLOB_DOOFFS, NULL, &g);
+  ASSERT (res == 0 && g.gl_pathc == 1);
+  ASSERT (g.gl_pathv[0] == NULL);
+  ASSERT (STREQ (g.gl_pathv[1], "."));
+  ASSERT (g.gl_pathv[2] == NULL);
+
+  res = glob (".", GLOB_APPEND | GLOB_DOOFFS | GLOB_MARK, NULL, &g);
+  ASSERT (res == 0 && g.gl_pathc == 2);
+  ASSERT (g.gl_pathv[0] == NULL);
+  ASSERT (STREQ (g.gl_pathv[1], "."));
+  ASSERT (STREQ (g.gl_pathv[2], "./"));
+  ASSERT (g.gl_pathv[3] == NULL);
   globfree (&g);
+  g.gl_offs = 0;

-  res = glob (".", GLOB_NOESCAPE, NULL, &g);
+  res = glob (".", GLOB_NOESCAPE, errfunc, &g);
   ASSERT (res == 0 && g.gl_pathc == 1);
   globfree (&g);

@@ -66,11 +114,33 @@ main ()
   globfree (&g);

   res = glob (GL_NO_SUCH_FILE, 0, NULL, &g);
-  ASSERT (res == GLOB_NOMATCH);
+  ASSERT (res == GLOB_NOMATCH && g.gl_pathc == 0);
+  globfree (&g);
+
+  iteration = 1;
+  res = glob (GL_NO_SUCH_FILE "/*", GLOB_NOCHECK, errfunc, &g);
+  ASSERT (res == 0 && g.gl_pathc == 1);
+  ASSERT (STREQ (g.gl_pathv[0], GL_NO_SUCH_FILE "/*"));
+  globfree (&g);
+
+  iteration = 2;
+  res = glob (GL_NO_SUCH_FILE "/*", 0, errfunc, &g);
+  ASSERT (res == GLOB_ABORTED && g.gl_pathc == 0);
+  globfree (&g);
+
+  iteration = 3;
+  res = glob (GL_NO_SUCH_FILE "/*", GLOB_ERR, NULL, &g);
+  ASSERT (res == GLOB_ABORTED && g.gl_pathc == 0);
+  globfree (&g);
+
+  /* The empty pattern cannot match.  */
+  res = glob ("", 0, NULL, &g);
+  ASSERT (res == GLOB_NOMATCH && g.gl_pathc == 0);
+  globfree (&g);

-  res = glob (GL_NO_SUCH_FILE, GLOB_NOCHECK, NULL, &g);
+  res = glob ("", GLOB_NOCHECK, NULL, &g);
   ASSERT (res == 0 && g.gl_pathc == 1);
-  ASSERT (strcmp (g.gl_pathv[0], GL_NO_SUCH_FILE) == 0);
+  ASSERT (STREQ (g.gl_pathv[0], ""));
   globfree (&g);

   return 0;
-- 
1.6.6.1





reply via email to

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