Mark the functions g_basename and g_dirname deprecated. They will issue an
authorSebastian Wilhelmi <wilhelmi@ira.uka.de>
Thu, 20 Jul 2000 16:58:54 +0000 (16:58 +0000)
committerSebastian Wilhelmi <wilhelmi@src.gnome.org>
Thu, 20 Jul 2000 16:58:54 +0000 (16:58 +0000)
2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

* gutils.c, glib.h: Mark the functions g_basename and g_dirname
deprecated. They will issue an warning once, when compiled with
G_ENABLE_DEBUG, but continue to work as before. Instead the
functions g_path_get_basename and g_path_get_dirname should be
used, which BOTH return newly allocated memory, that has to freed
by g_free. The new g_path_get_basename now strips trailing slashes
from the path. This fixes #5097. For discussion see
http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html

* gwin32.c, testglib.c, tests/dirname-test.c: Use the new
functions instead of the old ones.

* gmodule/libgplugin_a.c, gmodule/testgmodule.c: Use
g_path_get_basename instead of the deprecated g_basename.

20 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.h
glib/glib.h
glib/gutils.c
glib/gwin32.c
gmodule/ChangeLog
gmodule/libgplugin_a.c
gmodule/testgmodule.c
gutils.c
gwin32.c
testglib.c
tests/dirname-test.c
tests/testglib.c

index 5cd4cc0..9bb85dd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
 
+       * gutils.c, glib.h: Mark the functions g_basename and g_dirname
+       deprecated. They will issue an warning once, when compiled with
+       G_ENABLE_DEBUG, but continue to work as before. Instead the
+       functions g_path_get_basename and g_path_get_dirname should be
+       used, which BOTH return newly allocated memory, that has to freed
+       by g_free. The new g_path_get_basename now strips trailing slashes
+       from the path. This fixes #5097. For discussion see
+       http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html
+
+       * gwin32.c, testglib.c, tests/dirname-test.c: Use the new
+       functions instead of the old ones.
+
        * ghash.c, gscanner.c, glib.h: Mark the functions
        g_hash_table_freeze, g_hash_table_thaw and thus
        g_scanner_freeze_symbol_table and g_scanner_thaw_symbol_table
index 5cd4cc0..9bb85dd 100644 (file)
@@ -1,5 +1,17 @@
 2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
 
+       * gutils.c, glib.h: Mark the functions g_basename and g_dirname
+       deprecated. They will issue an warning once, when compiled with
+       G_ENABLE_DEBUG, but continue to work as before. Instead the
+       functions g_path_get_basename and g_path_get_dirname should be
+       used, which BOTH return newly allocated memory, that has to freed
+       by g_free. The new g_path_get_basename now strips trailing slashes
+       from the path. This fixes #5097. For discussion see
+       http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html
+
+       * gwin32.c, testglib.c, tests/dirname-test.c: Use the new
+       functions instead of the old ones.
+
        * ghash.c, gscanner.c, glib.h: Mark the functions
        g_hash_table_freeze, g_hash_table_thaw and thus
        g_scanner_freeze_symbol_table and g_scanner_thaw_symbol_table
index 5cd4cc0..9bb85dd 100644 (file)
@@ -1,5 +1,17 @@
 2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
 
+       * gutils.c, glib.h: Mark the functions g_basename and g_dirname
+       deprecated. They will issue an warning once, when compiled with
+       G_ENABLE_DEBUG, but continue to work as before. Instead the
+       functions g_path_get_basename and g_path_get_dirname should be
+       used, which BOTH return newly allocated memory, that has to freed
+       by g_free. The new g_path_get_basename now strips trailing slashes
+       from the path. This fixes #5097. For discussion see
+       http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html
+
+       * gwin32.c, testglib.c, tests/dirname-test.c: Use the new
+       functions instead of the old ones.
+
        * ghash.c, gscanner.c, glib.h: Mark the functions
        g_hash_table_freeze, g_hash_table_thaw and thus
        g_scanner_freeze_symbol_table and g_scanner_thaw_symbol_table
