[gnome-commander] Propagate the error of the rename function



commit 0908560d6cdb8f5ce898ef8d388d2105e7dc91e9
Author: Uwe Scholz <u scholz83 gmx de>
Date:   Thu Jun 24 19:53:09 2021 +0200

    Propagate the error of the rename function

 src/dialogs/gnome-cmd-advrename-dialog.cc  |  8 ++++----
 src/dialogs/gnome-cmd-file-props-dialog.cc |  6 +++---
 src/dialogs/gnome-cmd-rename-dialog.cc     | 12 ++++++++----
 src/gnome-cmd-file.cc                      | 22 +++++++++++++---------
 src/gnome-cmd-file.h                       |  2 +-
 5 files changed, 29 insertions(+), 21 deletions(-)
---
diff --git a/src/dialogs/gnome-cmd-advrename-dialog.cc b/src/dialogs/gnome-cmd-advrename-dialog.cc
index b7d698c9..3187120f 100644
--- a/src/dialogs/gnome-cmd-advrename-dialog.cc
+++ b/src/dialogs/gnome-cmd-advrename-dialog.cc
@@ -459,17 +459,17 @@ void GnomeCmdAdvrenameDialog::Private::on_dialog_response (GnomeCmdAdvrenameDial
                                     COL_NEW_NAME, &new_name,
                                     -1);
 
-                GnomeVFSResult result = GNOME_VFS_OK;
+                gboolean result = FALSE;
 
                 if (strcmp (g_file_info_get_display_name(f->gFileInfo), new_name) != 0)
-                    result = f->rename(new_name);
+                    result = f->rename(new_name, nullptr);
 
                 gtk_list_store_set (GTK_LIST_STORE (dialog->files), &i,
                                     COL_NAME, f->get_name(),
-                                    COL_RENAME_FAILED, result!=GNOME_VFS_OK,
+                                    COL_RENAME_FAILED, !result,
                                     -1);
 
