struct wim_inode *inode = dentry->d_inode;
if (inode->i_attributes & FILE_ATTRIBUTE_REPARSE_POINT) {
- return supported_features->reparse_points ||
- (inode_is_symlink(inode) &&
- supported_features->symlink_reparse_points);
+ if (!(supported_features->reparse_points ||
+ (inode_is_symlink(inode) &&
+ supported_features->symlink_reparse_points)))
+ return false;
}
+
if (inode->i_attributes & FILE_ATTRIBUTE_ENCRYPTED) {
- if (inode->i_attributes & FILE_ATTRIBUTE_DIRECTORY)
- return supported_features->encrypted_directories != 0;
- else
- return supported_features->encrypted_files != 0;
+ if (inode->i_attributes & FILE_ATTRIBUTE_DIRECTORY) {
+ if (!supported_features->encrypted_directories)
+ return false;
+ } else {
+ if (!supported_features->encrypted_files)
+ return false;
+ }
}
+
return true;
}
{
int ret;
- if (!dentry_is_supported(dentry, &ctx->supported_features))
+ if (unlikely(!dentry_is_supported(dentry, &ctx->supported_features)))
goto skip_dentry;
if (dentry_is_root(dentry))
unsigned stream_idx;
struct wim_lookup_table_entry *stream;
- if (unlikely(inode_is_encrypted_directory(inode)))
- return 0;
-
if (unlikely(ctx->apply_ops->will_externally_back)) {
ret = (*ctx->apply_ops->will_externally_back)(dentry, ctx);
if (ret >= 0) {
if (ret)
goto out_cleanup;
+ if (unlikely(list_empty(&dentry_list))) {
+ WARNING("There is nothing to extract!");
+ goto out_cleanup;
+ }
+
ret = dentry_list_resolve_streams(&dentry_list, ctx);
if (ret)
goto out_cleanup;