index 5cd4cc0..9bb85dd 100644 (file)
@@ -1,5 +1,17 @@
 2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
 
+       * gutils.c, glib.h: Mark the functions g_basename and g_dirname
+       deprecated. They will issue an warning once, when compiled with
+       G_ENABLE_DEBUG, but continue to work as before. Instead the
+       functions g_path_get_basename and g_path_get_dirname should be
+       used, which BOTH return newly allocated memory, that has to freed
+       by g_free. The new g_path_get_basename now strips trailing slashes
+       from the path. This fixes #5097. For discussion see
+       http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html
+
+       * gwin32.c, testglib.c, tests/dirname-test.c: Use the new
+       functions instead of the old ones.
+
        * ghash.c, gscanner.c, glib.h: Mark the functions
        g_hash_table_freeze, g_hash_table_thaw and thus
        g_scanner_freeze_symbol_table and g_scanner_thaw_symbol_table
index 5cd4cc0..9bb85dd 100644 (file)
@@ -1,5 +1,17 @@
 2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
 
+       * gutils.c, glib.h: Mark the functions g_basename and g_dirname
+       deprecated. They will issue an warning once, when compiled with
+       G_ENABLE_DEBUG, but continue to work as before. Instead the
+       functions g_path_get_basename and g_path_get_dirname should be
+       used, which BOTH return newly allocated memory, that has to freed
+       by g_free. The new g_path_get_basename now strips trailing slashes
+       from the path. This fixes #5097. For discussion see
+       http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html
+
+       * gwin32.c, testglib.c, tests/dirname-test.c: Use the new
+       functions instead of the old ones.
+
        * ghash.c, gscanner.c, glib.h: Mark the functions
        g_hash_table_freeze, g_hash_table_thaw and thus
        g_scanner_freeze_symbol_table and g_scanner_thaw_symbol_table
index 5cd4cc0..9bb85dd 100644 (file)
@@ -1,5 +1,17 @@
 2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
 
+       * gutils.c, glib.h: Mark the functions g_basename and g_dirname
+       deprecated. They will issue an warning once, when compiled with
+       G_ENABLE_DEBUG, but continue to work as before. Instead the
+       functions g_path_get_basename and g_path_get_dirname should be
+       used, which BOTH return newly allocated memory, that has to freed
+       by g_free. The new g_path_get_basename now strips trailing slashes
+       from the path. This fixes #5097. For discussion see
+       http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html
+
+       * gwin32.c, testglib.c, tests/dirname-test.c: Use the new
+       functions instead of the old ones.
+
        * ghash.c, gscanner.c, glib.h: Mark the functions
        g_hash_table_freeze, g_hash_table_thaw and thus
        g_scanner_freeze_symbol_table and g_scanner_thaw_symbol_table
index 5cd4cc0..9bb85dd 100644 (file)
@@ -1,5 +1,17 @@
 2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
 
+       * gutils.c, glib.h: Mark the functions g_basename and g_dirname
+       deprecated. They will issue an warning once, when compiled with
+       G_ENABLE_DEBUG, but continue to work as before. Instead the
+       functions g_path_get_basename and g_path_get_dirname should be
+       used, which BOTH return newly allocated memory, that has to freed
+       by g_free. The new g_path_get_basename now strips trailing slashes
+       from the path. This fixes #5097. For discussion see
+       http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html
+
+       * gwin32.c, testglib.c, tests/dirname-test.c: Use the new
+       functions instead of the old ones.
+
        * ghash.c, gscanner.c, glib.h: Mark the functions
        g_hash_table_freeze, g_hash_table_thaw and thus
        g_scanner_freeze_symbol_table and g_scanner_thaw_symbol_table
index 5cd4cc0..9bb85dd 100644 (file)
@@ -1,5 +1,17 @@
 2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
 
