Add test for g_path_skip_root().
authorTor Lillqvist <tml@iki.fi>
Fri, 5 Jan 2001 20:19:37 +0000 (20:19 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Fri, 5 Jan 2001 20:19:37 +0000 (20:19 +0000)
2001-01-05  Tor Lillqvist  <tml@iki.fi>

* testglib.c (main): Add test for g_path_skip_root().

* gutils.c (g_path_skip_root): Fix bugs in code I just added ;-)

12 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
glib/gutils.c
gutils.c
testglib.c
tests/testglib.c

index e5ca5dd..10269d5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2001-01-05  Tor Lillqvist  <tml@iki.fi>
 
+       * testglib.c (main): Add test for g_path_skip_root().
+
        * gfileutils.c (g_file_open_tmp): (Win32:) Look also for (illegal)
        forward slashes in the template.
 
index e5ca5dd..10269d5 100644 (file)
@@ -1,5 +1,7 @@
 2001-01-05  Tor Lillqvist  <tml@iki.fi>
 
+       * testglib.c (main): Add test for g_path_skip_root().
+
        * gfileutils.c (g_file_open_tmp): (Win32:) Look also for (illegal)
        forward slashes in the template.
 
index e5ca5dd..10269d5 100644 (file)
@@ -1,5 +1,7 @@
 2001-01-05  Tor Lillqvist  <tml@iki.fi>
 
+       * testglib.c (main): Add test for g_path_skip_root().
+
        * gfileutils.c (g_file_open_tmp): (Win32:) Look also for (illegal)
        forward slashes in the template.
 
index e5ca5dd..10269d5 100644 (file)
@@ -1,5 +1,7 @@
 2001-01-05  Tor Lillqvist  <tml@iki.fi>
 
+       * testglib.c (main): Add test for g_path_skip_root().
+
        * gfileutils.c (g_file_open_tmp): (Win32:) Look also for (illegal)
        forward slashes in the template.
 
index e5ca5dd..10269d5 100644 (file)
@@ -1,5 +1,7 @@
 2001-01-05  Tor Lillqvist  <tml@iki.fi>
 
+       * testglib.c (main): Add test for g_path_skip_root().
+
        * gfileutils.c (g_file_open_tmp): (Win32:) Look also for (illegal)
        forward slashes in the template.
 
index e5ca5dd..10269d5 100644 (file)
@@ -1,5 +1,7 @@
 2001-01-05  Tor Lillqvist  <tml@iki.fi>
 
+       * testglib.c (main): Add test for g_path_skip_root().
+
        * gfileutils.c (g_file_open_tmp): (Win32:) Look also for (illegal)
        forward slashes in the template.
 
index e5ca5dd..10269d5 100644 (file)
@@ -1,5 +1,7 @@
 2001-01-05  Tor Lillqvist  <tml@iki.fi>
 
+       * testglib.c (main): Add test for g_path_skip_root().
+
        * gfileutils.c (g_file_open_tmp): (Win32:) Look also for (illegal)
        forward slashes in the template.
 
index e5ca5dd..10269d5 100644 (file)
@@ -1,5 +1,7 @@
 2001-01-05  Tor Lillqvist  <tml@iki.fi>
 
+       * testglib.c (main): Add test for g_path_skip_root().
+
        * gfileutils.c (g_file_open_tmp): (Win32:) Look also for (illegal)
        forward slashes in the template.
 
index 957155c..7e2cec5 100644 (file)
@@ -472,12 +472,28 @@ g_path_skip_root (gchar *file_name)
   g_return_val_if_fail (file_name != NULL, NULL);
   
 #ifdef G_OS_WIN32
-  /* Skip \\server\share\ */
+  /* Skip \\server\share */
   if (file_name[0] == G_DIR_SEPARATOR &&
       file_name[1] == G_DIR_SEPARATOR &&
-      file_name[2] && 
-      strchr (file_name + 2, G_DIR_SEPARATOR) > file_name + 2)
-    return strchr (file_name + 2, G_DIR_SEPARATOR) + 1;
+      file_name[2])
+    {
+      gchar *p, *q;
+
+      if ((p = strchr (file_name + 2, G_DIR_SEPARATOR)) > file_name + 2 &&
+         p[1])
+       {
+         file_name = p + 1;
+
+         while (file_name[0] && file_name[0] != G_DIR_SEPARATOR)
+           file_name++;
+
+         /* Possibly skip a backslash after the share name */
+         if (file_name[0] == G_DIR_SEPARATOR)
+           file_name++;
+
+         return file_name;
+       }
+    }
 #endif
   
   /* Skip initial slashes */
