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
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
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
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
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
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
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
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
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); */
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); */
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);
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)
{
}
gchar*
-g_dirname (const gchar *file_name)
+g_path_get_dirname (const gchar *file_name)
{
register gchar *base;
register guint len;
}
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;
g_win32_readdir (DIR *dir)
{
static struct dirent result;
+ gchar *basename;
g_return_val_if_fail (dir != NULL, NULL);
}
}
}
- 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;
}
+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++
{
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 ());
{
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;
}
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 ());
/* 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 ());
/* 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 ());
/* 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 ());
/* 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 ());
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);
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)
{
}
gchar*
-g_dirname (const gchar *file_name)
+g_path_get_dirname (const gchar *file_name)
{
register gchar *base;
register guint len;
}
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;
g_win32_readdir (DIR *dir)
{
static struct dirent result;
+ gchar *basename;
g_return_val_if_fail (dir != NULL, NULL);
}
}
}
- 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;
}
#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",
{
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);
}
#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",