diff options
author | Ross Lagerwall <rosslagerwall@gmail.com> | 2013-10-06 11:46:36 +0200 |
---|---|---|
committer | Ross Lagerwall <rosslagerwall@gmail.com> | 2013-10-25 10:30:55 +0200 |
commit | 9299dacc3fd09d9a5c017a780a92a23702094159 (patch) | |
tree | 8bc093edd71f4a5e12550b744dc6ab57aaeee1f8 /daemon/gvfsbackendarchive.c | |
parent | 084a365996f1e5948913af452d952d396994791a (diff) | |
download | gvfs-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.c | 7 |
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 *); |