+2004-03-21 Tor Lillqvist <tml@iki.fi>
+
+ * glib/gutils.c (g_path_get_dirname): Fix Win32 behaviour in some
+ cases where a drive letter is present. For 'a:' or 'a:foo', return
+ 'a:.'. This is mostly just for consistency with the behaviour
+ without a drive letter. But very important is to for 'a:\foo' or
+ 'a:\', return 'a:\', and not 'a:'. (Ditto for forward slashes
+ instead of backslashes.) (#137316)
+
+ * tests/dirname-test.c (main): More complete testing on Win32. If
+ a test fails, include expected and actual result in error message.
+
Fri Mar 19 15:21:09 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmain.c: Fix the accidental revert of the
+2004-03-21 Tor Lillqvist <tml@iki.fi>
+
+ * glib/gutils.c (g_path_get_dirname): Fix Win32 behaviour in some
+ cases where a drive letter is present. For 'a:' or 'a:foo', return
+ 'a:.'. This is mostly just for consistency with the behaviour
+ without a drive letter. But very important is to for 'a:\foo' or
+ 'a:\', return 'a:\', and not 'a:'. (Ditto for forward slashes
+ instead of backslashes.) (#137316)
+
+ * tests/dirname-test.c (main): More complete testing on Win32. If
+ a test fails, include expected and actual result in error message.
+
Fri Mar 19 15:21:09 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmain.c: Fix the accidental revert of the
+2004-03-21 Tor Lillqvist <tml@iki.fi>
+
+ * glib/gutils.c (g_path_get_dirname): Fix Win32 behaviour in some
+ cases where a drive letter is present. For 'a:' or 'a:foo', return
+ 'a:.'. This is mostly just for consistency with the behaviour
+ without a drive letter. But very important is to for 'a:\foo' or
+ 'a:\', return 'a:\', and not 'a:'. (Ditto for forward slashes
+ instead of backslashes.) (#137316)
+
+ * tests/dirname-test.c (main): More complete testing on Win32. If
+ a test fails, include expected and actual result in error message.
+
Fri Mar 19 15:21:09 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmain.c: Fix the accidental revert of the
+2004-03-21 Tor Lillqvist <tml@iki.fi>
+
+ * glib/gutils.c (g_path_get_dirname): Fix Win32 behaviour in some
+ cases where a drive letter is present. For 'a:' or 'a:foo', return
+ 'a:.'. This is mostly just for consistency with the behaviour
+ without a drive letter. But very important is to for 'a:\foo' or
+ 'a:\', return 'a:\', and not 'a:'. (Ditto for forward slashes
+ instead of backslashes.) (#137316)
+
+ * tests/dirname-test.c (main): More complete testing on Win32. If
+ a test fails, include expected and actual result in error message.
+
Fri Mar 19 15:21:09 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmain.c: Fix the accidental revert of the
+2004-03-21 Tor Lillqvist <tml@iki.fi>
+
+ * glib/gutils.c (g_path_get_dirname): Fix Win32 behaviour in some
+ cases where a drive letter is present. For 'a:' or 'a:foo', return
+ 'a:.'. This is mostly just for consistency with the behaviour
+ without a drive letter. But very important is to for 'a:\foo' or
+ 'a:\', return 'a:\', and not 'a:'. (Ditto for forward slashes
+ instead of backslashes.) (#137316)
+
+ * tests/dirname-test.c (main): More complete testing on Win32. If
+ a test fails, include expected and actual result in error message.
+
Fri Mar 19 15:21:09 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmain.c: Fix the accidental revert of the
+2004-03-21 Tor Lillqvist <tml@iki.fi>
+
+ * glib/gutils.c (g_path_get_dirname): Fix Win32 behaviour in some
+ cases where a drive letter is present. For 'a:' or 'a:foo', return
+ 'a:.'. This is mostly just for consistency with the behaviour
+ without a drive letter. But very important is to for 'a:\foo' or
+ 'a:\', return 'a:\', and not 'a:'. (Ditto for forward slashes
+ instead of backslashes.) (#137316)
+
+ * tests/dirname-test.c (main): More complete testing on Win32. If
+ a test fails, include expected and actual result in error message.
+
Fri Mar 19 15:21:09 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmain.c: Fix the accidental revert of the
}
#endif
if (!base)
+ {
+#ifdef G_OS_WIN32
+ if (g_ascii_isalpha (file_name[0]) && file_name[1] == ':')
+ {
+ gchar drive_colon_dot[4];
+
+ drive_colon_dot[0] = file_name[0];
+ drive_colon_dot[1] = ':';
+ drive_colon_dot[2] = '.';
+ drive_colon_dot[3] = '\0';
+
+ return g_strdup (drive_colon_dot);
+ }
+#endif
return g_strdup (".");
+ }
+
while (base > file_name && G_IS_DIR_SEPARATOR (*base))
base--;
+
+#ifdef G_OS_WIN32
+ if (base == file_name + 1 && g_ascii_isalpha (file_name[0]) && file_name[1] == ':')
+ base++;
+#endif
+
len = (guint) 1 + base - file_name;
base = g_new (gchar, len + 1);
gchar *filename;
gchar *dirname;
} dirname_checks[] = {
-#ifndef G_OS_WIN32
{ "/", "/" },
{ "////", "/" },
{ ".////", "." },
{ "a/b", "a" },
{ "a/b/", "a/b" },
{ "c///", "c" },
-#else
+ { "/a/b", "/a" },
+ { "/a/b/", "/a/b" },
+#ifdef G_OS_WIN32
{ "\\", "\\" },
{ ".\\\\\\\\", "." },
+ { ".\\/\\/", "." },
{ ".", "." },
{ "..", "." },
{ "..\\", ".." },
{ "..\\\\\\\\", ".." },
+ { "..\\//\\", ".." },
{ "", "." },
{ "a\\b", "a" },
{ "a\\b\\", "a\\b" },
+ { "\\a\\b", "\\a" },
+ { "\\a\\b\\", "\\a\\b" },
{ "c\\\\\\", "c" },
+ { "c/\\\\", "c" },
+ { "a:", "a:." },
+ { "a:foo", "a:." },
+ { "a:foo\\bar", "a:foo" },
+ { "a:/foo", "a:/" },
+ { "a:/foo/bar", "a:/foo" },
+ { "a:/", "a:/" },
+ { "a://", "a:/" },
+ { "a:\\foo", "a:\\" },
+ { "a:\\", "a:\\" },
+ { "a:\\\\", "a:\\" },
+ { "a:\\/", "a:\\" },
#endif
};
guint n_dirname_checks = sizeof (dirname_checks) / sizeof (dirname_checks[0]);
gchar *dirname;
dirname = g_path_get_dirname (dirname_checks[i].filename);
- g_assert (strcmp (dirname, dirname_checks[i].dirname) == 0);
+ if (strcmp (dirname, dirname_checks[i].dirname) != 0)
+ g_error ("%s returned %s, should return %s",
+ dirname_checks[i].filename, dirname,
+ dirname_checks[i].dirname);
g_free (dirname);
}