* Copyright (c) 2021 Huawei Device Co., Ltd.
*
* HDF is dual licensed: you can use it either under the terms of
* the GPL, or the BSD license, at your option.
* See the LICENSE file in the root of this repository for complete details.
*/
#include "file.h"
#include <climits>
#include <cstdlib>
#include "types.h"
using namespace OHOS::Hardware::Util;
std::string File::AbsPath(const std::string &path)
{
char realPath[PATH_MAX];
#ifdef MINGW32
char *p = _fullpath(realPath, path.data(), PATH_MAX);
if (p != nullptr && access(p, F_OK) != 0) {
p = nullptr;
}
#else
char *p = realpath(path.data(), realPath);
#endif
return p == nullptr ? "" : p;
}
std::string File::StripSuffix(std::string path)
{
auto sepPos = path.rfind(OS_SEPARATOR);
auto dotPos = path.rfind('.');
if (sepPos == std::string::npos || dotPos > sepPos) {
return path.substr(0, dotPos);
} else {
return path;
}
}
std::string File::GetDir(std::string path)
{
auto separatorPos = path.rfind(OS_SEPARATOR);
if (separatorPos == std::string::npos) {
return path;
}
return path.substr(0, separatorPos + 1);
}
std::string File::FileNameBase(const std::string &path)
{
auto sepPos = path.rfind(OS_SEPARATOR);
auto dotPos = path.rfind('.');
if (sepPos == std::string::npos) {
sepPos = 0;
} else {
sepPos++;
}
if (dotPos == std::string::npos || dotPos < sepPos) {
dotPos = path.size();
}
auto len = path.size() - 1;
if (dotPos != std::string::npos && dotPos > sepPos) {
len = dotPos - sepPos;
}
return path.substr(sepPos, len);
}