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 ReplaceToOsPathSeparator(wchar_t * s)13void 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 MakeLegalName(const UString & name)28UString MakeLegalName(const UString &name) 29 { 30 UString zipName = name; 31 zipName.Replace(kOSDirDelimiter, kDirDelimiter); 32 return zipName; 33 } 34 GetOSName(const UString & name)35UString GetOSName(const UString &name) 36 { 37 UString newName = name; 38 newName.Replace(kDirDelimiter, kOSDirDelimiter); 39 return newName; 40 } 41 GetOSName2(const UString & name)42UString 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 ConvertToOSName2(UString & name)52void 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 HasTailSlash(const AString & name,UINT codePage)62bool 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 WinNameToOSName(const UString & name)80UString WinNameToOSName(const UString &name) 81 { 82 UString newName = name; 83 newName.Replace(L'\\', kOSDirDelimiter); 84 return newName; 85 } 86 #endif 87 88 }} 89