1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// Archive/Common/ItemNameUtils.cpp
2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "StdAfx.h"
4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "../../../../C/Types.h"
6baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
7baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "ItemNameUtils.h"
8baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
9baa3858d3f5d128a5c8466b700098109edcad5f2repo syncnamespace NArchive {
10baa3858d3f5d128a5c8466b700098109edcad5f2repo syncnamespace NItemName {
11baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
12baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstatic const wchar_t kOSDirDelimiter = WCHAR_PATH_SEPARATOR;
13baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstatic const wchar_t kDirDelimiter = L'/';
14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
15baa3858d3f5d128a5c8466b700098109edcad5f2repo syncUString MakeLegalName(const UString &name)
16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  UString zipName = name;
18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  zipName.Replace(kOSDirDelimiter, kDirDelimiter);
19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  return zipName;
20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
22baa3858d3f5d128a5c8466b700098109edcad5f2repo syncUString GetOSName(const UString &name)
23baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  UString newName = name;
25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  newName.Replace(kDirDelimiter, kOSDirDelimiter);
26baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  return newName;
27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
28baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
29baa3858d3f5d128a5c8466b700098109edcad5f2repo syncUString GetOSName2(const UString &name)
30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
31baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  if (name.IsEmpty())
32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    return UString();
33baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  UString newName = GetOSName(name);
34baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  if (newName[newName.Length() - 1] == kOSDirDelimiter)
35baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    newName.Delete(newName.Length() - 1);
36baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  return newName;
37baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
38baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
39baa3858d3f5d128a5c8466b700098109edcad5f2repo syncbool HasTailSlash(const AString &name, UINT codePage)
40baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
41baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  if (name.IsEmpty())
42baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    return false;
43baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  LPCSTR prev =
44baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  #if defined(_WIN32) && !defined(UNDER_CE)
45baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    CharPrevExA((WORD)codePage, name, &name[name.Length()], 0);
46baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  #else
47baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    (LPCSTR)(name) + (name.Length() - 1);
48baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  #endif
49baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  return (*prev == '/');
50baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
51baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
52baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef _WIN32
53baa3858d3f5d128a5c8466b700098109edcad5f2repo syncUString WinNameToOSName(const UString &name)
54baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
55baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  UString newName = name;
56baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  newName.Replace(L'\\', kOSDirDelimiter);
57baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  return newName;
58baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
59baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif
60baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
61baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}}
62