From 72804ba43e096eca889295adeb88819dcd69a24a Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Sat, 13 Mar 2004 19:15:21 +0000 Subject: [PATCH] Remove trailing slashes in path names. 2004-03-13 Anders Carlsson * gtk/gtkfilesystemunix.c: (remove_trailing_slash), (gtk_file_system_unix_get_folder), (gtk_file_system_unix_create_folder), (get_parent_dir), (gtk_file_system_unix_get_parent), (gtk_file_folder_unix_get_info): Remove trailing slashes in path names. --- ChangeLog | 8 ++++++ ChangeLog.pre-2-10 | 8 ++++++ ChangeLog.pre-2-4 | 8 ++++++ ChangeLog.pre-2-6 | 8 ++++++ ChangeLog.pre-2-8 | 8 ++++++ gtk/gtkfilesystemunix.c | 57 ++++++++++++++++++++++++++++++++++------- 6 files changed, 88 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 55bb85671a..a46a0fd5f8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2004-03-13 Anders Carlsson + + * gtk/gtkfilesystemunix.c: (remove_trailing_slash), + (gtk_file_system_unix_get_folder), + (gtk_file_system_unix_create_folder), (get_parent_dir), + (gtk_file_system_unix_get_parent), (gtk_file_folder_unix_get_info): + Remove trailing slashes in path names. + Sat Mar 13 12:17:16 2004 Owen Taylor * gdk/x11/gdkwindow-x11.c (gdk_window_reparent): Make diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 55bb85671a..a46a0fd5f8 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,11 @@ +2004-03-13 Anders Carlsson + + * gtk/gtkfilesystemunix.c: (remove_trailing_slash), + (gtk_file_system_unix_get_folder), + (gtk_file_system_unix_create_folder), (get_parent_dir), + (gtk_file_system_unix_get_parent), (gtk_file_folder_unix_get_info): + Remove trailing slashes in path names. + Sat Mar 13 12:17:16 2004 Owen Taylor * gdk/x11/gdkwindow-x11.c (gdk_window_reparent): Make diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 55bb85671a..a46a0fd5f8 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,11 @@ +2004-03-13 Anders Carlsson + + * gtk/gtkfilesystemunix.c: (remove_trailing_slash), + (gtk_file_system_unix_get_folder), + (gtk_file_system_unix_create_folder), (get_parent_dir), + (gtk_file_system_unix_get_parent), (gtk_file_folder_unix_get_info): + Remove trailing slashes in path names. + Sat Mar 13 12:17:16 2004 Owen Taylor * gdk/x11/gdkwindow-x11.c (gdk_window_reparent): Make diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 55bb85671a..a46a0fd5f8 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,11 @@ +2004-03-13 Anders Carlsson + + * gtk/gtkfilesystemunix.c: (remove_trailing_slash), + (gtk_file_system_unix_get_folder), + (gtk_file_system_unix_create_folder), (get_parent_dir), + (gtk_file_system_unix_get_parent), (gtk_file_folder_unix_get_info): + Remove trailing slashes in path names. + Sat Mar 13 12:17:16 2004 Owen Taylor * gdk/x11/gdkwindow-x11.c (gdk_window_reparent): Make diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 55bb85671a..a46a0fd5f8 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,11 @@ +2004-03-13 Anders Carlsson + + * gtk/gtkfilesystemunix.c: (remove_trailing_slash), + (gtk_file_system_unix_get_folder), + (gtk_file_system_unix_create_folder), (get_parent_dir), + (gtk_file_system_unix_get_parent), (gtk_file_folder_unix_get_info): + Remove trailing slashes in path names. + Sat Mar 13 12:17:16 2004 Owen Taylor * gdk/x11/gdkwindow-x11.c (gdk_window_reparent): Make diff --git a/gtk/gtkfilesystemunix.c b/gtk/gtkfilesystemunix.c index 6e12713999..5bf8c9accc 100644 --- a/gtk/gtkfilesystemunix.c +++ b/gtk/gtkfilesystemunix.c @@ -190,6 +190,7 @@ static gboolean filename_is_root (const char *filename); static GtkFileInfo *filename_get_info (const gchar *filename, GtkFileInfoType types, GError **error); +static char * get_parent_dir (const char *filename); /* * GtkFileSystemUnix @@ -322,6 +323,19 @@ gtk_file_system_unix_get_volume_for_path (GtkFileSystem *file_system, return get_root_volume (); } +static char * +remove_trailing_slash (const char *filename) +{ + int len; + + len = strlen (filename); + + if (len > 1 && filename[len - 1] == '/') + return g_strndup (filename, len - 1); + else + return g_memdup (filename, len + 1); +} + static GtkFileFolder * gtk_file_system_unix_get_folder (GtkFileSystem *file_system, const GtkFilePath *path, @@ -349,7 +363,7 @@ gtk_file_system_unix_get_folder (GtkFileSystem *file_system, { folder_unix = g_object_new (GTK_TYPE_FILE_FOLDER_UNIX, NULL); folder_unix->system_unix = system_unix; - folder_unix->filename = g_strdup (filename); + folder_unix->filename = remove_trailing_slash (filename); folder_unix->types = types; g_hash_table_insert (system_unix->folder_hash, folder_unix->filename, folder_unix); @@ -366,16 +380,18 @@ gtk_file_system_unix_create_folder (GtkFileSystem *file_system, GtkFileSystemUnix *system_unix; const char *filename; gboolean result; - char *parent; - + char *parent, *tmp; + system_unix = GTK_FILE_SYSTEM_UNIX (file_system); filename = gtk_file_path_get_string (path); g_return_val_if_fail (filename != NULL, FALSE); g_return_val_if_fail (g_path_is_absolute (filename), FALSE); - result = mkdir (filename, 0777) == 0; - + tmp = remove_trailing_slash (filename); + result = mkdir (tmp, 0777) == 0; + g_free (tmp); + if (!result) { int save_errno = errno; @@ -393,7 +409,7 @@ gtk_file_system_unix_create_folder (GtkFileSystem *file_system, if (filename_is_root (filename)) return TRUE; /* hmmm, but with no notification */ - parent = g_path_get_dirname (filename); + parent = get_parent_dir (filename); if (parent) { GtkFileFolderUnix *folder_unix; @@ -591,6 +607,29 @@ gtk_file_system_unix_volume_render_icon (GtkFileSystem *file_system, return get_cached_icon (widget, "gnome-fs-blockdev", pixel_size); } +static char * +get_parent_dir (const char *filename) +{ + int len; + + len = strlen (filename); + + /* Ignore trailing slashes */ + if (filename[len - 1] == '/') + { + char *tmp, *parent; + + tmp = g_strndup (filename, len - 1); + + parent = g_path_get_dirname (tmp); + g_free (tmp); + + return parent; + } + else + return g_path_get_dirname (filename); +} + static gboolean gtk_file_system_unix_get_parent (GtkFileSystem *file_system, const GtkFilePath *path, @@ -598,7 +637,7 @@ gtk_file_system_unix_get_parent (GtkFileSystem *file_system, GError **error) { const char *filename; - + filename = gtk_file_path_get_string (path); g_return_val_if_fail (filename != NULL, FALSE); g_return_val_if_fail (g_path_is_absolute (filename), FALSE); @@ -609,7 +648,7 @@ gtk_file_system_unix_get_parent (GtkFileSystem *file_system, } else { - gchar *parent_filename = g_path_get_dirname (filename); + gchar *parent_filename = get_parent_dir (filename); *parent = filename_to_path (parent_filename); g_free (parent_filename); } @@ -1321,7 +1360,7 @@ gtk_file_folder_unix_get_info (GtkFileFolder *folder, g_return_val_if_fail (filename != NULL, NULL); g_return_val_if_fail (g_path_is_absolute (filename), NULL); - dirname = g_path_get_dirname (filename); + dirname = get_parent_dir (filename); g_return_val_if_fail (strcmp (dirname, folder_unix->filename) == 0, NULL); g_free (dirname);