]> wimlib.net Git - wimlib/blobdiff - src/symlink.c
Make different threads use different FILE*'s
[wimlib] / src / symlink.c
index 697da93e1f8d836a57b18fb82efdc0cfb6081aad..b1c5b5d388b4703cf96c6b26d2af7d8dbdb00dbb 100644 (file)
@@ -105,7 +105,7 @@ static ssize_t get_symlink_name(const u8 *resource, size_t resource_len,
                translated_target += 4;
                link_target_len -= 4;
                /* There's a drive letter, so just leave the backslashes since
-                * it won't go anyhwere on UNIX anyway... 
+                * it won't go anyhwere on UNIX anyway...
                 *
                 * XXX
                 * NTFS-3g tries to re-map these links to actually point to
@@ -163,7 +163,7 @@ out:
  * The dentry may be either "real" symlink or a junction point.
  */
 ssize_t inode_readlink(const struct inode *inode, char *buf, size_t buf_len,
-                      const WIMStruct *w)
+                      const WIMStruct *w, int read_resource_flags)
 {
        const struct lookup_table_entry *lte;
        int ret;
@@ -178,14 +178,14 @@ ssize_t inode_readlink(const struct inode *inode, char *buf, size_t buf_len,
                return -EIO;
 
        u8 res_buf[wim_resource_size(lte)];
-       ret = read_full_wim_resource(lte, res_buf);
+       ret = read_full_wim_resource(lte, res_buf, read_resource_flags);
        if (ret != 0)
                return -EIO;
        return get_symlink_name(res_buf, wim_resource_size(lte), buf,
                                buf_len, inode->reparse_tag);
 }
 
-/* 
+/*
  * Sets @inode to be a symbolic link pointing to @target.
  *
  * A lookup table entry for the symbolic link data buffer is created and
@@ -206,14 +206,14 @@ int inode_set_symlink(struct inode *inode, const char *target,
        struct lookup_table_entry *lte = NULL, *existing_lte;
        u8 symlink_buf_hash[SHA1_HASH_SIZE];
        void *symlink_buf;
-       
+
        symlink_buf = make_symlink_reparse_data_buf(target, &symlink_buf_len);
        if (!symlink_buf)
                return WIMLIB_ERR_NOMEM;
 
        DEBUG("Made symlink reparse data buf (len = %zu, name len = %zu)",
                        symlink_buf_len, symlink_buf_len);
-       
+
        sha1_buffer(symlink_buf, symlink_buf_len, symlink_buf_hash);
 
        existing_lte = __lookup_resource(lookup_table, symlink_buf_hash);
@@ -248,9 +248,6 @@ int inode_set_symlink(struct inode *inode, const char *target,
        if (lte_ret)
                *lte_ret = lte;
        return 0;
-out_free_lte:
-       if (lte != existing_lte)
-               FREE(lte);
 out_free_symlink_buf:
        FREE(symlink_buf);
        return ret;