X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=include%2Fwimlib%2Fprogress.h;h=6d39b7e49804fb0089c8234985aa51e978108a00;hb=HEAD;hp=b2754445df323a5867bce8f228fccc28b50c2ad0;hpb=9bd0659477b3a1ebad90b46106f743d72689bbd3;p=wimlib diff --git a/include/wimlib/progress.h b/include/wimlib/progress.h index b2754445..538e358f 100644 --- a/include/wimlib/progress.h +++ b/include/wimlib/progress.h @@ -2,6 +2,7 @@ #define _WIMLIB_PROGRESS_H #include "wimlib.h" +#include "wimlib/paths.h" #include "wimlib/types.h" /* If specified, call the user-provided progress function and check its result. @@ -29,7 +30,7 @@ call_progress(wimlib_progress_func_t progfunc, return 0; } -extern int +int report_error(wimlib_progress_func_t progfunc, void *progctx, int error_code, const tchar *path); @@ -55,4 +56,51 @@ set_next_progress(u64 completed_bytes, u64 total_bytes, u64 *next_progress_p) } } +/* Windows: temporarily remove the stream name from the path */ +static inline tchar * +progress_get_streamless_path(const tchar *path) +{ + tchar *cookie = NULL; +#ifdef _WIN32 + cookie = (wchar_t *)path_stream_name(path); + if (cookie) + *--cookie = L'\0'; /* Overwrite the colon */ +#endif + return cookie; +} + +/* Windows: temporarily replace \??\ with \\?\ (to make an NT namespace path + * into a Win32 namespace path) */ +static inline tchar * +progress_get_win32_path(const tchar *path) +{ +#ifdef _WIN32 + if (!wcsncmp(path, L"\\??\\", 4)) { + ((wchar_t *)path)[1] = L'\\'; + return (wchar_t *)&path[1]; + } +#endif + return NULL; +} + +/* Windows: restore the NT namespace path */ +static inline void +progress_put_win32_path(tchar *cookie) +{ +#ifdef _WIN32 + if (cookie) + *cookie = L'?'; +#endif +} + +/* Windows: restore the stream name part of the path */ +static inline void +progress_put_streamless_path(tchar *cookie) +{ +#ifdef _WIN32 + if (cookie) + *cookie = L':'; +#endif +} + #endif /* _WIMLIB_PROGRESS_H */