1// Archive/Common/ItemNameUtils.cpp
2
3#include "StdAfx.h"
4
5#include "ItemNameUtils.h"
6
7namespace NArchive {
8namespace NItemName {
9
10static const wchar_t kOSDirDelimiter = WCHAR_PATH_SEPARATOR;
11static const wchar_t kDirDelimiter = L'/';
12
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
28UString MakeLegalName(const UString &name)
29{
30  UString zipName = name;
31  zipName.Replace(kOSDirDelimiter, kDirDelimiter);
32  return zipName;
33}
34
35UString GetOSName(const UString &name)
36{
37  UString newName = name;
38  newName.Replace(kDirDelimiter, kOSDirDelimiter);
39  return newName;
40}
41
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
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
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
80UString WinNameToOSName(const UString &name)
81{
82  UString newName = name;
83  newName.Replace(L'\\', kOSDirDelimiter);
84  return newName;
85}
86#endif
87
88}}
89