ItemNameUtils.cpp 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // Archive/Common/ItemNameUtils.cpp
  2. #include "StdAfx.h"
  3. #include "ItemNameUtils.h"
  4. namespace NArchive {
  5. namespace NItemName {
  6. static const wchar_t kOSDirDelimiter = WCHAR_PATH_SEPARATOR;
  7. static const wchar_t kDirDelimiter = L'/';
  8. UString MakeLegalName(const UString &name)
  9. {
  10. UString zipName = name;
  11. zipName.Replace(kOSDirDelimiter, kDirDelimiter);
  12. return zipName;
  13. }
  14. UString GetOSName(const UString &name)
  15. {
  16. UString newName = name;
  17. newName.Replace(kDirDelimiter, kOSDirDelimiter);
  18. return newName;
  19. }
  20. UString GetOSName2(const UString &name)
  21. {
  22. if (name.IsEmpty())
  23. return UString();
  24. UString newName = GetOSName(name);
  25. if (newName[newName.Length() - 1] == kOSDirDelimiter)
  26. newName.Delete(newName.Length() - 1);
  27. return newName;
  28. }
  29. bool HasTailSlash(const AString &name, UINT codePage)
  30. {
  31. if (name.IsEmpty())
  32. return false;
  33. LPCSTR prev =
  34. #ifdef _WIN32
  35. CharPrevExA((WORD)codePage, name, &name[name.Length()], 0);
  36. #else
  37. (LPCSTR)(name) + (name.Length() - 1);
  38. #endif
  39. return (*prev == '/');
  40. }
  41. #ifndef _WIN32
  42. UString WinNameToOSName(const UString &name)
  43. {
  44. UString newName = name;
  45. newName.Replace(L'\\', kOSDirDelimiter);
  46. return newName;
  47. }
  48. #endif
  49. }}