1 // Archive/Common/ItemNameUtils.cpp 2 3 #include "StdAfx.h" 4 5 #include "ItemNameUtils.h" 6 7 namespace NArchive { 8 namespace NItemName { 9 10 static const wchar_t kOSDirDelimiter = WCHAR_PATH_SEPARATOR; 11 static const wchar_t kDirDelimiter = L'/'; 12 13 void ReplaceToOsPathSeparator(wchar_t *s) 14 { 15 #ifdef _WIN32 16 for (;;) 17 { 18 wchar_t c = *s; 19 if (c == 0) 20 break; 21 if (c == kDirDelimiter) 22 *s = kOSDirDelimiter; 23 s++; 24 } 25 #endif 26 } 27 28 UString MakeLegalName(const UString &name) 29 { 30 UString zipName = name; 31 zipName.Replace(kOSDirDelimiter, kDirDelimiter); 32 return zipName; 33 } 34 35 UString GetOSName(const UString &name) 36 { 37 UString newName = name; 38 newName.Replace(kDirDelimiter, kOSDirDelimiter); 39 return newName; 40 } 41 42 UString GetOSName2(const UString &name) 43 { 44 if (name.IsEmpty()) 45 return UString(); 46 UString newName = GetOSName(name); 47 if (newName.Back() == kOSDirDelimiter) 48 newName.DeleteBack(); 49 return newName; 50 } 51 52 void ConvertToOSName2(UString &name) 53 { 54 if (!name.IsEmpty()) 55 { 56 name.Replace(kDirDelimiter, kOSDirDelimiter); 57 if (name.Back() == kOSDirDelimiter) 58 name.DeleteBack(); 59 } 60 } 61 62 bool HasTailSlash(const AString &name, UINT 63 #if defined(_WIN32) && !defined(UNDER_CE) 64 codePage 65 #endif 66 ) 67 { 68 if (name.IsEmpty()) 69 return false; 70 LPCSTR prev = 71 #if defined(_WIN32) && !defined(UNDER_CE) 72 CharPrevExA((WORD)codePage, name, &name[name.Len()], 0); 73 #else 74 (LPCSTR)(name) + (name.Len() - 1); 75 #endif 76 return (*prev == '/'); 77 } 78 79 #ifndef _WIN32 80 UString WinNameToOSName(const UString &name) 81 { 82 UString newName = name; 83 newName.Replace(L'\\', kOSDirDelimiter); 84 return newName; 85 } 86 #endif 87 88 }} 89