index 957155c..7e2cec5 100644 (file)
--- a/gutils.c
+++ b/gutils.c
@@ -472,12 +472,28 @@ g_path_skip_root (gchar *file_name)
   g_return_val_if_fail (file_name != NULL, NULL);
   
 #ifdef G_OS_WIN32
-  /* Skip \\server\share\ */
+  /* Skip \\server\share */
   if (file_name[0] == G_DIR_SEPARATOR &&
       file_name[1] == G_DIR_SEPARATOR &&
-      file_name[2] && 
-      strchr (file_name + 2, G_DIR_SEPARATOR) > file_name + 2)
-    return strchr (file_name + 2, G_DIR_SEPARATOR) + 1;
+      file_name[2])
+    {
+      gchar *p, *q;
+
+      if ((p = strchr (file_name + 2, G_DIR_SEPARATOR)) > file_name + 2 &&
+         p[1])
+       {
+         file_name = p + 1;
+
+         while (file_name[0] && file_name[0] != G_DIR_SEPARATOR)
+           file_name++;
+
+         /* Possibly skip a backslash after the share name */
+         if (file_name[0] == G_DIR_SEPARATOR)
+           file_name++;
+
+         return file_name;
+       }
+    }
 #endif
   
   /* Skip initial slashes */
index 2f7b615..5399a6e 100644 (file)
@@ -333,28 +333,48 @@ main (int   argc,
     { "/", "/" },
     { "////", "/" },
     { ".////", "." },
-    { ".", "." },
-    { "..", "." },
     { "../", ".." },
     { "..////", ".." },
-    { "", "." },
     { "a/b", "a" },
     { "a/b/", "a/b" },
     { "c///", "c" },
 #else
     { "\\", "\\" },
     { ".\\\\\\\\", "." },
-    { ".", "." },
-    { "..", "." },
     { "..\\", ".." },
     { "..\\\\\\\\", ".." },
-    { "", "." },
     { "a\\b", "a" },
     { "a\\b\\", "a\\b" },
     { "c\\\\\\", "c" },
 #endif
+    { ".", "." },
+    { "..", "." },
+    { "", "." },
   };
-  guint n_dirname_checks = sizeof (dirname_checks) / sizeof (dirname_checks[0]);
+  guint n_dirname_checks = G_N_ELEMENTS (dirname_checks);
+
+  struct {
+    gchar *filename;
+    gchar *without_root;
+  } skip_root_checks[] = {
+#ifndef G_OS_WIN32
+    { "/", "" },
+    { "//", "" },
+    { "/foo", "foo" },
+    { "//foo", "foo" },
+    { "a/b", NULL },
+#else
+    { "\\", "" },
+    { "\\foo", "foo" },
+    { "\\\\server\\foo", "" },
+    { "\\\\server\\foo\\bar", "bar" },
+    { "a\\b", NULL },
+#endif
+    { ".", NULL },
+    { "", NULL },
+  };
+  guint n_skip_root_checks = G_N_ELEMENTS (skip_root_checks);
+
   guint16 gu16t1 = 0x44afU, gu16t2 = 0xaf44U;
   guint32 gu32t1 = 0x02a7f109U, gu32t2 = 0x09f1a702U;
 #ifdef G_HAVE_GINT64