+       * gutils.c, glib.h: Mark the functions g_basename and g_dirname
+       deprecated. They will issue an warning once, when compiled with
+       G_ENABLE_DEBUG, but continue to work as before. Instead the
+       functions g_path_get_basename and g_path_get_dirname should be
+       used, which BOTH return newly allocated memory, that has to freed
+       by g_free. The new g_path_get_basename now strips trailing slashes
+       from the path. This fixes #5097. For discussion see
+       http://mail.gnome.org/pipermail/gtk-devel-list/2000-April/003139.html
+
+       * gwin32.c, testglib.c, tests/dirname-test.c: Use the new
+       functions instead of the old ones.
+
        * ghash.c, gscanner.c, glib.h: Mark the functions
        g_hash_table_freeze, g_hash_table_thaw and thus
        g_scanner_freeze_symbol_table and g_scanner_thaw_symbol_table
diff --git a/glib.h b/glib.h
index 732aa04..fdfb687 100644 (file)
--- a/glib.h
+++ b/glib.h
@@ -1701,15 +1701,22 @@ gint    g_vsnprintf             (gchar       *string,
                                 gulong       n,
                                 gchar const *format,
                                 va_list      args);
-gchar* g_basename              (const gchar *file_name);
 /* Check if a file name is an absolute path */
 gboolean g_path_is_absolute    (const gchar *file_name);
 /* In case of absolute paths, skip the root part */
 gchar*  g_path_skip_root       (gchar       *file_name);
 
-/* strings are newly allocated with g_malloc() */
+/* These two functions are deprecated and will be removed in the next
+ * major release of GLib. Use g_path_get_dirname/g_path_get_basename
+ * instead. Whatch out! The string returned by g_path_get_basename
+ * must be g_freed, while the string returned by g_basename must not.*/
+gchar* g_basename              (const gchar *file_name);
 gchar* g_dirname               (const gchar *file_name);
+
+/* The returned strings are newly allocated with g_malloc() */
 gchar* g_get_current_dir       (void);
+gchar* g_path_get_basename     (const gchar *file_name);
+gchar* g_path_get_dirname      (const gchar *file_name);
 
 /* Get the codeset for the current locale */
 /* gchar * g_get_codeset    (void); */
index 732aa04..fdfb687 100644 (file)
@@ -1701,15 +1701,22 @@ gint    g_vsnprintf             (gchar       *string,
                                 gulong       n,
                                 gchar const *format,
                                 va_list      args);
-gchar* g_basename              (const gchar *file_name);
 /* Check if a file name is an absolute path */
 gboolean g_path_is_absolute    (const gchar *file_name);
 /* In case of absolute paths, skip the root part */
 gchar*  g_path_skip_root       (gchar       *file_name);
 
-/* strings are newly allocated with g_malloc() */
+/* These two functions are deprecated and will be removed in the next
+ * major release of GLib. Use g_path_get_dirname/g_path_get_basename
+ * instead. Whatch out! The string returned by g_path_get_basename
+ * must be g_freed, while the string returned by g_basename must not.*/
+gchar* g_basename              (const gchar *file_name);
 gchar* g_dirname               (const gchar *file_name);
+
+/* The returned strings are newly allocated with g_malloc() */
 gchar* g_get_current_dir       (void);
+gchar* g_path_get_basename     (const gchar *file_name);
+gchar* g_path_get_dirname      (const gchar *file_name);
 
 /* Get the codeset for the current locale */
 /* gchar * g_get_codeset    (void); */
index c9f2c28..794f4ea 100644 (file)
@@ -278,6 +278,17 @@ gchar*
 g_basename (const gchar           *file_name)
 {
   register gchar *base;
+#ifdef G_ENABLE_DEBUG
+  static gboolean first_call = TRUE;
+
+  if (first_call)
+    {
+      g_warning("g_basename is deprecated. Use g_path_get_basename instead.");
+      g_warning("Watch out! You have to g_free the string returned by "
+               "g_path_get_basename.");
+      first_call = FALSE;
+    }
+#endif /* G_ENABLE_DEBUG */
   
   g_return_val_if_fail (file_name != NULL, NULL);
   
@@ -293,6 +304,52 @@ g_basename (const gchar       *file_name)
   return (gchar*) file_name;
 }
 
