mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-11 11:34:02 +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;
|
SmallString<128> path_storage;
|
||||||
StringRef p = path.toNullTerminatedStringRef(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 (::remove(p.begin()) == -1) {
|
||||||
if (errno != errc::no_such_file_or_directory)
|
if (errno != errc::no_such_file_or_directory)
|
||||||
return error_code(errno, system_category());
|
return error_code(errno, system_category());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user