mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 05:29:24 +00:00
For PR797:
Change the Path::make*OnDisk methods exception free and adjust their usage. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29836 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ab96bb1df3
commit
e1647f4698
@ -101,7 +101,7 @@ namespace sys {
|
||||
/// @param ErrMsg Optional place for an error message if an error occurs
|
||||
/// @brief Constrct a path to an new, unique, existing temporary
|
||||
/// directory.
|
||||
static Path GetTemporaryDirectory(std::string* ErrMsg);
|
||||
static Path GetTemporaryDirectory(std::string* ErrMsg = 0);
|
||||
|
||||
/// Construct a vector of sys::Path that contains the "standard" system
|
||||
/// library paths suitable for linking into programs. This function *must*
|
||||
@ -424,18 +424,18 @@ namespace sys {
|
||||
/// This method attempts to make the file referenced by the Path object
|
||||
/// available for reading so that the canRead() method will return true.
|
||||
/// @brief Make the file readable;
|
||||
void makeReadableOnDisk();
|
||||
bool makeReadableOnDisk(std::string* ErrMsg);
|
||||
|
||||
/// This method attempts to make the file referenced by the Path object
|
||||
/// available for writing so that the canWrite() method will return true.
|
||||
/// @brief Make the file writable;
|
||||
void makeWriteableOnDisk();
|
||||
bool makeWriteableOnDisk(std::string* ErrMsg);
|
||||
|
||||
/// This method attempts to make the file referenced by the Path object
|
||||
/// available for execution so that the canExecute() method will return
|
||||
/// true.
|
||||
/// @brief Make the file readable;
|
||||
void makeExecutableOnDisk();
|
||||
bool makeExecutableOnDisk(std::string* ErrMsg);
|
||||
|
||||
/// This method allows the last modified time stamp and permission bits
|
||||
/// to be set on the disk object referenced by the Path.
|
||||
|
@ -390,19 +390,28 @@ static bool AddPermissionBits(const Path &File, int bits) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void Path::makeReadableOnDisk() {
|
||||
if (!AddPermissionBits(*this, 0444))
|
||||
ThrowErrno(path + ": can't make file readable");
|
||||
bool Path::makeReadableOnDisk(std::string* ErrMsg) {
|
||||
if (!AddPermissionBits(*this, 0444)) {
|
||||
MakeErrMsg(ErrMsg, path + ": can't make file readable");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Path::makeWriteableOnDisk() {
|
||||
if (!AddPermissionBits(*this, 0222))
|
||||
ThrowErrno(path + ": can't make file writable");
|
||||
bool Path::makeWriteableOnDisk(std::string* ErrMsg) {
|
||||
if (!AddPermissionBits(*this, 0222)) {
|
||||
MakeErrMsg(ErrMsg, path + ": can't make file writable");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Path::makeExecutableOnDisk() {
|
||||
if (!AddPermissionBits(*this, 0111))
|
||||
ThrowErrno(path + ": can't make file executable");
|
||||
bool Path::makeExecutableOnDisk(std::string* ErrMsg) {
|
||||
if (!AddPermissionBits(*this, 0111)) {
|
||||
MakeErrMsg(ErrMsg, path + ": can't make file executable");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -385,13 +385,23 @@ int main(int argc, char **argv, char **envp ) {
|
||||
EmitShellScript(argv);
|
||||
|
||||
// Make the bytecode file readable and directly executable in LLEE
|
||||
sys::Path(RealBytecodeOutput).makeExecutableOnDisk();
|
||||
sys::Path(RealBytecodeOutput).makeReadableOnDisk();
|
||||
std::string ErrMsg;
|
||||
if (sys::Path(RealBytecodeOutput).makeExecutableOnDisk(&ErrMsg)) {
|
||||
std::cerr << argv[0] << ": " << ErrMsg << "\n";
|
||||
return 1;
|
||||
}
|
||||
if (sys::Path(RealBytecodeOutput).makeReadableOnDisk(&ErrMsg)) {
|
||||
std::cerr << argv[0] << ": " << ErrMsg << "\n";
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Make the output, whether native or script, executable as well...
|
||||
sys::Path(OutputFilename).makeExecutableOnDisk();
|
||||
|
||||
std::string ErrMsg;
|
||||
if (sys::Path(OutputFilename).makeExecutableOnDisk(&ErrMsg)) {
|
||||
std::cerr << argv[0] << ": " << ErrMsg << "\n";
|
||||
return 1;
|
||||
}
|
||||
} catch (const char*msg) {
|
||||
std::cerr << argv[0] << ": " << msg << "\n";
|
||||
exitCode = 1;
|
||||
|
@ -598,11 +598,21 @@ int main(int argc, char **argv, char **envp) {
|
||||
}
|
||||
|
||||
// Make the script executable...
|
||||
sys::Path(OutputFilename).makeExecutableOnDisk();
|
||||
std::string ErrMsg;
|
||||
if (sys::Path(OutputFilename).makeExecutableOnDisk(&ErrMsg)) {
|
||||
std::cerr << argv[0] << ": " << ErrMsg << "\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Make the bytecode file readable and directly executable in LLEE as well
|
||||
sys::Path(RealBytecodeOutput).makeExecutableOnDisk();
|
||||
sys::Path(RealBytecodeOutput).makeReadableOnDisk();
|
||||
if (sys::Path(RealBytecodeOutput).makeExecutableOnDisk(&ErrMsg)) {
|
||||
std::cerr << argv[0] << ": " << ErrMsg << "\n";
|
||||
return 1;
|
||||
}
|
||||
if (sys::Path(RealBytecodeOutput).makeReadableOnDisk(&ErrMsg)) {
|
||||
std::cerr << argv[0] << ": " << ErrMsg << "\n";
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user