[gnome-commander/chmod_via_GIO: 2/2] Instead of GnomeVFSFilePermissions use guint32 and GIO's G_FILE_ATTRIBUTE_UNIX_MODE for doing a chmo
- From: Uwe Scholz <uwescholz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-commander/chmod_via_GIO: 2/2] Instead of GnomeVFSFilePermissions use guint32 and GIO's G_FILE_ATTRIBUTE_UNIX_MODE for doing a chmo
- Date: Thu, 27 May 2021 21:16:14 +0000 (UTC)
commit 957bc81be6972ba2488d17a315f92ec0eba2711a
Author: Uwe Scholz <u scholz83 gmx de>
Date: Thu May 27 23:11:28 2021 +0200
Instead of GnomeVFSFilePermissions use guint32 and GIO's G_FILE_ATTRIBUTE_UNIX_MODE for doing a chmod
src/dialogs/gnome-cmd-chmod-dialog.cc | 32 +++++++++++-------------
src/dialogs/gnome-cmd-file-props-dialog.cc | 10 ++++----
src/dirlist.cc | 8 +++---
src/gnome-cmd-chmod-component.cc | 19 +++++++-------
src/gnome-cmd-chmod-component.h | 4 +--
src/gnome-cmd-dir.cc | 28 +++++++++++++--------
src/gnome-cmd-file-list.cc | 8 +++---
src/gnome-cmd-file.cc | 40 ++++++++++++++++++++++++------
src/gnome-cmd-file.h | 2 +-
9 files changed, 89 insertions(+), 62 deletions(-)
---
diff --git a/src/dialogs/gnome-cmd-chmod-dialog.cc b/src/dialogs/gnome-cmd-chmod-dialog.cc
index c08d5567..a16308c1 100644
--- a/src/dialogs/gnome-cmd-chmod-dialog.cc
+++ b/src/dialogs/gnome-cmd-chmod-dialog.cc
@@ -1,4 +1,4 @@
-/**
+/**
* @file gnome-cmd-chmod-dialog.cc
* @copyright (C) 2001-2006 Marcus Bjurman\n
* @copyright (C) 2007-2012 Piotr Eljasiak\n
@@ -50,7 +50,7 @@ struct GnomeCmdChmodDialogPrivate
{
GList *files;
GnomeCmdFile *f;
- GnomeVFSFilePermissions perms;
+ guint32 permissions;
GtkWidget *chmod_component;
GtkWidget *recurse_check;
@@ -61,22 +61,18 @@ struct GnomeCmdChmodDialogPrivate
G_DEFINE_TYPE (GnomeCmdChmodDialog, gnome_cmd_chmod_dialog, GNOME_CMD_TYPE_DIALOG)
-static void do_chmod (GnomeCmdFile *in, GnomeVFSFilePermissions perm, gboolean recursive, ChmodRecursiveMode
mode)
+static void do_chmod (GnomeCmdFile *in, guint32 permissions, gboolean recursive, ChmodRecursiveMode mode)
{
g_return_if_fail (in != NULL);
- g_return_if_fail (in->info != NULL);
if (!(recursive
&& mode == CHMOD_DIRS_ONLY
&& in->GetGfileAttributeUInt32(G_FILE_ATTRIBUTE_STANDARD_TYPE) != G_FILE_TYPE_DIRECTORY))
{
- GnomeVFSResult ret = in->chmod(perm);
+ in->chmod(permissions);
- if (ret != GNOME_VFS_OK)
- gnome_cmd_show_message (NULL, in->get_name(), gnome_vfs_result_to_string (ret));
- else
- if (!recursive)
- return;
+ if (!recursive)
+ return;
}
if (in->GetGfileAttributeUInt32(G_FILE_ATTRIBUTE_STANDARD_TYPE) == G_FILE_TYPE_DIRECTORY)
@@ -88,11 +84,13 @@ static void do_chmod (GnomeCmdFile *in, GnomeVFSFilePermissions perm, gboolean r
for (GList *i = gnome_cmd_dir_get_files (dir); i; i = i->next)
{
GnomeCmdFile *f = (GnomeCmdFile *) i->data;
- if (!f->is_dotdot && strcmp (f->info->name, ".") != 0
- && !GNOME_VFS_FILE_INFO_SYMLINK(f->info))
+ auto filename = GetGfileAttributeString(f->gFile, G_FILE_ATTRIBUTE_STANDARD_NAME);
+ if (!f->is_dotdot && strcmp (filename, ".") != 0
+ && !g_file_info_get_is_symlink(f->gFileInfo))
{
- do_chmod (f, perm, TRUE, mode);
+ do_chmod (f, permissions, TRUE, mode);
}
+ g_free(filename);
}
gnome_cmd_dir_unref (dir);
}
@@ -109,7 +107,7 @@ inline void do_chmod_files (GnomeCmdChmodDialog *dialog)
ChmodRecursiveMode mode = strcmp (mode_text, recurse_opts[CHMOD_ALL_FILES]) == 0 ? CHMOD_ALL_FILES :
CHMOD_DIRS_ONLY;
- do_chmod (f, dialog->priv->perms, recursive, mode);
+ do_chmod (f, dialog->priv->permissions, recursive, mode);
view_refresh (NULL, NULL);
}
}
@@ -117,7 +115,7 @@ inline void do_chmod_files (GnomeCmdChmodDialog *dialog)
inline void show_perms (GnomeCmdChmodDialog *dialog)
{
- gnome_cmd_chmod_component_set_perms (GNOME_CMD_CHMOD_COMPONENT (dialog->priv->chmod_component),
dialog->priv->perms);
+ gnome_cmd_chmod_component_set_perms (GNOME_CMD_CHMOD_COMPONENT (dialog->priv->chmod_component),
dialog->priv->permissions);
}
@@ -144,7 +142,7 @@ static void on_toggle_recurse (GtkToggleButton *togglebutton, GnomeCmdChmodDialo
static void on_perms_changed (GnomeCmdChmodComponent *component, GnomeCmdChmodDialog *dialog)
{
- dialog->priv->perms =
+ dialog->priv->permissions =
gnome_cmd_chmod_component_get_perms (GNOME_CMD_CHMOD_COMPONENT (dialog->priv->chmod_component));
}
@@ -225,7 +223,7 @@ GtkWidget *gnome_cmd_chmod_dialog_new (GList *files)
dialog->priv->f = (GnomeCmdFile *) dialog->priv->files->data;
g_return_val_if_fail (dialog->priv->f != NULL, NULL);
- dialog->priv->perms = dialog->priv->f->info->permissions;
+ dialog->priv->permissions = GetGfileAttributeUInt32(dialog->priv->f->gFile, G_FILE_ATTRIBUTE_UNIX_MODE)
& 0xFFF;
show_perms (dialog);
diff --git a/src/dialogs/gnome-cmd-file-props-dialog.cc b/src/dialogs/gnome-cmd-file-props-dialog.cc
index e376c554..2f655bdd 100644
--- a/src/dialogs/gnome-cmd-file-props-dialog.cc
+++ b/src/dialogs/gnome-cmd-file-props-dialog.cc
@@ -1,4 +1,4 @@
-/**
+/**
* @file gnome-cmd-file-props-dialog.cc
* @copyright (C) 2001-2006 Marcus Bjurman\n
* @copyright (C) 2007-2012 Piotr Eljasiak\n
@@ -201,15 +201,15 @@ static void on_dialog_ok (GtkButton *btn, GnomeCmdFilePropsDialogPrivate *data)
if (result == GNOME_VFS_OK)
{
- GnomeVFSFilePermissions perms = gnome_cmd_chmod_component_get_perms (GNOME_CMD_CHMOD_COMPONENT
(data->chmod_component));
+ auto perms = gnome_cmd_chmod_component_get_perms (GNOME_CMD_CHMOD_COMPONENT (data->chmod_component));
- if (perms != data->f->info->permissions)
- result = data->f->chmod(perms);
+ if (perms != GetGfileAttributeUInt32(data->f->gFile, G_FILE_ATTRIBUTE_UNIX_MODE) & 0xFFF )
+ data->f->chmod(perms);
}
if (result == GNOME_VFS_OK)
{
-
+
uid_t uid = gnome_cmd_chown_component_get_owner (GNOME_CMD_CHOWN_COMPONENT (data->chown_component));
gid_t gid = gnome_cmd_chown_component_get_group (GNOME_CMD_CHOWN_COMPONENT (data->chown_component));
diff --git a/src/dirlist.cc b/src/dirlist.cc
index b4279196..62c6bb3d 100644
--- a/src/dirlist.cc
+++ b/src/dirlist.cc
@@ -118,12 +118,15 @@ static void enumerate_children_callback(GObject *direnum, GAsyncResult *result,
void sync_list (GnomeCmdDir *dir)
{
+ g_return_if_fail(dir != nullptr);
+
GError *error = nullptr;
gchar *uri_str = GNOME_CMD_FILE (dir)->get_uri_str();
DEBUG('l', "sync_list: %s\n", uri_str);
+ g_free (uri_str);
- dir->infolist = NULL;
+ dir->gFileInfoList = nullptr;
auto gFile = GNOME_CMD_FILE (dir)->gFile;
@@ -146,9 +149,6 @@ void sync_list (GnomeCmdDir *dir)
enumerate_children_callback,
dir);
- g_object_unref(gFileEnumerator);
- g_free (uri_str);
-
dir->state = GnomeCmdDir::STATE_LISTING;
}
diff --git a/src/gnome-cmd-chmod-component.cc b/src/gnome-cmd-chmod-component.cc
index 51a22663..f72ea25c 100644
--- a/src/gnome-cmd-chmod-component.cc
+++ b/src/gnome-cmd-chmod-component.cc
@@ -1,4 +1,4 @@
-/**
+/**
* @file gnome-cmd-chmod-component.cc
* @copyright (C) 2001-2006 Marcus Bjurman\n
* @copyright (C) 2007-2012 Piotr Eljasiak\n
@@ -54,10 +54,10 @@ static void on_perms_changed (GnomeCmdChmodComponent *comp)
static gchar text_view[10];
static gchar number_view[4];
- GnomeVFSFilePermissions perms = gnome_cmd_chmod_component_get_perms (comp);
+ guint32 permissions = gnome_cmd_chmod_component_get_perms (comp);
- perm2textstring (perms, text_view, sizeof(text_view));
- perm2numstring (perms, number_view, sizeof(number_view));
+ perm2textstring (permissions, text_view, sizeof(text_view));
+ perm2numstring (permissions, number_view, sizeof(number_view));
gtk_label_set_text (GTK_LABEL (comp->priv->textview_label), text_view);
gtk_label_set_text (GTK_LABEL (comp->priv->numberview_label), number_view);
}
@@ -202,23 +202,22 @@ GtkType gnome_cmd_chmod_component_get_type ()
return type;
}
-//TODO: Change this function to return guint32
-GnomeVFSFilePermissions gnome_cmd_chmod_component_get_perms (GnomeCmdChmodComponent *comp)
+guint32 gnome_cmd_chmod_component_get_perms (GnomeCmdChmodComponent *comp)
{
- guint perms = 0;
+ guint32 perms = 0;
for (gint y=0; y<3; y++)
for (gint x=0; x<3; x++)
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (comp->priv->check_boxes[y][x])))
perms |= check_perm[y][x];
- return (GnomeVFSFilePermissions) perms;
+ return perms;
}
-void gnome_cmd_chmod_component_set_perms (GnomeCmdChmodComponent *component, GnomeVFSFilePermissions perms)
+void gnome_cmd_chmod_component_set_perms (GnomeCmdChmodComponent *component, guint32 permissions)
{
for (gint y=0; y<3; y++)
for (gint x=0; x<3; x++)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (component->priv->check_boxes[y][x]), perms &
check_perm[y][x]);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (component->priv->check_boxes[y][x]),
permissions & check_perm[y][x]);
}
diff --git a/src/gnome-cmd-chmod-component.h b/src/gnome-cmd-chmod-component.h
index d020c2e8..5cd18aaf 100644
--- a/src/gnome-cmd-chmod-component.h
+++ b/src/gnome-cmd-chmod-component.h
@@ -53,5 +53,5 @@ GtkWidget *gnome_cmd_chmod_component_new (GnomeVFSFilePermissions perms);
GtkType gnome_cmd_chmod_component_get_type ();
-GnomeVFSFilePermissions gnome_cmd_chmod_component_get_perms (GnomeCmdChmodComponent *component);
-void gnome_cmd_chmod_component_set_perms (GnomeCmdChmodComponent *component, GnomeVFSFilePermissions perms);
+guint32 gnome_cmd_chmod_component_get_perms (GnomeCmdChmodComponent *component);
+void gnome_cmd_chmod_component_set_perms (GnomeCmdChmodComponent *component, guint32 permissions);
diff --git a/src/gnome-cmd-dir.cc b/src/gnome-cmd-dir.cc
index f34f1fdb..53fbaa42 100644
--- a/src/gnome-cmd-dir.cc
+++ b/src/gnome-cmd-dir.cc
@@ -499,7 +499,12 @@ static GList *create_gnome_cmd_file_list_from_gfileinfo_list (GnomeCmdDir *dir,
for (GList *i = info_list; i; i = i->next)
{
- GFileInfo *gFileInfo = (GFileInfo *) i->data;
+ auto gFileInfo = (GFileInfo *) i->data;
+
+ if (gFileInfo == nullptr || !G_IS_FILE_INFO (gFileInfo))
+ {
+ continue;
+ }
auto basename = g_file_info_get_attribute_string (gFileInfo, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME);
if (strcmp (basename, ".") == 0 || strcmp (basename, "..") == 0)
@@ -533,6 +538,7 @@ static void on_list_done (GnomeCmdDir *dir, GList *infolist, GError *error)
dir->priv->files = create_gnome_cmd_file_list_from_gfileinfo_list (dir, infolist);
dir->priv->file_collection->add(dir->priv->files);
g_list_free (infolist);
+ infolist = nullptr;
if (dir->dialog)
{
@@ -839,7 +845,7 @@ void gnome_cmd_dir_file_deleted (GnomeCmdDir *dir, const gchar *uri_str)
}
-// A file has been changed. Find the corresponding GnomeCmdFile, update its GnomeVFSFileInfo
+// A file has been changed. Find the corresponding GnomeCmdFile, update its GFileInfo
void gnome_cmd_dir_file_changed (GnomeCmdDir *dir, const gchar *uri_str)
{
g_return_if_fail (GNOME_CMD_IS_DIR (dir));
@@ -849,18 +855,18 @@ void gnome_cmd_dir_file_changed (GnomeCmdDir *dir, const gchar *uri_str)
g_return_if_fail (GNOME_CMD_IS_FILE (f));
- GnomeVFSURI *uri = f->get_uri();
- GnomeVFSFileInfo *info = gnome_vfs_file_info_new ();
- GnomeVFSResult res = gnome_vfs_get_file_info_uri (uri, info, GNOME_VFS_FILE_INFO_GET_MIME_TYPE);
- if (res != GNOME_VFS_OK)
+ dir->priv->needs_mtime_update = TRUE;
+
+ auto gFileInfo = g_file_query_info(f->gFile, "*", G_FILE_QUERY_INFO_NONE, nullptr, nullptr);
+ if (gFileInfo == nullptr)
{
- DEBUG ('t', "Could not retrieve file information for changed file %s\n", uri_str);
+ auto basename = g_file_get_basename(f->gFile);
+ DEBUG ('t', "Could not retrieve file information for changed file %s\n",
g_file_get_basename(f->gFile));
+ g_free(basename);
+ return;
}
- gnome_vfs_uri_unref (uri);
-
- dir->priv->needs_mtime_update = TRUE;
- f->update_info(info);
+ f->update_gFileInfo(gFileInfo);
f->invalidate_metadata();
g_signal_emit (dir, signals[FILE_CHANGED], 0, f);
}
diff --git a/src/gnome-cmd-file-list.cc b/src/gnome-cmd-file-list.cc
index 71c25059..fb097a5c 100644
--- a/src/gnome-cmd-file-list.cc
+++ b/src/gnome-cmd-file-list.cc
@@ -1275,12 +1275,12 @@ static void mime_exec_single (GnomeCmdFile *f)
-1, _("Cancel"), _("OK"), nullptr);
g_free (msg);
- if (ret != 1) return; else
+ if (ret != 1)
{
- GnomeVFSResult result = f->chmod((GnomeVFSFilePermissions)
(f->info->permissions|GNOME_CMD_PERM_USER_EXEC));
- if (result != GNOME_VFS_OK)
- return;
+ return;
}
+
+ f->chmod(GetGfileAttributeUInt32(f->gFile, G_FILE_ATTRIBUTE_UNIX_MODE) |
GNOME_CMD_PERM_USER_EXEC);
}
}
diff --git a/src/gnome-cmd-file.cc b/src/gnome-cmd-file.cc
index d9ef371f..b5ad43a7 100644
--- a/src/gnome-cmd-file.cc
+++ b/src/gnome-cmd-file.cc
@@ -344,14 +344,39 @@ void GnomeCmdFile::unref()
}
-GnomeVFSResult GnomeCmdFile::chmod(GnomeVFSFilePermissions perm)
+void GnomeCmdFile::chmod(guint32 permissions)
{
- g_return_val_if_fail (info != nullptr, GNOME_VFS_ERROR_CORRUPTED_DATA);
+ GError *error;
+ error = nullptr;
- info->permissions = perm;
- GnomeVFSURI *uri = get_uri();
- GnomeVFSResult ret = gnome_vfs_set_file_info_uri (uri, info, GNOME_VFS_SET_FILE_INFO_PERMISSIONS);
- gnome_vfs_uri_unref (uri);
+ auto gFileInfoPerms = g_file_query_info(gFile,
+ G_FILE_ATTRIBUTE_UNIX_MODE,
+ G_FILE_QUERY_INFO_NONE,
+ nullptr,
+ &error);
+ if (error)
+ {
+ g_message ("chmod: retrieving file info failed: %s", error->message);
+ g_error_free (error);
+ return;
+ }
+
+ g_file_info_set_attribute_uint32(gFileInfoPerms,
+ G_FILE_ATTRIBUTE_UNIX_MODE,
+ permissions);
+
+ g_file_set_attributes_from_info(gFile,
+ gFileInfoPerms,
+ G_FILE_QUERY_INFO_NONE,
+ nullptr,
+ &error);
+ if (error)
+ {
+ g_message ("chmod: setting file mode failed: %s", error->message);
+ g_object_unref(gFileInfoPerms);
+ g_error_free (error);
+ return;
+ }
if (has_parent_dir (this))
{
@@ -360,8 +385,7 @@ GnomeVFSResult GnomeCmdFile::chmod(GnomeVFSFilePermissions perm)
gnome_cmd_dir_file_changed (dir, uri_str);
g_free (uri_str);
}
-
- return ret;
+ g_object_unref(gFileInfoPerms);
}
diff --git a/src/gnome-cmd-file.h b/src/gnome-cmd-file.h
index 42769612..3978ce61 100644
--- a/src/gnome-cmd-file.h
+++ b/src/gnome-cmd-file.h
@@ -90,7 +90,7 @@ struct GnomeCmdFile
const gchar *get_type_string();
gboolean get_type_pixmap_and_mask(GdkPixmap **pixmap, GdkBitmap **mask);
- GnomeVFSResult chmod(GnomeVFSFilePermissions perm);
+ void chmod(guint32 permissions);
GnomeVFSResult chown(uid_t uid, gid_t gid);
GnomeVFSResult rename(const gchar *new_name);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]