rlm@1: // Archive/Common/ItemNameUtils.cpp rlm@1: rlm@1: #include "StdAfx.h" rlm@1: rlm@1: #include "ItemNameUtils.h" rlm@1: rlm@1: namespace NArchive { rlm@1: namespace NItemName { rlm@1: rlm@1: static const wchar_t kOSDirDelimiter = WCHAR_PATH_SEPARATOR; rlm@1: static const wchar_t kDirDelimiter = L'/'; rlm@1: rlm@1: UString MakeLegalName(const UString &name) rlm@1: { rlm@1: UString zipName = name; rlm@1: zipName.Replace(kOSDirDelimiter, kDirDelimiter); rlm@1: return zipName; rlm@1: } rlm@1: rlm@1: UString GetOSName(const UString &name) rlm@1: { rlm@1: UString newName = name; rlm@1: newName.Replace(kDirDelimiter, kOSDirDelimiter); rlm@1: return newName; rlm@1: } rlm@1: rlm@1: UString GetOSName2(const UString &name) rlm@1: { rlm@1: if (name.IsEmpty()) rlm@1: return UString(); rlm@1: UString newName = GetOSName(name); rlm@1: if (newName[newName.Length() - 1] == kOSDirDelimiter) rlm@1: newName.Delete(newName.Length() - 1); rlm@1: return newName; rlm@1: } rlm@1: rlm@1: bool HasTailSlash(const AString &name, UINT codePage) rlm@1: { rlm@1: if (name.IsEmpty()) rlm@1: return false; rlm@1: LPCSTR prev = rlm@1: #ifdef _WIN32 rlm@1: CharPrevExA((WORD)codePage, name, &name[name.Length()], 0); rlm@1: #else rlm@1: (LPCSTR)(name) + (name.Length() - 1); rlm@1: #endif rlm@1: return (*prev == '/'); rlm@1: } rlm@1: rlm@1: #ifndef _WIN32 rlm@1: UString WinNameToOSName(const UString &name) rlm@1: { rlm@1: UString newName = name; rlm@1: newName.Replace(L'\\', kOSDirDelimiter); rlm@1: return newName; rlm@1: } rlm@1: #endif rlm@1: rlm@1: }}