89 lines
1.6 KiB
C++
89 lines
1.6 KiB
C++
|
// Archive/Common/ItemNameUtils.cpp
|
||
|
|
||
|
#include "StdAfx.h"
|
||
|
|
||
|
#include "ItemNameUtils.h"
|
||
|
|
||
|
namespace NArchive {
|
||
|
namespace NItemName {
|
||
|
|
||
|
static const wchar_t kOSDirDelimiter = WCHAR_PATH_SEPARATOR;
|
||
|
static const wchar_t kDirDelimiter = L'/';
|
||
|
|
||
|
void ReplaceToOsPathSeparator(wchar_t *s)
|
||
|
{
|
||
|
#ifdef _WIN32
|
||
|
for (;;)
|
||
|
{
|
||
|
wchar_t c = *s;
|
||
|
if (c == 0)
|
||
|
break;
|
||
|
if (c == kDirDelimiter)
|
||
|
*s = kOSDirDelimiter;
|
||
|
s++;
|
||
|
}
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
UString MakeLegalName(const UString &name)
|
||
|
{
|
||
|
UString zipName = name;
|
||
|
zipName.Replace(kOSDirDelimiter, kDirDelimiter);
|
||
|
return zipName;
|
||
|
}
|
||
|
|
||
|
UString GetOSName(const UString &name)
|
||
|
{
|
||
|
UString newName = name;
|
||
|
newName.Replace(kDirDelimiter, kOSDirDelimiter);
|
||
|
return newName;
|
||
|
}
|
||
|
|
||
|
UString GetOSName2(const UString &name)
|
||
|
{
|
||
|
if (name.IsEmpty())
|
||
|
return UString();
|
||
|
UString newName = GetOSName(name);
|
||
|
if (newName.Back() == kOSDirDelimiter)
|
||
|
newName.DeleteBack();
|
||
|
return newName;
|
||
|
}
|
||
|
|
||
|
void ConvertToOSName2(UString &name)
|
||
|
{
|
||
|
if (!name.IsEmpty())
|
||
|
{
|
||
|
name.Replace(kDirDelimiter, kOSDirDelimiter);
|
||
|
if (name.Back() == kOSDirDelimiter)
|
||
|
name.DeleteBack();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool HasTailSlash(const AString &name, UINT
|
||
|
#if defined(_WIN32) && !defined(UNDER_CE)
|
||
|
codePage
|
||
|
#endif
|
||
|
)
|
||
|
{
|
||
|
if (name.IsEmpty())
|
||
|
return false;
|
||
|
LPCSTR prev =
|
||
|
#if defined(_WIN32) && !defined(UNDER_CE)
|
||
|
CharPrevExA((WORD)codePage, name, &name[name.Len()], 0);
|
||
|
#else
|
||
|
(LPCSTR)(name) + (name.Len() - 1);
|
||
|
#endif
|
||
|
return (*prev == '/');
|
||
|
}
|
||
|
|
||
|
#ifndef _WIN32
|
||
|
UString WinNameToOSName(const UString &name)
|
||
|
{
|
||
|
UString newName = name;
|
||
|
newName.Replace(L'\\', kOSDirDelimiter);
|
||
|
return newName;
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
}}
|