1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 11:13:28 +01:00

Implemented support for detecting file types by magic number, stripping

path and suffix to leave basename, and getting the DLL suffix.

llvm-svn: 16289
This commit is contained in:
Reid Spencer 2004-09-11 04:55:08 +00:00
parent 94b2c61caa
commit aad677983e

View File

@ -20,6 +20,7 @@
#include "Unix.h"
#include <sys/stat.h>
#include <fcntl.h>
#include <fstream>
namespace llvm {
using namespace sys;
@ -77,6 +78,53 @@ Path::GetUserHomeDirectory() {
return GetRootDirectory();
}
bool
Path::is_file() const {
return (is_valid() && path[path.length()-1] != '/');
}
bool
Path::is_directory() const {
return (is_valid() && path[path.length()-1] == '/');
}
std::string
Path::get_basename() const {
// Find the last slash
size_t slash = path.rfind('/');
if (slash == std::string::npos)
slash = 0;
else
slash++;
return path.substr(slash, path.rfind('.'));
}
bool Path::has_magic_number(const std::string &Magic) const {
size_t len = Magic.size();
char buf[ 1 + len];
std::ifstream f(path.c_str());
f.read(buf, len);
buf[len] = '\0';
return Magic == buf;
}
bool
Path::is_bytecode_file() const {
if (readable()) {
return has_magic_number("llvm");
}
return false;
}
bool
Path::is_archive() const {
if (readable()) {
return has_magic_number("!<arch>\012");
}
return false;
}
bool
Path::exists() const {
return 0 == access(path.c_str(), F_OK );