+/* 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
+}
+