initial commit
This commit is contained in:
112
third_party/libhv/cpputil/hpath.cpp
vendored
Executable file
112
third_party/libhv/cpputil/hpath.cpp
vendored
Executable file
@@ -0,0 +1,112 @@
|
||||
#include "hpath.h"
|
||||
|
||||
#include "hplatform.h"
|
||||
|
||||
bool HPath::exists(const char* path) {
|
||||
return access(path, 0) == 0;
|
||||
}
|
||||
|
||||
bool HPath::isdir(const char* path) {
|
||||
if (access(path, 0) != 0) return false;
|
||||
struct stat st;
|
||||
memset(&st, 0, sizeof(st));
|
||||
stat(path, &st);
|
||||
return S_ISDIR(st.st_mode);
|
||||
}
|
||||
|
||||
bool HPath::isfile(const char* path) {
|
||||
if (access(path, 0) != 0) return false;
|
||||
struct stat st;
|
||||
memset(&st, 0, sizeof(st));
|
||||
stat(path, &st);
|
||||
return S_ISREG(st.st_mode);
|
||||
}
|
||||
|
||||
bool HPath::islink(const char* path) {
|
||||
#ifdef OS_WIN
|
||||
return HPath::isdir(path) && (GetFileAttributesA(path) & FILE_ATTRIBUTE_REPARSE_POINT);
|
||||
#else
|
||||
if (access(path, 0) != 0) return false;
|
||||
struct stat st;
|
||||
memset(&st, 0, sizeof(st));
|
||||
lstat(path, &st);
|
||||
return S_ISLNK(st.st_mode);
|
||||
#endif
|
||||
}
|
||||
|
||||
std::string HPath::basename(const std::string& filepath) {
|
||||
std::string::size_type pos1 = filepath.find_last_not_of("/\\");
|
||||
if (pos1 == std::string::npos) {
|
||||
return "/";
|
||||
}
|
||||
std::string::size_type pos2 = filepath.find_last_of("/\\", pos1);
|
||||
if (pos2 == std::string::npos) {
|
||||
pos2 = 0;
|
||||
} else {
|
||||
pos2++;
|
||||
}
|
||||
|
||||
return filepath.substr(pos2, pos1-pos2+1);
|
||||
}
|
||||
|
||||
std::string HPath::dirname(const std::string& filepath) {
|
||||
std::string::size_type pos1 = filepath.find_last_not_of("/\\");
|
||||
if (pos1 == std::string::npos) {
|
||||
return "/";
|
||||
}
|
||||
std::string::size_type pos2 = filepath.find_last_of("/\\", pos1);
|
||||
if (pos2 == std::string::npos) {
|
||||
return ".";
|
||||
} else if (pos2 == 0) {
|
||||
pos2 = 1;
|
||||
}
|
||||
|
||||
return filepath.substr(0, pos2);
|
||||
}
|
||||
|
||||
std::string HPath::filename(const std::string& filepath) {
|
||||
std::string::size_type pos1 = filepath.find_last_of("/\\");
|
||||
if (pos1 == std::string::npos) {
|
||||
pos1 = 0;
|
||||
} else {
|
||||
pos1++;
|
||||
}
|
||||
std::string file = filepath.substr(pos1);
|
||||
|
||||
std::string::size_type pos2 = file.find_last_of(".");
|
||||
if (pos2 == std::string::npos) {
|
||||
return file;
|
||||
}
|
||||
return file.substr(0, pos2);
|
||||
}
|
||||
|
||||
std::string HPath::suffixname(const std::string& filepath) {
|
||||
std::string::size_type pos1 = filepath.find_last_of("/\\");
|
||||
if (pos1 == std::string::npos) {
|
||||
pos1 = 0;
|
||||
} else {
|
||||
pos1++;
|
||||
}
|
||||
std::string file = filepath.substr(pos1);
|
||||
|
||||
std::string::size_type pos2 = file.find_last_of(".");
|
||||
if (pos2 == std::string::npos) {
|
||||
return "";
|
||||
}
|
||||
return file.substr(pos2+1);
|
||||
}
|
||||
|
||||
std::string HPath::join(const std::string& dir, const std::string& filename) {
|
||||
char separator = '/';
|
||||
#ifdef OS_WIN
|
||||
if (dir.find_first_of("\\") != std::string::npos) {
|
||||
separator = '\\';
|
||||
}
|
||||
#endif
|
||||
std::string filepath(dir);
|
||||
if (dir[dir.length()-1] != separator) {
|
||||
filepath += separator;
|
||||
}
|
||||
filepath += filename;
|
||||
return filepath;
|
||||
}
|
||||
Reference in New Issue
Block a user