return g_string_free (path, FALSE);
}
+static gchar*
+strrchr_seperator (const gchar* filename)
+{
+#ifdef G_OS_WIN32
+ char *p2;
+#endif
+ char *p;
+
+ p = strrchr (filename, G_DIR_SEPARATOR);
+#ifdef G_OS_WIN32
+ p2 = strrchr (filename, '/');
+ if (p2 > p)
+ p = p2;
+#endif
+
+ return p;
+}
+
gchar *
g_path_get_dirname (const gchar *filename)
{
size_t count;
g_return_val_if_fail (filename != NULL, NULL);
- p = strrchr (filename, G_DIR_SEPARATOR);
+ p = strrchr_seperator (filename);
if (p == NULL)
return g_strdup (".");
if (p == filename)
return g_strdup (".");
/* No separator -> filename */
- r = strrchr (filename, G_DIR_SEPARATOR);
+ r = strrchr_seperator (filename);
if (r == NULL)
return g_strdup (filename);
if (r [1] == 0){
char *copy = g_strdup (filename);
copy [r-filename] = 0;
- r = strrchr (copy, G_DIR_SEPARATOR);
+ r = strrchr_seperator (copy);
if (r == NULL){
g_free (copy);
return FAILED ("Expected c:\\home, got %s", s);
g_free (s);
+ s = g_path_get_dirname ("c:/home/miguel");
+ if (strcmp (s, "c:/home") != 0)
+ return FAILED ("Expected c:/home, got %s", s);
+ g_free (s);
+
s = g_path_get_dirname ("c:\\home\\dingus\\");
if (strcmp (s, "c:\\home\\dingus") != 0)
return FAILED ("Expected c:\\home\\dingus, got %s", s);
return FAILED ("1 Expected dingus, got %s", s);
g_free (s);
+ s = g_path_get_basename ("c:/home/dingus/");
+ if (strcmp (s, "dingus") != 0)
+ return FAILED ("1 Expected dingus, got %s", s);
+ g_free (s);
+
s = g_path_get_basename ("c:\\home\\dingus");
if (strcmp (s, "dingus") != 0)
return FAILED ("2 Expected dingus, got %s", s);
g_free (s);
+
+ s = g_path_get_basename ("c:/home/dingus");
+ if (strcmp (s, "dingus") != 0)
+ return FAILED ("2 Expected dingus, got %s", s);
+ g_free (s);
#else
s = g_path_get_basename ("");
if (strcmp (s, ".") != 0)