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.
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.
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.
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.
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.
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.
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.
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.
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 */
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 */
{ "/", "/" },
{ "////", "/" },
{ ".////", "." },
- { ".", "." },
- { "..", "." },
{ "../", ".." },
{ "..////", ".." },
- { "", "." },
{ "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
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,
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;
{ "/", "/" },
{ "////", "/" },
{ ".////", "." },
- { ".", "." },
- { "..", "." },
{ "../", ".." },
{ "..////", ".." },
- { "", "." },
{ "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
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,
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;