]> wimlib.net Git - wimlib/blobdiff - src/extract.c
dentry.{c,h}: Cleanup and fixes
[wimlib] / src / extract.c
index f9c4ee9894d48445e8392a63251fca9f64b844b5..d6cc9c45d75ee854382a6c9c4d4fcffc7a02bcd0 100644 (file)
@@ -439,9 +439,11 @@ static int
 extract_dentry_to_stdout(struct wim_dentry *dentry)
 {
        int ret = 0;
-       if (!dentry_is_regular_file(dentry)) {
+       if (dentry->d_inode->i_attributes & (FILE_ATTRIBUTE_REPARSE_POINT |
+                                            FILE_ATTRIBUTE_DIRECTORY))
+       {
                ERROR("\"%"TS"\" is not a regular file and therefore cannot be "
-                     "extracted to standard output", dentry->_full_path);
+                     "extracted to standard output", dentry_full_path(dentry));
                ret = WIMLIB_ERR_NOT_A_REGULAR_FILE;
        } else {
                struct wim_lookup_table_entry *lte;
@@ -634,13 +636,14 @@ skip_dentry:
 static int
 dentry_reset_needs_extraction(struct wim_dentry *dentry, void *_ignore)
 {
+       struct wim_inode *inode = dentry->d_inode;
+
        dentry->needs_extraction = 0;
        dentry->not_extracted = 0;
-       dentry->is_win32_name = 0;
-       dentry->d_inode->i_visited = 0;
-       dentry->d_inode->i_dos_name_extracted = 0;
-       FREE(dentry->d_inode->i_extracted_file);
-       dentry->d_inode->i_extracted_file = NULL;
+       inode->i_visited = 0;
+       inode->i_dos_name_extracted = 0;
+       FREE(inode->i_extracted_file);
+       inode->i_extracted_file = NULL;
        if ((void*)dentry->extraction_name != (void*)dentry->file_name)
                FREE(dentry->extraction_name);
        dentry->extraction_name = NULL;