]> wimlib.net Git - wimlib/blobdiff - src/unix_apply.c
Refactor some of the dentry, inode, and lookup table code
[wimlib] / src / unix_apply.c
index 026042bce7219fe1baecfcf5d726b7d40790d73f..21a804a59424bbfa82b8274b0ed4b9a690596b11 100644 (file)
@@ -29,9 +29,9 @@
 
 #include "wimlib/apply.h"
 #include "wimlib/error.h"
-#include "wimlib/lookup_table.h"
 #include "wimlib/resource.h"
 #include "wimlib/timestamp.h"
+#include "wimlib/unix_data.h"
 
 #include <errno.h>
 #include <fcntl.h>
@@ -72,10 +72,10 @@ unix_create_directory(const tchar *path, struct apply_ctx *ctx, u64 *cookie_ret)
                if (errno != EEXIST)
                        return WIMLIB_ERR_MKDIR;
                if (lstat(path, &stbuf))
-                       return WIMLIB_ERR_STAT;
+                       return WIMLIB_ERR_MKDIR;
                errno = EEXIST;
                if (!S_ISDIR(stbuf.st_mode))
-                       return WIMLIB_ERR_NOTDIR;
+                       return WIMLIB_ERR_MKDIR;
        }
        return 0;
 }
@@ -85,14 +85,12 @@ unix_makelink(const tchar *oldpath, const tchar *newpath,
              int (*makelink)(const tchar *oldpath, const tchar *newpath))
 {
        if ((*makelink)(oldpath, newpath)) {
-               if (errno == EEXIST) {
-                       if (unlink(newpath))
-                               return WIMLIB_ERR_LINK;
-                       if ((*makelink)(oldpath, newpath))
-                               return WIMLIB_ERR_LINK;
-                       return 0;
-               }
-               return WIMLIB_ERR_LINK;
+               if (errno != EEXIST)
+                       return WIMLIB_ERR_LINK;
+               if (unlink(newpath))
+                       return WIMLIB_ERR_LINK;
+               if ((*makelink)(oldpath, newpath))
+                       return WIMLIB_ERR_LINK;
        }
        return 0;
 }
@@ -124,7 +122,7 @@ unix_extract_unnamed_stream(file_spec_t file,
        if (raw_fd < 0)
                return WIMLIB_ERR_OPEN;
        filedes_init(&fd, raw_fd);
-       ret = extract_wim_resource_to_fd(lte, &fd, wim_resource_size(lte));
+       ret = extract_full_stream_to_fd(lte, &fd);
        if (filedes_close(&fd) && !ret)
                ret = WIMLIB_ERR_WRITE;
        return ret;