+gchar*
+g_path_get_basename (const gchar   *file_name)
+{
+  register gint base;
+  register gint last_nonslash;
+  guint len;
+  gchar *retval;
+  g_return_val_if_fail (file_name != NULL, NULL);
+  
+  if (file_name[0] == '\0')
+    /* empty string */
+    return g_strdup (".");
+
+  last_nonslash = strlen (file_name) - 1;
+
+  while (last_nonslash >= 0 && file_name [last_nonslash] == G_DIR_SEPARATOR)
+    last_nonslash--;
+
+  if (last_nonslash == -1)
+    /* string only containing slashes */
+    return g_strdup (G_DIR_SEPARATOR_S);
+
+#ifdef G_OS_WIN32
+  if (last_nonslash == 1 && isalpha (file_name[0]) && file_name[1] == ':')
+    /* string only containing slashes and a drive */
+    return g_strdup (G_DIR_SEPARATOR_S);
+#endif /* G_OS_WIN32 */
+
+  base = last_nonslash;
+
+  while (base >=0 && file_name [base] != G_DIR_SEPARATOR)
+    base--;
+
+#ifdef G_OS_WIN32
+  if (base == -1 && isalpha (file_name[0]) && file_name[1] == ':')
+    base = 1;
+#endif /* G_OS_WIN32 */
+
+  len = last_nonslash - base;
+  retval = g_malloc (len + 1);
+  memcpy (retval, file_name + base + 1, len);
+  retval [len] = '\0';
+  return retval;
+}
+
 gboolean
 g_path_is_absolute (const gchar *file_name)
 {
@@ -326,7 +383,7 @@ g_path_skip_root (gchar *file_name)
 }
 
 gchar*
-g_dirname (const gchar    *file_name)
+g_path_get_dirname (const gchar           *file_name)
 {
   register gchar *base;
   register guint len;
@@ -348,6 +405,22 @@ g_dirname (const gchar        *file_name)
 }
 
 gchar*
+g_dirname (const gchar    *file_name)
+{
+#ifdef G_ENABLE_DEBUG
+  static gboolean first_call = TRUE;
+
+  if (first_call)
+    {
+      g_warning("g_dirname is deprecated. Use g_path_get_dirname instead.");
+      first_call = FALSE;
+    }
+#endif /* G_ENABLE_DEBUG */
+
+  return g_path_get_dirname (file_name);
+}
+
+gchar*
 g_get_current_dir (void)
 {
   gchar *buffer = NULL;
index b5e2d80..9fdd417 100644 (file)
@@ -131,6 +131,7 @@ struct dirent*
 g_win32_readdir (DIR *dir)
 {
   static struct dirent result;
+  gchar *basename;
 
   g_return_val_if_fail (dir != NULL, NULL);
 
@@ -153,7 +154,12 @@ g_win32_readdir (DIR *dir)
            }
        }
     }
-  strcpy (result.d_name, g_basename (((LPWIN32_FIND_DATA) dir->find_file_data)->cFileName));
+  
+  basename = g_path_get_basename (((LPWIN32_FIND_DATA) dir->find_file_data)->cFileName);
+
+  strcpy (result.d_name, basename);
+
+  g_free (basename);
       
   return &result;
 }
index 5450f61..56e8c9d 100644 (file)
@@ -1,3 +1,8 @@
+2000-07-20  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * libgplugin_a.c, testgmodule.c: Use g_path_get_basename instead
+       of the deprecated g_basename.
+
 2000-07-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
 
        * gmodule.h: include glib.h before doing extern "C". Makes some C++
