diff options
author | Martin Matuska <martin@matuska.org> | 2019-05-09 00:06:46 +0200 |
---|---|---|
committer | Martin Matuska <martin@matuska.org> | 2019-05-09 22:15:25 +0200 |
commit | ac00875f8dbb636a714722ffed6bc9ec59039d1b (patch) | |
tree | cecb3e00345e33c6cad25ebad4d119f9dbeabafc /libarchive/archive_read_disk_windows.c | |
parent | ee645d6bbfa5d1ad769865a262fd95b398919e08 (diff) | |
download | libarchive-ac00875f8dbb636a714722ffed6bc9ec59039d1b.tar.gz |
Add support for Windows file attributes readonly, hidden and system
Diffstat (limited to 'libarchive/archive_read_disk_windows.c')
-rw-r--r-- | libarchive/archive_read_disk_windows.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/libarchive/archive_read_disk_windows.c b/libarchive/archive_read_disk_windows.c index ff79cc05..4a5421f8 100644 --- a/libarchive/archive_read_disk_windows.c +++ b/libarchive/archive_read_disk_windows.c @@ -1047,6 +1047,19 @@ next_entry(struct archive_read_disk *a, struct tree *t, } /* + * File attributes + */ + if ((a->flags & ARCHIVE_READDISK_NO_FFLAGS) == 0) { + const int supported_attrs = + FILE_ATTRIBUTE_READONLY | + FILE_ATTRIBUTE_HIDDEN | + FILE_ATTRIBUTE_SYSTEM; + DWORD file_attrs = st->dwFileAttributes & supported_attrs; + if (file_attrs != 0) + archive_entry_set_fflags(entry, file_attrs, 0); + } + + /* * Invoke a meta data filter callback. */ if (a->metadata_filter_func) { @@ -2301,6 +2314,19 @@ archive_read_disk_entry_from_file(struct archive *_a, archive_entry_copy_gname(entry, name); /* + * File attributes + */ + if ((a->flags & ARCHIVE_READDISK_NO_FFLAGS) == 0) { + const int supported_attrs = + FILE_ATTRIBUTE_READONLY | + FILE_ATTRIBUTE_HIDDEN | + FILE_ATTRIBUTE_SYSTEM; + DWORD file_attrs = fileAttributes & supported_attrs; + if (file_attrs != 0) + archive_entry_set_fflags(entry, file_attrs, 0); + } + + /* * Can this file be sparse file ? */ if (archive_entry_filetype(entry) != AE_IFREG |