mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-11 15:06:14 +01:00
Fix Win32 behaviour in some cases where a drive letter is present. For
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.
This commit is contained in:
parent
000085ffa7
commit
421e7fdfad
12
ChangeLog
12
ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
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>
|
Fri Mar 19 15:21:09 2004 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* glib/gmain.c: Fix the accidental revert of the
|
* glib/gmain.c: Fix the accidental revert of the
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
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>
|
Fri Mar 19 15:21:09 2004 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* glib/gmain.c: Fix the accidental revert of the
|
* glib/gmain.c: Fix the accidental revert of the
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
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>
|
Fri Mar 19 15:21:09 2004 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* glib/gmain.c: Fix the accidental revert of the
|
* glib/gmain.c: Fix the accidental revert of the
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
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>
|
Fri Mar 19 15:21:09 2004 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* glib/gmain.c: Fix the accidental revert of the
|
* glib/gmain.c: Fix the accidental revert of the
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
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>
|
Fri Mar 19 15:21:09 2004 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* glib/gmain.c: Fix the accidental revert of the
|
* glib/gmain.c: Fix the accidental revert of the
|
||||||
|
@ -1,3 +1,15 @@
|
|||||||
|
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>
|
Fri Mar 19 15:21:09 2004 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
* glib/gmain.c: Fix the accidental revert of the
|
* glib/gmain.c: Fix the accidental revert of the
|
||||||
|
@ -585,9 +585,31 @@ g_path_get_dirname (const gchar *file_name)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (!base)
|
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 (".");
|
return g_strdup (".");
|
||||||
|
}
|
||||||
|
|
||||||
while (base > file_name && G_IS_DIR_SEPARATOR (*base))
|
while (base > file_name && G_IS_DIR_SEPARATOR (*base))
|
||||||
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;
|
len = (guint) 1 + base - file_name;
|
||||||
|
|
||||||
base = g_new (gchar, len + 1);
|
base = g_new (gchar, len + 1);
|
||||||
|
@ -60,7 +60,6 @@ main (int argc,
|
|||||||
gchar *filename;
|
gchar *filename;
|
||||||
gchar *dirname;
|
gchar *dirname;
|
||||||
} dirname_checks[] = {
|
} dirname_checks[] = {
|
||||||
#ifndef G_OS_WIN32
|
|
||||||
{ "/", "/" },
|
{ "/", "/" },
|
||||||
{ "////", "/" },
|
{ "////", "/" },
|
||||||
{ ".////", "." },
|
{ ".////", "." },
|
||||||
@ -72,17 +71,35 @@ main (int argc,
|
|||||||
{ "a/b", "a" },
|
{ "a/b", "a" },
|
||||||
{ "a/b/", "a/b" },
|
{ "a/b/", "a/b" },
|
||||||
{ "c///", "c" },
|
{ "c///", "c" },
|
||||||
#else
|
{ "/a/b", "/a" },
|
||||||
|
{ "/a/b/", "/a/b" },
|
||||||
|
#ifdef G_OS_WIN32
|
||||||
{ "\\", "\\" },
|
{ "\\", "\\" },
|
||||||
{ ".\\\\\\\\", "." },
|
{ ".\\\\\\\\", "." },
|
||||||
|
{ ".\\/\\/", "." },
|
||||||
{ ".", "." },
|
{ ".", "." },
|
||||||
{ "..", "." },
|
{ "..", "." },
|
||||||
{ "..\\", ".." },
|
{ "..\\", ".." },
|
||||||
{ "..\\\\\\\\", ".." },
|
{ "..\\\\\\\\", ".." },
|
||||||
|
{ "..\\//\\", ".." },
|
||||||
{ "", "." },
|
{ "", "." },
|
||||||
{ "a\\b", "a" },
|
{ "a\\b", "a" },
|
||||||
{ "a\\b\\", "a\\b" },
|
{ "a\\b\\", "a\\b" },
|
||||||
|
{ "\\a\\b", "\\a" },
|
||||||
|
{ "\\a\\b\\", "\\a\\b" },
|
||||||
{ "c\\\\\\", "c" },
|
{ "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
|
#endif
|
||||||
};
|
};
|
||||||
guint n_dirname_checks = sizeof (dirname_checks) / sizeof (dirname_checks[0]);
|
guint n_dirname_checks = sizeof (dirname_checks) / sizeof (dirname_checks[0]);
|
||||||
@ -92,7 +109,10 @@ main (int argc,
|
|||||||
gchar *dirname;
|
gchar *dirname;
|
||||||
|
|
||||||
dirname = g_path_get_dirname (dirname_checks[i].filename);
|
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);
|
g_free (dirname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user