]> wimlib.net Git - wimlib/blobdiff - src/extract.c
winnt_openat(): Use FILE_SHARE_VALID_FLAGS
[wimlib] / src / extract.c
index bc769eec798d284f61ddee9f28fd006304b616bd..a574f7c5af374d77f0cde3740f5743b0eb93b05a 100644 (file)
@@ -658,11 +658,11 @@ extract_security(const tchar *path, struct apply_ctx *ctx,
        if (ctx->supported_features.security_descriptors &&
            inode->i_security_id != -1)
        {
-               const struct wim_security_data *sd;
+               struct wim_security_data *sd;
                const u8 *desc;
                size_t desc_size;
 
-               sd = wim_const_security_data(ctx->wim);
+               sd = wim_get_current_security_data(ctx->wim);
                desc = sd->descriptors[inode->i_security_id];
                desc_size = sd->sizes[inode->i_security_id];
 
@@ -1471,7 +1471,7 @@ extract_streams_from_pipe(struct apply_ctx *ctx)
        pwm_flags = PWM_ALLOW_WIM_HDR;
        if ((ctx->extract_flags & WIMLIB_EXTRACT_FLAG_RESUME))
                pwm_flags |= PWM_SILENT_EOF;
-       memcpy(ctx->progress.extract.guid, ctx->wim->hdr.guid, WIM_GID_LEN);
+       memcpy(ctx->progress.extract.guid, ctx->wim->hdr.guid, WIM_GUID_LEN);
        ctx->progress.extract.part_number = ctx->wim->hdr.part_number;
        ctx->progress.extract.total_parts = ctx->wim->hdr.total_parts;
        if (ctx->progress_func)
@@ -1561,12 +1561,12 @@ extract_streams_from_pipe(struct apply_ctx *ctx)
                        if (part_number != ctx->progress.extract.part_number ||
                            total_parts != ctx->progress.extract.total_parts ||
                            memcmp(pwm_hdr.guid, ctx->progress.extract.guid,
-                                  WIM_GID_LEN))
+                                  WIM_GUID_LEN))
                        {
                                ctx->progress.extract.part_number = part_number;
                                ctx->progress.extract.total_parts = total_parts;
                                memcpy(ctx->progress.extract.guid,
-                                      pwm_hdr.guid, WIM_GID_LEN);
+                                      pwm_hdr.guid, WIM_GUID_LEN);
                                if (ctx->progress_func) {
                                        ctx->progress_func(
                                                WIMLIB_PROGRESS_MSG_EXTRACT_SPWM_PART_BEGIN,
@@ -1858,16 +1858,12 @@ dentry_calculate_extraction_name(struct wim_dentry *dentry,
        }
 
        if (file_name_valid(dentry->file_name, dentry->file_name_nbytes / 2, false)) {
-#if TCHAR_IS_UTF16LE
-               dentry->extraction_name = dentry->file_name;
-               dentry->extraction_name_nchars = dentry->file_name_nbytes / 2;
-               return 0;
-#else
-               return utf16le_to_tstr(dentry->file_name,
+               ret = utf16le_get_tstr(dentry->file_name,
                                       dentry->file_name_nbytes,
-                                      &dentry->extraction_name,
+                                      (const tchar **)&dentry->extraction_name,
                                       &dentry->extraction_name_nchars);
-#endif
+               dentry->extraction_name_nchars /= sizeof(tchar);
+               return ret;
        } else {
                if (ctx->extract_flags & WIMLIB_EXTRACT_FLAG_REPLACE_INVALID_FILENAMES)
                {
@@ -1891,18 +1887,17 @@ out_replace:
                memcpy(utf16_name_copy, dentry->file_name, dentry->file_name_nbytes);
                file_name_valid(utf16_name_copy, dentry->file_name_nbytes / 2, true);
 
-               tchar *tchar_name;
+               const tchar *tchar_name;
                size_t tchar_nchars;
-       #if TCHAR_IS_UTF16LE
-               tchar_name = utf16_name_copy;
-               tchar_nchars = dentry->file_name_nbytes / 2;
-       #else
-               ret = utf16le_to_tstr(utf16_name_copy,
-                                     dentry->file_name_nbytes,
-                                     &tchar_name, &tchar_nchars);
+
+               ret = utf16le_get_tstr(utf16_name_copy,
+                                      dentry->file_name_nbytes,
+                                      &tchar_name, &tchar_nchars);
                if (ret)
                        return ret;
-       #endif
+
+               tchar_nchars /= sizeof(tchar);
+
                size_t fixed_name_num_chars = tchar_nchars;
                tchar fixed_name[tchar_nchars + 50];
 
@@ -1910,9 +1905,9 @@ out_replace:
                fixed_name_num_chars += tsprintf(fixed_name + tchar_nchars,
                                                 T(" (invalid filename #%lu)"),
                                                 ++ctx->invalid_sequence);
-       #if !TCHAR_IS_UTF16LE
-               FREE(tchar_name);
-       #endif
+
+               utf16le_put_tstr(tchar_name);
+
                dentry->extraction_name = memdup(fixed_name,
                                                 2 * fixed_name_num_chars + 2);
                if (!dentry->extraction_name)
@@ -2477,7 +2472,7 @@ extract_trees(WIMStruct *wim, struct wim_dentry **trees, size_t num_trees,
                ctx.progress.extract.target = target;
        }
 
-       ctx.target_dentry = wim_root_dentry(wim);
+       ctx.target_dentry = wim_get_current_root_dentry(wim);
        /* Note: ctx.target_dentry represents the dentry that gets extracted to
         * @target.  There may be none, in which case it gets set to the image
         * root and never matches any of the dentries actually being extracted.
@@ -2780,7 +2775,7 @@ check_extract_flags(const WIMStruct *wim, int *extract_flags_p)
 #ifndef WITH_NTFS_3G
        if (extract_flags & WIMLIB_EXTRACT_FLAG_NTFS) {
                ERROR("wimlib was compiled without support for NTFS-3g, so\n"
-                     "        it cannot apply a WIM image directly to a NTFS volume.");
+                     "        it cannot apply a WIM image directly to an NTFS volume.");
                return WIMLIB_ERR_UNSUPPORTED;
        }
 #endif