From 6a84b7d59aa7cc0509ac870e5cbf122c5d755781 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Tue, 5 Jan 2016 20:19:52 -0600 Subject: [PATCH] extract: track READONLY attribute in supported_features --- include/wimlib/apply.h | 3 ++- src/extract.c | 18 +++++++++++++----- src/ntfs-3g_apply.c | 3 ++- src/win32_apply.c | 3 ++- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/include/wimlib/apply.h b/include/wimlib/apply.h index f36f0b3f..31744822 100644 --- a/include/wimlib/apply.h +++ b/include/wimlib/apply.h @@ -11,9 +11,10 @@ /* These can be treated as counts (for required_features) or booleans (for * supported_features). */ struct wim_features { - unsigned long archive_files; + unsigned long readonly_files; unsigned long hidden_files; unsigned long system_files; + unsigned long archive_files; unsigned long compressed_files; unsigned long encrypted_files; unsigned long encrypted_directories; diff --git a/src/extract.c b/src/extract.c index 532d1b1f..c1a5adb6 100644 --- a/src/extract.c +++ b/src/extract.c @@ -1073,12 +1073,14 @@ static void inode_tally_features(const struct wim_inode *inode, struct wim_features *features) { - if (inode->i_attributes & FILE_ATTRIBUTE_ARCHIVE) - features->archive_files++; + if (inode->i_attributes & FILE_ATTRIBUTE_READONLY) + features->readonly_files++; if (inode->i_attributes & FILE_ATTRIBUTE_HIDDEN) features->hidden_files++; if (inode->i_attributes & FILE_ATTRIBUTE_SYSTEM) features->system_files++; + if (inode->i_attributes & FILE_ATTRIBUTE_ARCHIVE) + features->archive_files++; if (inode->i_attributes & FILE_ATTRIBUTE_COMPRESSED) features->compressed_files++; if (inode->i_attributes & FILE_ATTRIBUTE_ENCRYPTED) { @@ -1156,9 +1158,11 @@ do_feature_check(const struct wim_features *required_features, /* File attributes. */ if (!(extract_flags & WIMLIB_EXTRACT_FLAG_NO_ATTRIBUTES)) { - /* Note: Don't bother the user about FILE_ATTRIBUTE_ARCHIVE. - * We're an archive program, so theoretically we can do what we - * want with it. */ + + if (required_features->readonly_files && + !supported_features->readonly_files) + WARNING("Ignoring FILE_ATTRIBUTE_READONLY of %lu files", + required_features->readonly_files); if (required_features->hidden_files && !supported_features->hidden_files) @@ -1170,6 +1174,10 @@ do_feature_check(const struct wim_features *required_features, WARNING("Ignoring FILE_ATTRIBUTE_SYSTEM of %lu files", required_features->system_files); + /* Note: Don't bother the user about FILE_ATTRIBUTE_ARCHIVE. + * We're an archive program, so theoretically we can do what we + * want with it. */ + if (required_features->compressed_files && !supported_features->compressed_files) WARNING("Ignoring FILE_ATTRIBUTE_COMPRESSED of %lu files", diff --git a/src/ntfs-3g_apply.c b/src/ntfs-3g_apply.c index ccfd6fde..4b6bc394 100644 --- a/src/ntfs-3g_apply.c +++ b/src/ntfs-3g_apply.c @@ -54,9 +54,10 @@ static int ntfs_3g_get_supported_features(const char *target, struct wim_features *supported_features) { - supported_features->archive_files = 1; + supported_features->readonly_files = 1; supported_features->hidden_files = 1; supported_features->system_files = 1; + supported_features->archive_files = 1; supported_features->compressed_files = 1; supported_features->not_context_indexed_files = 1; supported_features->named_data_streams = 1; diff --git a/src/win32_apply.c b/src/win32_apply.c index ef0823ab..faacd718 100644 --- a/src/win32_apply.c +++ b/src/win32_apply.c @@ -267,9 +267,10 @@ win32_get_supported_features(const wchar_t *target, get_vol_flags(target, &vol_flags, &short_names_supported); - supported_features->archive_files = 1; + supported_features->readonly_files = 1; supported_features->hidden_files = 1; supported_features->system_files = 1; + supported_features->archive_files = 1; if (vol_flags & FILE_FILE_COMPRESSION) supported_features->compressed_files = 1; -- 2.43.0