bug-gnulib
[Top][All Lists]
Advanced

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

Re: coreutils merge into gnulib


From: Eric Blake
Subject: Re: coreutils merge into gnulib
Date: Tue, 04 Jul 2006 13:22:39 -0600
User-agent: Thunderbird 1.5.0.4 (Windows/20060516)

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

According to Eric Blake on 7/3/2006 11:49 AM:
> Mark D. Baushke <mdb <at> gnu.org> writes:
> 
>> The modules/dirname seems to now depend on xstrndup
> 
> Yes.  My original proposal for the change to dirname (was it last November?) 
> added this dependency; coreutils was already using xstrndup so Paul missed it.

In fact, my original proposal also added a dirname-tests module, to make
up for removing the test from dirname.c.  I'm committing this:

ChangeLog:
2006-07-04  Eric Blake  <address@hidden>

        * modules/dirname-tests: New test module.
        * tests/test-dirname.c: New file, replacing dirname.c
        TEST_DIRNAME section that was recently deleted.

- --
Life is short - so eat dessert first!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.1 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFEqr//84KuGfSFAYARAtCOAJ9Mjz4ZtSa41GJ8AokhEgaZwkv1bgCglsWz
eaLDe7t1KwUqhBQSk2E421A=
=HnoS
-----END PGP SIGNATURE-----
Index: modules/dirname-tests
===================================================================
RCS file: modules/dirname-tests
diff -N modules/dirname-tests
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ modules/dirname-tests       4 Jul 2006 19:19:05 -0000
@@ -0,0 +1,12 @@
+Files:
+tests/test-dirname.c
+
+Depends-on:
+strdup
+
+configure.ac:
+
+Makefile.am:
+TESTS += test-dirname
+noinst_PROGRAMS += test-dirname
+test_dirname_SOURCES = test-dirname.c
Index: tests/test-dirname.c
===================================================================
RCS file: tests/test-dirname.c
diff -N tests/test-dirname.c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ tests/test-dirname.c        4 Jul 2006 19:19:05 -0000
@@ -0,0 +1,196 @@
+/* Test the gnulib dirname module.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+   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
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along
+   with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "dirname.h"
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "strdup.h"
+
+const char *program_name = "test-dirname";
+
+struct test {
+  const char *name;    /* Name under test.  */
+  const char *dir;     /* dir_name (name).  */
+  const char *last;    /* last_component (name).  */
+  const char *base;    /* base_name (name).  */
+  const char *stripped;        /* name after strip_trailing_slashes (name).  */
+  bool modified;        /* result of strip_trailing_slashes (name).  */
+  bool absolute;       /* IS_ABSOLUTE_FILE_NAME (name).  */
+};
+
+static struct test tests[] = {
+  {"d/f",      "d",    "f",    "f",    "d/f",  false,  false},
+  {"/d/f",     "/d",   "f",    "f",    "/d/f", false,  true},
+  {"d/f/",     "d",    "f/",   "f/",   "d/f",  true,   false},
+  {"d/f//",    "d",    "f//",  "f/",   "d/f",  true,   false},
+  {"f",                ".",    "f",    "f",    "f",    false,  false},
+  {"/",                "/",    "",     "/",    "/",    false,  true},
+#if DOUBLE_SLASH_IS_DISTINCT_ROOT
+  {"//",       "//",   "",     "//",   "//",   false,  true},
+  {"//d",      "//",   "d",    "d",    "//d",  false,  true},
+#else
+  {"//",       "/",    "",     "/",    "/",    true,   true},
+  {"//d",      "/",    "d",    "d",    "//d",  false,  true},
+#endif
+  {"///",      "/",    "",     "/",    "/",    true,   true},
+  {"///a///",  "/",    "a///", "a/",   "///a", true,   true},
+  /* POSIX requires dirname("") and basename("") to both return ".",
+     but dir_name and base_name are defined differently.  */
+  {"",         ".",    "",     "",     "",     false,  false},
+  {".",                ".",    ".",    ".",    ".",    false,  false},
+  {"..",       ".",    "..",   "..",   "..",   false,  false},
+#if FILE_SYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR
+  {"a\\",      ".",    "a\\",  "a\\",  "a",    true,   false},
+  {"a\\b",     "a",    "b",    "b",    "a\\b", false,  false},
+  {"\\",       "\\",   "",     "\\",   "\\",   false,  true},
+  {"\\/\\",    "\\",   "",     "\\",   "\\",   true,   true},
+  {"\\\\/",    "\\",   "",     "\\",   "\\",   true,   true},
+  {"\\//",     "\\",   "",     "\\",   "\\",   true,   true},
+  {"//\\",     "/",    "",     "/",    "/",    true,   true},
+#else
+  {"a\\",      ".",    "a\\",  "a\\",  "a\\",  false,  false},
+  {"a\\b",     ".",    "a\\b", "a\\b", "a\\b", false,  false},
+  {"\\",       ".",    "\\",   "\\",   "\\",   false,  false},
+  {"\\/\\",    "\\",   "\\",   "\\",   "\\/\\",false,  false},
+  {"\\\\/",    ".",    "\\\\/","\\\\/","\\\\", true,   false},
+  {"\\//",     ".",    "\\//", "\\/",  "\\",   true,   false},
+# if DOUBLE_SLASH_IS_DISTINCT_ROOT
+  {"//\\",     "//",   "\\",   "\\",   "//\\", false,  true},
+# else
+  {"//\\",     "/",    "\\",   "\\",   "//\\", false,  true},
+# endif
+#endif
+#if FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX
+# if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
+  {"c:",       "c:",   "",     "c:",   "c:",   false,  false},
+  {"c:/",      "c:/",  "",     "c:/",  "c:/",  false,  true},
+  {"c://",     "c:/",  "",     "c:/",  "c:/",  true,   true},
+  {"c:/d",     "c:/",  "d",    "d",    "c:/d", false,  true},
+  {"c://d",    "c:/",  "d",    "d",    "c://d",false,  true},
+  {"c:/d/",    "c:/",  "d/",   "d/",   "c:/d", true,   true},
+  {"c:/d/f",   "c:/d", "f",    "f",    "c:/d/f",false, true},
+  {"c:d",      "c:.",  "d",    "d",    "c:d",  false,  false},
+  {"c:d/",     "c:.",  "d/",   "d/",   "c:d",  true,   false},
+  {"c:d/f",    "c:d",  "f",    "f",    "c:d/f",false,  false},
+  {"a:b:c",    "a:.",  "b:c",  "./b:c","a:b:c",false,  false},
+  {"a/b:c",    "a",    "b:c",  "./b:c","a/b:c",false,  false},
+  {"a/b:c/",   "a",    "b:c/", "./b:c/","a/b:c",true,  false},
+# else /* ! FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE */
+  {"c:",       "c:",   "",     "c:",   "c:",   false,  true},
+  {"c:/",      "c:",   "",     "c:",   "c:",   true,   true},
+  {"c://",     "c:",   "",     "c:",   "c:",   true,   true},
+  {"c:/d",     "c:",   "d",    "d",    "c:/d", false,  true},
+  {"c://d",    "c:",   "d",    "d",    "c://d",false,  true},
+  {"c:/d/",    "c:",   "d/",   "d/",   "c:/d", true,   true},
+  {"c:/d/f",   "c:/d", "f",    "f",    "c:/d/f",false, true},
+  {"c:d",      "c:",   "d",    "d",    "c:d",  false,  true},
+  {"c:d/",     "c:",   "d/",   "d/",   "c:d",  true,   true},
+  {"c:d/f",    "c:d",  "f",    "f",    "c:d/f",false,  true},
+  {"a:b:c",    "a:",   "b:c",  "./b:c","a:b:c",false,  true},
+  {"a/b:c",    "a",    "b:c",  "./b:c","a/b:c",false,  false},
+  {"a/b:c/",   "a",    "b:c/", "./b:c/","a/b:c",true,  false},
+# endif
+#else /* ! FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX */
+  {"c:",       ".",    "c:",   "c:",   "c:",   false,  false},
+  {"c:/",      ".",    "c:/",  "c:/",  "c:",   true,   false},
+  {"c://",     ".",    "c://", "c:/",  "c:",   true,   false},
+  {"c:/d",     "c:",   "d",    "d",    "c:/d", false,  false},
+  {"c://d",    "c:",   "d",    "d",    "c://d",false,  false},
+  {"c:/d/",    "c:",   "d/",   "d/",   "c:/d", true,   false},
+  {"c:/d/f",   "c:/d", "f",    "f",    "c:/d/f",false, false},
+  {"c:d",      ".",    "c:d",  "c:d",  "c:d",  false,  false},
+  {"c:d/",     ".",    "c:d/", "c:d/", "c:d",  true,   false},
+  {"c:d/f",    "c:d",  "f",    "f",    "c:d/f",false,  false},
+  {"a:b:c",    ".",    "a:b:c","a:b:c","a:b:c",false,  false},
+  {"a/b:c",    "a",    "b:c",  "b:c",  "a/b:c",false,  false},
+  {"a/b:c/",   "a",    "b:c/", "b:c/", "a/b:c",true,   false},
+#endif
+  {"1:",       ".",    "1:",   "1:",   "1:",   false,  false},
+  {"1:/",      ".",    "1:/",  "1:/",  "1:",   true,   false},
+  {"/:",       "/",    ":",    ":",    "/:",   false,  true},
+  {"/:/",      "/",    ":/",   ":/",   "/:",   true,   true},
+  /* End sentinel.  */
+  {NULL,       NULL,   NULL,   NULL,   NULL,   false,  false}
+};
+
+int
+main ()
+{
+  struct test *t;
+  bool ok = true;
+
+  for (t = tests; t->name; t++)
+    {
+      char *dir = dir_name (t->name);
+      int dirlen = dir_len (t->name);
+      char *last = last_component (t->name);
+      char *base = base_name (t->name);
+      int baselen = base_len (base);
+      char *stripped = strdup (t->name);
+      bool modified = strip_trailing_slashes (stripped);
+      bool absolute = IS_ABSOLUTE_FILE_NAME (t->name);
+      if (! (strcmp (dir, t->dir) == 0
+            && (dirlen == strlen (dir)
+                || (dirlen + 1 == strlen (dir) && dir[dirlen] == '.'))))
+       {
+         ok = false;
+         printf ("dir_name `%s': got `%s' len %d, expected `%s' len %d\n",
+                 t->name, dir, dirlen, t->dir, strlen (t->dir));
+       }
+      if (strcmp (last, t->last))
+       {
+         ok = false;
+         printf ("last_component `%s': got `%s', expected `%s'\n",
+                 t->name, last, t->last);
+       }
+      if (! (strcmp (base, t->base) == 0
+            && (baselen == strlen (base)
+                || (baselen + 1 == strlen (base)
+                    && ISSLASH (base[baselen])))))
+       {
+         ok = false;
+         printf ("base_name `%s': got `%s' len %d, expected `%s' len %d\n",
+                 t->name, base, baselen, t->base, strlen (t->base));
+       }
+      if (strcmp (stripped, t->stripped) || modified != t->modified)
+       {
+         ok = false;
+         printf ("strip_trailing_slashes `%s': got %s %s, expected %s %s\n",
+                 t->name, stripped, modified ? "changed" : "unchanged",
+                 t->stripped, t->modified ? "changed" : "unchanged");
+       }
+      if (t->absolute != absolute)
+       {
+         ok = false;
+         printf ("`%s': got %s, expected %s\n", t->name,
+                 absolute ? "absolute" : "relative",
+                 t->absolute ? "absolute" : "relative");
+       }
+      free (dir);
+      free (base);
+      free (stripped);
+    }
+  return ok ? 0 : 1;
+}

reply via email to

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