index 2a4ced7..0920ebb 100644 (file)
@@ -56,11 +56,12 @@ gplugin_a_module_func (GModule *module)
 {
   void (*f) (void) = NULL;
   gchar *string;
+  gchar *basename = g_path_get_basename (g_module_name (module));
 
   string = "gplugin_say_boo_func";
   g_print ("GPluginA: retrive symbol `%s' from \"%s\"\n",
-          string,
-          g_basename (g_module_name (module)));
+          string, basename);
+  g_free (basename);
   if (!g_module_symbol (module, string, (gpointer) &f))
     {
       g_print ("error: %s\n", g_module_error ());
index 85f4c8d..02d2ef5 100644 (file)
@@ -46,6 +46,7 @@ main (int   arg,
 {
   GModule *module_self, *module_a, *module_b;
   gchar *string;
+  gchar *basename;
   gchar *plugin_a, *plugin_b;
   SimpleFunc f_a, f_b, f_self;
   GModuleFunc gmod_f;
@@ -76,7 +77,9 @@ main (int   arg,
     }
   g_print ("check that not yet bound symbols in shared libraries of main module are retrievable:\n");
   string = "g_module_close";
-  g_print ("retrive symbol `%s' from \"%s\":\n", string, g_basename (g_module_name (module_self)));
+  basename = g_path_get_basename (g_module_name (module_self));
+  g_print ("retrive symbol `%s' from \"%s\":\n", string, basename);
+  g_free (basename);
   if (!g_module_symbol (module_self, string, (gpointer) &f_self))
     {
       g_print ("error: %s\n", g_module_error ());
@@ -101,14 +104,18 @@ main (int   arg,
   /* get plugin specific symbols and call them
    */
   string = "gplugin_a_func";
-  g_print ("retrive symbol `%s' from \"%s\"\n", string, g_basename (g_module_name (module_a)));
+  basename = g_path_get_basename (g_module_name (module_a));
+  g_print ("retrive symbol `%s' from \"%s\"\n", string, basename);
+  g_free (basename);
   if (!g_module_symbol (module_a, string, (gpointer) &f_a))
     {
       g_print ("error: %s\n", g_module_error ());
       return 1;
     }
   string = "gplugin_b_func";
-  g_print ("retrive symbol `%s' from \"%s\"\n", string, g_basename (g_module_name (module_b)));
+  basename = g_path_get_basename (g_module_name (module_b));
+  g_print ("retrive symbol `%s' from \"%s\"\n", string, basename);
+  g_free (basename);
   if (!g_module_symbol (module_b, string, (gpointer) &f_b))
     {
       g_print ("error: %s\n", g_module_error ());
@@ -122,19 +129,25 @@ main (int   arg,
   /* get and call globally clashing functions
    */
   string = "g_clash_func";
-  g_print ("retrive symbol `%s' from \"%s\"\n", string, g_basename (g_module_name (module_self)));
+  basename = g_path_get_basename (g_module_name (module_self));
+  g_print ("retrive symbol `%s' from \"%s\"\n", string, basename);
+  g_free (basename);
   if (!g_module_symbol (module_self, string, (gpointer) &f_self))
     {
       g_print ("error: %s\n", g_module_error ());
       return 1;
     }
-  g_print ("retrive symbol `%s' from \"%s\"\n", string, g_basename (g_module_name (module_a)));
+  basename = g_path_get_basename (g_module_name (module_a));
+  g_print ("retrive symbol `%s' from \"%s\"\n", string, basename);
+  g_free (basename);
   if (!g_module_symbol (module_a, string, (gpointer) &f_a))
     {
       g_print ("error: %s\n", g_module_error ());
       return 1;
     }
-  g_print ("retrive symbol `%s' from \"%s\"\n", string, g_basename (g_module_name (module_b)));
+  basename = g_path_get_basename (g_module_name (module_b));
+  g_print ("retrive symbol `%s' from \"%s\"\n", string, basename);
+  g_free (basename);
   if (!g_module_symbol (module_b, string, (gpointer) &f_b))
     {
       g_print ("error: %s\n", g_module_error ());
@@ -150,17 +163,23 @@ main (int   arg,
   /* get and call clashing plugin functions
    */
   string = "gplugin_clash_func";
-  g_print ("retrive symbol `%s' from \"%s\"\n", string, g_basename (g_module_name (module_self)));
+  basename = g_path_get_basename (g_module_name (module_self));
+  g_print ("retrive symbol `%s' from \"%s\"\n", string, basename);
+  g_free (basename);
   if (!g_module_symbol (module_self, string, (gpointer) &f_self))
     f_self = NULL;
   g_print ("retrived function `%s' from self: %p\n", string, f_self);
-  g_print ("retrive symbol `%s' from \"%s\"\n", string, g_basename (g_module_name (module_a)));
+  basename = g_path_get_basename (g_module_name (module_a));
+  g_print ("retrive symbol `%s' from \"%s\"\n", string, basename);
+  g_free (basename);
   if (!g_module_symbol (module_a, string, (gpointer) &f_a))
     {
       g_print ("error: %s\n", g_module_error ());
       return 1;
     }
-  g_print ("retrive symbol `%s' from \"%s\"\n", string, g_basename (g_module_name (module_b)));
+  basename = g_path_get_basename (g_module_name (module_b));
+  g_print ("retrive symbol `%s' from \"%s\"\n", string, basename);
+  g_free (basename);
   if (!g_module_symbol (module_b, string, (gpointer) &f_b))
     {
       g_print ("error: %s\n", g_module_error ());
@@ -176,7 +195,9 @@ main (int   arg,
   /* call gmodule function form A
    */
   string = "gplugin_a_module_func";
-  g_print ("retrive symbol `%s' from \"%s\"\n", string, g_basename (g_module_name (module_a)));
+  basename = g_path_get_basename (g_module_name (module_a));
+  g_print ("retrive symbol `%s' from \"%s\"\n", string, basename);
+  g_free (basename);
   if (!g_module_symbol (module_a, string, (gpointer) &gmod_f))
     {
       g_print ("error: %s\n", g_module_error ());
index c9f2c28..794f4ea 100644 (file)
--- a/gutils.c
+++ b/gutils.c
@@ -278,6 +278,17 @@ gchar*
 g_basename (const gchar           *file_name)
 {
   register gchar *base;
+#ifdef G_ENABLE_DEBUG
+  static gboolean first_call = TRUE;
+
+  if (first_call)
+    {
+      g_warning("g_basename is deprecated. Use g_path_get_basename instead.");
+      g_warning("Watch out! You have to g_free the string returned by "
+               "g_path_get_basename.");
+      first_call = FALSE;
+    }
+#endif /* G_ENABLE_DEBUG */
   
   g_return_val_if_fail (file_name != NULL, NULL);
   
@@ -293,6 +304,52 @@ g_basename (const gchar       *file_name)
   return (gchar*) file_name;
 }
 
+gchar*
+g_path_get_basename (const gchar   *file_name)
+{
+  register gint base;
+  register gint last_nonslash;
+  guint len;
+  gchar *retval;
+  g_return_val_if_fail (file_name != NULL, NULL);
+  
+  if (file_name[0] == '\0')
+    /* empty string */
+    return g_strdup (".");
+
+  last_nonslash = strlen (file_name) - 1;
+
+  while (last_nonslash >= 0 && file_name [last_nonslash] == G_DIR_SEPARATOR)
+    last_nonslash--;
+
+  if (last_nonslash == -1)
+    /* string only containing slashes */
+    return g_strdup (G_DIR_SEPARATOR_S);
+
+#ifdef G_OS_WIN32
+  if (last_nonslash == 1 && isalpha (file_name[0]) && file_name[1] == ':')
+    /* string only containing slashes and a drive */
+    return g_strdup (G_DIR_SEPARATOR_S);
+#endif /* G_OS_WIN32 */
+
+  base = last_nonslash;
+
+  while (base >=0 && file_name [base] != G_DIR_SEPARATOR)
+    base--;
+
+#ifdef G_OS_WIN32
+  if (base == -1 && isalpha (file_name[0]) && file_name[1] == ':')
+    base = 1;
+#endif /* G_OS_WIN32 */
+
+  len = last_nonslash - base;
+  retval = g_malloc (len + 1);
+  memcpy (retval, file_name + base + 1, len);
+  retval [len] = '\0';
+  return retval;
+}
+
 gboolean
 g_path_is_absolute (const gchar *file_name)
 {
@@ -326,7 +383,7 @@ g_path_skip_root (gchar *file_name)
 }
 
 gchar*
-g_dirname (const gchar    *file_name)
+g_path_get_dirname (const gchar           *file_name)
 {
   register gchar *base;
   register guint len;
@@ -348,6 +405,22 @@ g_dirname (const gchar        *file_name)
 }
 
 gchar*
+g_dirname (const gchar    *file_name)
+{
+#ifdef G_ENABLE_DEBUG
+  static gboolean first_call = TRUE;
+
+  if (first_call)
+    {
+      g_warning("g_dirname is deprecated. Use g_path_get_dirname instead.");
+      first_call = FALSE;
+    }
+#endif /* G_ENABLE_DEBUG */
+
+  return g_path_get_dirname (file_name);
+}
+
+gchar*
 g_get_current_dir (void)
 {
   gchar *buffer = NULL;
index b5e2d80..9fdd417 100644 (file)
--- a/gwin32.c
+++ b/gwin32.c
@@ -131,6 +131,7 @@ struct dirent*
 g_win32_readdir (DIR *dir)
 {
   static struct dirent result;
+  gchar *basename;
 
   g_return_val_if_fail (dir != NULL, NULL);
 
@@ -153,7 +154,12 @@ g_win32_readdir (DIR *dir)
            }
        }
     }
-  strcpy (result.d_name, g_basename (((LPWIN32_FIND_DATA) dir->find_file_data)->cFileName));
+  
+  basename = g_path_get_basename (((LPWIN32_FIND_DATA) dir->find_file_data)->cFileName);
+
+  strcpy (result.d_name, basename);
+
+  g_free (basename);
       
   return &result;
 }
index 33bb4c9..7e3f865 100644 (file)
@@ -378,12 +378,12 @@ main (int   argc,
 #endif /* G_HAVE_GINT64 */
   g_print ("\n");
 
-  g_print ("checking g_dirname()...");
+  g_print ("checking g_path_get_dirname()...");
   for (i = 0; i < n_dirname_checks; i++)
     {
       gchar *dirname;
 
-      dirname = g_dirname (dirname_checks[i].filename);
+      dirname = g_path_get_dirname (dirname_checks[i].filename);
       if (strcmp (dirname, dirname_checks[i].dirname) != 0)
        {
          g_print ("\nfailed for \"%s\"==\"%s\" (returned: \"%s\")\n",
index a4499d5..4430aef 100644 (file)
@@ -90,7 +90,7 @@ main (int   argc,
     {
       gchar *dirname;
 
-      dirname = g_dirname (dirname_checks[i].filename);
+      dirname = g_path_get_dirname (dirname_checks[i].filename);
       g_assert (strcmp (dirname, dirname_checks[i].dirname) == 0);
       g_free (dirname);
     }
index 33bb4c9..7e3f865 100644 (file)
@@ -378,12 +378,12 @@ main (int   argc,
 #endif /* G_HAVE_GINT64 */
   g_print ("\n");
 
-  g_print ("checking g_dirname()...");
+  g_print ("checking g_path_get_dirname()...");
   for (i = 0; i < n_dirname_checks; i++)
     {
       gchar *dirname;
 
-      dirname = g_dirname (dirname_checks[i].filename);
+      dirname = g_path_get_dirname (dirname_checks[i].filename);
       if (strcmp (dirname, dirname_checks[i].dirname) != 0)
        {
          g_print ("\nfailed for \"%s\"==\"%s\" (returned: \"%s\")\n",