-                if (!new_focused_file_name && (result == GNOME_VFS_OK)
+                if (!new_focused_file_name && result
                     && !strcmp(old_focused_file_name, g_file_info_get_display_name(f->gFileInfo)))
                     new_focused_file_name = g_strdup(new_name);
 
diff --git a/src/dialogs/gnome-cmd-file-props-dialog.cc b/src/dialogs/gnome-cmd-file-props-dialog.cc
index 5e0fc1b3..d914331d 100644
--- a/src/dialogs/gnome-cmd-file-props-dialog.cc
+++ b/src/dialogs/gnome-cmd-file-props-dialog.cc
@@ -197,13 +197,13 @@ static void on_dialog_ok (GtkButton *btn, GnomeCmdFilePropsDialogPrivate *data)
 
     if (strcmp (filename, data->f->get_name()) != 0)
     {
-        result = data->f->rename(filename);
+        retValue = data->f->rename(filename, &error);
 
-        if (result==GNOME_VFS_OK)
+        if (retValue)
             main_win->fs(ACTIVE)->file_list()->focus_file(filename, TRUE);
     }
 
-    if (result == GNOME_VFS_OK)
+    if (result == GNOME_VFS_OK && retValue)
     {
         auto perms = gnome_cmd_chmod_component_get_perms (GNOME_CMD_CHMOD_COMPONENT (data->chmod_component));
 
diff --git a/src/dialogs/gnome-cmd-rename-dialog.cc b/src/dialogs/gnome-cmd-rename-dialog.cc
index b6cca36c..bbf1cf48 100644
--- a/src/dialogs/gnome-cmd-rename-dialog.cc
+++ b/src/dialogs/gnome-cmd-rename-dialog.cc
@@ -59,17 +59,21 @@ static gboolean on_dialog_keypressed (GtkWidget *widget, GdkEventKey *event, gpo
         case GDK_Return:
         case GDK_KP_Enter:
             {
+                GError *error = nullptr;
                 gchar *new_fname = g_strdup (gtk_entry_get_text (dialog->priv->textbox));
-                GnomeVFSResult result = dialog->priv->f->rename(new_fname);
+                gboolean result = dialog->priv->f->rename(new_fname, &error);
 
-                if (result==GNOME_VFS_OK)
+                if (result)
                     main_win->fs(ACTIVE)->file_list()->focus_file(new_fname, TRUE);
 
                 dialog->priv->f->unref();
                 gtk_widget_destroy (widget);
 
-                if (result!=GNOME_VFS_OK)
-                    gnome_cmd_show_message (NULL, new_fname, gnome_vfs_result_to_string (result));
+                if (!result)
+                {
+                    gnome_cmd_show_message (NULL, new_fname, error->message);
+                    g_error_free(error);
+                }
 
                 g_free (new_fname);
             }
diff --git a/src/gnome-cmd-file.cc b/src/gnome-cmd-file.cc
index 217be186..35a992cc 100644
--- a/src/gnome-cmd-file.cc
+++ b/src/gnome-cmd-file.cc
@@ -448,7 +448,7 @@ gboolean GnomeCmdFile::chown(uid_t uid, gid_t gid, GError **error)
 }
 
 
-GnomeVFSResult GnomeCmdFile::rename(const gchar *new_name)
+gboolean GnomeCmdFile::rename(const gchar *new_name, GError **error)
 {
     g_return_val_if_fail (info, GNOME_VFS_ERROR_CORRUPTED_DATA);
 
@@ -457,16 +457,16 @@ GnomeVFSResult GnomeCmdFile::rename(const gchar *new_name)
 
     new_info->name = const_cast<gchar *> (new_name);
 
-    GError *error;
-    error = nullptr;
+    GError *tmp_error;
+    tmp_error = nullptr;
 
-    auto newgFile = g_file_set_display_name (this->gFile, new_name, nullptr, &error);
+    auto newgFile = g_file_set_display_name (this->gFile, new_name, nullptr, &tmp_error);
 
-    if (error || newgFile == nullptr)
+    if (tmp_error || newgFile == nullptr)
     {
-        g_message ("rename to \"%s\" failed: %s", new_name, error->message);
-        g_error_free (error);
-        return GNOME_VFS_OK;
+        g_message ("rename to \"%s\" failed: %s", new_name, tmp_error->message);
+        g_propagate_error (error, tmp_error);
+        return FALSE;
     }
 
     g_object_unref(this->gFile);
@@ -478,6 +478,10 @@ GnomeVFSResult GnomeCmdFile::rename(const gchar *new_name)
     auto result = gnome_vfs_get_file_info_uri (newUri, new_info, infoOpts);
     gnome_vfs_uri_unref (newUri);
 
+    //ToDo: When migrating to GIO, propagate the error out of this function like done above.
+    if (result!=GNOME_VFS_OK)
+        return false;
+
     if (result==GNOME_VFS_OK && has_parent_dir (this))
     {
         gchar *old_uri_str = get_uri_str();
@@ -488,7 +492,7 @@ GnomeVFSResult GnomeCmdFile::rename(const gchar *new_name)
             gnome_cmd_dir_update_path (GNOME_CMD_DIR (this));
     }
 
-    return result;
+    return true;
 }
 
 
diff --git a/src/gnome-cmd-file.h b/src/gnome-cmd-file.h
index d7664303..da71aea7 100644
--- a/src/gnome-cmd-file.h
+++ b/src/gnome-cmd-file.h
@@ -92,7 +92,7 @@ struct GnomeCmdFile
 
     gboolean chmod(guint32 permissions, GError **error);
     gboolean chown(uid_t uid, gid_t gid, GError **error);
-    GnomeVFSResult rename(const gchar *new_name);
+    gboolean rename(const gchar *new_name, GError **error);
 
     void update_info(GnomeVFSFileInfo *info);
     void update_gFileInfo(GFileInfo *gFileInfo);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]