@@ -367,6 +387,7 @@ main (int   argc,
   char template[10];
   GError *error;
   char *name_used;
+  gchar *p;
 
   g_print ("TestGLib v%u.%u.%u (i:%u b:%u)\n",
           glib_major_version,
@@ -416,6 +437,28 @@ main (int   argc,
   if (n_dirname_checks)
     g_print ("ok\n");
 
+  g_print ("checking g_path_skip_root()...");
+  for (i = 0; i < n_skip_root_checks; i++)
+    {
+      gchar *skipped;
+
+      skipped = g_path_skip_root (skip_root_checks[i].filename);
+      if ((skipped && !skip_root_checks[i].without_root) ||
+         (!skipped && skip_root_checks[i].without_root) ||
+         ((skipped && skip_root_checks[i].without_root) &&
+          strcmp (skipped, skip_root_checks[i].without_root)))
+       {
+         g_print ("\nfailed for \"%s\"==\"%s\" (returned: \"%s\")\n",
+                  skip_root_checks[i].filename,
+                  (skip_root_checks[i].without_root ?
+                   skip_root_checks[i].without_root : "<NULL>"),
+                  (skipped ? skipped : "<NULL>"));
+         n_skip_root_checks = 0;
+       }
+    }
+  if (n_skip_root_checks)
+    g_print ("ok\n");
+
   g_print ("checking doubly linked lists...");
 
   list = NULL;
index 2f7b615..5399a6e 100644 (file)
@@ -333,28 +333,48 @@ main (int   argc,
     { "/", "/" },
     { "////", "/" },
     { ".////", "." },
-    { ".", "." },
-    { "..", "." },
     { "../", ".." },
     { "..////", ".." },
-    { "", "." },
     { "a/b", "a" },
     { "a/b/", "a/b" },
     { "c///", "c" },
 #else
     { "\\", "\\" },
     { ".\\\\\\\\", "." },
-    { ".", "." },
-    { "..", "." },
     { "..\\", ".." },
     { "..\\\\\\\\", ".." },
-    { "", "." },
     { "a\\b", "a" },
     { "a\\b\\", "a\\b" },
     { "c\\\\\\", "c" },
 #endif
+    { ".", "." },
+    { "..", "." },
+    { "", "." },
   };
-  guint n_dirname_checks = sizeof (dirname_checks) / sizeof (dirname_checks[0]);
+  guint n_dirname_checks = G_N_ELEMENTS (dirname_checks);
+
+  struct {
+    gchar *filename;
+    gchar *without_root;
+  } skip_root_checks[] = {
+#ifndef G_OS_WIN32
+    { "/", "" },
+    { "//", "" },
+    { "/foo", "foo" },
+    { "//foo", "foo" },
+    { "a/b", NULL },
+#else
+    { "\\", "" },
+    { "\\foo", "foo" },
+    { "\\\\server\\foo", "" },
+    { "\\\\server\\foo\\bar", "bar" },
+    { "a\\b", NULL },
+#endif
+    { ".", NULL },
+    { "", NULL },
+  };
+  guint n_skip_root_checks = G_N_ELEMENTS (skip_root_checks);
+
   guint16 gu16t1 = 0x44afU, gu16t2 = 0xaf44U;
   guint32 gu32t1 = 0x02a7f109U, gu32t2 = 0x09f1a702U;
 #ifdef G_HAVE_GINT64
@@ -367,6 +387,7 @@ main (int   argc,
   char template[10];
   GError *error;
   char *name_used;
+  gchar *p;
 
   g_print ("TestGLib v%u.%u.%u (i:%u b:%u)\n",
           glib_major_version,
@@ -416,6 +437,28 @@ main (int   argc,
   if (n_dirname_checks)
     g_print ("ok\n");
 
+  g_print ("checking g_path_skip_root()...");
+  for (i = 0; i < n_skip_root_checks; i++)
+    {
+      gchar *skipped;
+
+      skipped = g_path_skip_root (skip_root_checks[i].filename);
+      if ((skipped && !skip_root_checks[i].without_root) ||
+         (!skipped && skip_root_checks[i].without_root) ||
+         ((skipped && skip_root_checks[i].without_root) &&
+          strcmp (skipped, skip_root_checks[i].without_root)))
+       {
+         g_print ("\nfailed for \"%s\"==\"%s\" (returned: \"%s\")\n",
+                  skip_root_checks[i].filename,
+                  (skip_root_checks[i].without_root ?
+                   skip_root_checks[i].without_root : "<NULL>"),
+                  (skipped ? skipped : "<NULL>"));
+         n_skip_root_checks = 0;
+       }
+    }
+  if (n_skip_root_checks)
+    g_print ("ok\n");
+
   g_print ("checking doubly linked lists...");
 
   list = NULL;