mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
Only delete regular files and directories.
This ports a missing feature from PathV1.h. I am not sure how to test this with the regular infrastructure, but an Apple bot should check this when r183985 is reapplied. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184119 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f7c9b95f94
commit
87bec915f1
@ -236,6 +236,22 @@ error_code remove(const Twine &path, bool &existed) {
|
||||
SmallString<128> path_storage;
|
||||
StringRef p = path.toNullTerminatedStringRef(path_storage);
|
||||
|
||||
struct stat buf;
|
||||
if (stat(p.begin(), &buf) != 0) {
|
||||
if (errno != errc::no_such_file_or_directory)
|
||||
return error_code(errno, system_category());
|
||||
existed = false;
|
||||
return error_code::success();
|
||||
}
|
||||
|
||||
// Note: this check catches strange situations. In all cases, LLVM should
|
||||
// only be involved in the creation and deletion of regular files. This
|
||||
// check ensures that what we're trying to erase is a regular file. It
|
||||
// effectively prevents LLVM from erasing things like /dev/null, any block
|
||||
// special file, or other things that aren't "regular" files.
|
||||
if (!S_ISREG(buf.st_mode) && !S_ISDIR(buf.st_mode))
|
||||
return make_error_code(errc::operation_not_permitted);
|
||||
|
||||
if (::remove(p.begin()) == -1) {
|
||||
if (errno != errc::no_such_file_or_directory)
|
||||
return error_code(errno, system_category());
|
||||
|
Loading…
Reference in New Issue
Block a user