/* wide_path.h -- Define class wide_path to convert multibyte win32 path to wchar_t Win32 path including long path prefix if necessary. This file is part of Cygwin. This software is a copyrighted work licensed under the terms of the Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ #include #include class wide_path { wchar_t *wp; public: wide_path () : wp (NULL) {} wide_path (const char *mb_path, bool do_prefix = true) { int len = mbstowcs (NULL, mb_path, 0) + 1; wp = (wchar_t *) malloc ((len + 6) * sizeof (wchar_t)); wchar_t *wp_p = wp; if (do_prefix && len >= MAX_PATH && strncmp (mb_path, "\\\\?\\", 4) != 0) { wcscpy (wp_p, L"\\\\?\\"); wp_p += 4; if (strncmp (mb_path, "\\\\", 2) == 0) { wcscpy (wp_p, L"UNC"); wp_p += 3; ++mb_path; --len; } } mbstowcs (wp_p, mb_path, len); } ~wide_path () { if (wp) free (wp); } operator const wchar_t *() const { return wp; } };