mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-14 22:38:03 +00:00
Make the removal of files use Path::eraseFromDisk just like it does for
the removal of directories. Using std::remove is indiscriminate and can lead to the removal of things like /dev/null if run as root. The Path::eraseFromDisk method ensures that we only ever remove regular files or directories, but never character or block special nodes. This should clear up the problem with usage like: llvm-as -o /dev/null which is used in the llvm-test makefiles. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29540 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bffdc36c38
commit
a8e80c5188
@ -15,6 +15,7 @@
|
||||
#include "Unix.h"
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#if HAVE_EXECINFO_H
|
||||
# include <execinfo.h> // For backtrace().
|
||||
#endif
|
||||
@ -30,7 +31,7 @@ bool StackTraceRequested = false;
|
||||
/// InterruptFunction - The function to call if ctrl-c is pressed.
|
||||
void (*InterruptFunction)() = 0;
|
||||
|
||||
std::vector<std::string> *FilesToRemove = 0 ;
|
||||
std::vector<sys::Path> *FilesToRemove = 0 ;
|
||||
std::vector<sys::Path> *DirectoriesToRemove = 0;
|
||||
|
||||
// IntSigs - Signals that may interrupt the program at any time.
|
||||
@ -112,7 +113,7 @@ void PrintStackTrace() {
|
||||
RETSIGTYPE SignalHandler(int Sig) {
|
||||
if (FilesToRemove != 0)
|
||||
while (!FilesToRemove->empty()) {
|
||||
std::remove(FilesToRemove->back().c_str());
|
||||
FilesToRemove->back().eraseFromDisk(true);
|
||||
FilesToRemove->pop_back();
|
||||
}
|
||||
|
||||
@ -156,9 +157,9 @@ void sys::SetInterruptFunction(void (*IF)()) {
|
||||
// RemoveFileOnSignal - The public API
|
||||
void sys::RemoveFileOnSignal(const sys::Path &Filename) {
|
||||
if (FilesToRemove == 0)
|
||||
FilesToRemove = new std::vector<std::string>;
|
||||
FilesToRemove = new std::vector<sys::Path>;
|
||||
|
||||
FilesToRemove->push_back(Filename.toString());
|
||||
FilesToRemove->push_back(Filename);
|
||||
|
||||
std::for_each(IntSigs, IntSigsEnd, RegisterHandler);
|
||||
std::for_each(KillSigs, KillSigsEnd, RegisterHandler);
|
||||
|
Loading…
x
Reference in New Issue
Block a user