summaryrefslogtreecommitdiff
path: root/daemon/gvfsbackendarchive.c
diff options
context:
space:
mode:
authorRoss Lagerwall <rosslagerwall@gmail.com>2013-10-06 11:46:36 +0200
committerRoss Lagerwall <rosslagerwall@gmail.com>2013-10-25 10:30:55 +0200
commit9299dacc3fd09d9a5c017a780a92a23702094159 (patch)
tree8bc093edd71f4a5e12550b744dc6ab57aaeee1f8 /daemon/gvfsbackendarchive.c
parent084a365996f1e5948913af452d952d396994791a (diff)
downloadgvfs-9299dacc3fd09d9a5c017a780a92a23702094159.tar.gz
archive: Set file executable bit from archive contents
https://bugzilla.gnome.org/show_bug.cgi?id=634735
Diffstat (limited to 'daemon/gvfsbackendarchive.c')
-rw-r--r--daemon/gvfsbackendarchive.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/daemon/gvfsbackendarchive.c b/daemon/gvfsbackendarchive.c
index 141f8f1d..48008d99 100644
--- a/daemon/gvfsbackendarchive.c
+++ b/daemon/gvfsbackendarchive.c
@@ -359,6 +359,7 @@ archive_file_set_info_from_entry (ArchiveFile * file,
{
GFileInfo *info = g_file_info_new ();
GFileType type;
+ mode_t mode;
file->info = info;
DEBUG ("setting up %s (%s)\n", archive_entry_pathname (entry), file->name);
@@ -413,10 +414,13 @@ archive_file_set_info_from_entry (ArchiveFile * file,
g_file_info_set_size (info,
archive_entry_size (entry));
+ mode = archive_entry_perm (entry);
g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ, TRUE);
g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, FALSE);
g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, FALSE);
- g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE, type == G_FILE_TYPE_DIRECTORY);
+ g_file_info_set_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE,
+ type == G_FILE_TYPE_DIRECTORY || mode & S_IXUSR);
g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, FALSE);
g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME, FALSE);
@@ -436,7 +440,6 @@ const char *archive_entry_fflags_text(struct archive_entry *);
gid_t archive_entry_gid(struct archive_entry *);
const char *archive_entry_gname(struct archive_entry *);
const char *archive_entry_hardlink(struct archive_entry *);
-mode_t archive_entry_mode(struct archive_entry *);
unsigned int archive_entry_nlink(struct archive_entry *);
dev_t archive_entry_rdev(struct archive_entry *);
dev_t archive_entry_rdevmajor(struct archive_entry *);