bool
Path::isFile() const {
+ if (!exists())
+ return false;
struct stat buf;
if (0 != stat(path.c_str(), &buf)) {
ThrowErrno(path + ": can't determine type of path object: ");
bool
Path::isDirectory() const {
+ if (!exists())
+ return false;
struct stat buf;
if (0 != stat(path.c_str(), &buf)) {
ThrowErrno(path + ": can't determine type of path object: ");
bool
Path::isHidden() const {
+ if (!exists())
+ return false;
size_t slash = path.rfind('/');
return (slash != std::string::npos &&
slash < path.length()-1 &&
}
bool Path::hasMagicNumber(const std::string &Magic) const {
+ if (!isFile())
+ return false;
size_t len = Magic.size();
assert(len < 1024 && "Request for magic string too long");
char* buf = (char*) alloca(1 + len);
bool
Path::isBytecodeFile() const {
+ if (!isFile())
+ return false;
char buffer[ 4];
buffer[0] = 0;
int fd = ::open(path.c_str(),O_RDONLY);
bool
Path::canExecute() const {
+ if (0 != access(path.c_str(), R_OK | X_OK ))
+ return false;
struct stat st;
int r = stat(path.c_str(), &st);
if (r != 0 || !S_ISREG(st.st_mode))
return false;
- return 0 == access(path.c_str(), R_OK | X_OK );
+ return true;
}
std::string
bool
Path::isDirectory() const {
+ if (!exists())
+ return false;
WIN32_FILE_ATTRIBUTE_DATA fi;
if (!GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &fi))
ThrowError(std::string(path) + ": Can't get status: ");
bool
Path::isHidden() const {
+ if (!exists())
+ return false;
WIN32_FILE_ATTRIBUTE_DATA fi;
if (!GetFileAttributesEx(path.c_str(), GetFileExInfoStandard, &fi))
ThrowError(std::string(path) + ": Can't get status: ");
bool
Path::isBytecodeFile() const {
+ if (!isFile())
+ return false;
std::string actualMagic;
if (!getMagicNumber(actualMagic, 4))
return false;