]> wimlib.net Git - wimlib/blobdiff - src/unix_apply.c
WIMBoot: Update docs
[wimlib] / src / unix_apply.c
index 86be081ff006cf220ec2850512c8f032deddc00d..d1888446b452626ab2b42f50da65346d0bd3a78d 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>
 #  include <utime.h>
 #endif
 
+#ifndef O_NOFOLLOW
+#  define O_NOFOLLOW 0
+#endif
+
 static int
 unix_start_extract(const char *target, struct apply_ctx *ctx)
 {
@@ -56,7 +60,7 @@ unix_start_extract(const char *target, struct apply_ctx *ctx)
 static int
 unix_create_file(const char *path, struct apply_ctx *ctx, u64 *cookie_ret)
 {
-       int fd = open(path, O_TRUNC | O_CREAT | O_WRONLY, 0644);
+       int fd = open(path, O_TRUNC | O_CREAT | O_WRONLY | O_NOFOLLOW, 0644);
        if (fd < 0)
                return WIMLIB_ERR_OPEN;
        close(fd);
@@ -111,18 +115,18 @@ unix_create_symlink(const tchar *oldpath, const tchar *newpath,
 static int
 unix_extract_unnamed_stream(file_spec_t file,
                            struct wim_lookup_table_entry *lte,
-                           struct apply_ctx *ctx)
+                           struct apply_ctx *ctx, struct wim_dentry *_ignore)
 {
        const char *path = file.path;
        struct filedes fd;
        int raw_fd;
        int ret;
 
-       raw_fd = open(path, O_WRONLY | O_TRUNC);
+       raw_fd = open(path, O_WRONLY | O_TRUNC | O_NOFOLLOW);
        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;