FileUtil: Don't manually strip trailing slashes

POSIX allows one or more trailing slashes for directories.

From POSIX.1-2008, section 3.271 (Base Definitions / Pathname):

> A pathname can optionally contain one or more trailing <slash>
> characters. Multiple successive <slash> characters are considered to
> be the same as one <slash>, except for the case of exactly two
> leading <slash> characters.

On Windows, the extra trailing slashes are ignored for directories too.
This commit is contained in:
Léo Lam 2017-06-16 12:31:26 +02:00
parent 9c8e26bdff
commit aa63199977

View File

@ -51,29 +51,15 @@
// REMEMBER: strdup considered harmful!
namespace File
{
// Remove any ending forward slashes from directory paths
// Modifies argument.
static void StripTailDirSlashes(std::string& fname)
{
if (fname.length() > 1)
{
while (fname.back() == DIR_SEP_CHR)
fname.pop_back();
}
}
// Returns true if file filename exists
bool Exists(const std::string& filename)
{
struct stat file_info;
std::string copy(filename);
StripTailDirSlashes(copy);
#ifdef _WIN32
int result = _tstat64(UTF8ToTStr(copy).c_str(), &file_info);
int result = _tstat64(UTF8ToTStr(filename).c_str(), &file_info);
#else
int result = stat(copy.c_str(), &file_info);
int result = stat(filename.c_str(), &file_info);
#endif
return (result == 0);
@ -84,13 +70,10 @@ bool IsDirectory(const std::string& filename)
{
struct stat file_info;
std::string copy(filename);
StripTailDirSlashes(copy);
#ifdef _WIN32
int result = _tstat64(UTF8ToTStr(copy).c_str(), &file_info);
int result = _tstat64(UTF8ToTStr(filename).c_str(), &file_info);
#else
int result = stat(copy.c_str(), &file_info);
int result = stat(filename.c_str(), &file_info);
#endif
if (result < 0)