X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fextract.c;h=4f1c54a00df805cef6ff092e009ec32bc35e603a;hp=b200e18cae7496df4f88e365085d3abf918c0341;hb=f03f71aeaedbe90772338635cc221bf065f356c6;hpb=d5a64bb4299105c93b4e9a95e97b579c6f9254af;ds=sidebyside diff --git a/src/extract.c b/src/extract.c index b200e18c..4f1c54a0 100644 --- a/src/extract.c +++ b/src/extract.c @@ -341,30 +341,9 @@ extract_chunk_wrapper(const void *chunk, size_t size, void *_ctx) if (ret) return ret; - if (progress->extract.completed_bytes >= - progress->extract.total_bytes) - { - ctx->next_progress = UINT64_MAX; - } else { - /* Send new message as soon as another 1/128 of the - * total has been extracted. (Arbitrary number.) */ - ctx->next_progress = - progress->extract.completed_bytes + - progress->extract.total_bytes / 128; - - /* ... Unless that would be more than 5000000 bytes, in - * which case send the next after the next 5000000 - * bytes. (Another arbitrary number.) */ - if (progress->extract.completed_bytes + 5000000 < - ctx->next_progress) - ctx->next_progress = - progress->extract.completed_bytes + 5000000; - - /* ... But always send a message as soon as we're - * completely done. */ - if (progress->extract.total_bytes < ctx->next_progress) - ctx->next_progress = progress->extract.total_bytes; - } + set_next_progress(progress->extract.completed_bytes, + progress->extract.total_bytes, + &ctx->next_progress); } if (unlikely(filedes_valid(&ctx->tmpfile_fd))) { @@ -676,19 +655,20 @@ file_name_valid(utf16lechar *name, size_t num_chars, bool fix) if (num_chars == 0) return true; for (i = 0; i < num_chars; i++) { - switch (name[i]) { + switch (le16_to_cpu(name[i])) { #ifdef __WIN32__ - case cpu_to_le16('\\'): - case cpu_to_le16(':'): - case cpu_to_le16('*'): - case cpu_to_le16('?'): - case cpu_to_le16('"'): - case cpu_to_le16('<'): - case cpu_to_le16('>'): - case cpu_to_le16('|'): + case '\x01'...'\x1F': + case '\\': + case ':': + case '*': + case '?': + case '"': + case '<': + case '>': + case '|': #endif - case cpu_to_le16('/'): - case cpu_to_le16('\0'): + case '/': + case '\0': if (fix) name[i] = replacement_char; else @@ -696,16 +676,6 @@ file_name_valid(utf16lechar *name, size_t num_chars, bool fix) } } -#ifdef __WIN32__ - if (name[num_chars - 1] == cpu_to_le16(' ') || - name[num_chars - 1] == cpu_to_le16('.')) - { - if (fix) - name[num_chars - 1] = replacement_char; - else - return false; - } -#endif return true; }