Index: lldb/trunk/source/Host/posix/FileSystem.cpp =================================================================== --- lldb/trunk/source/Host/posix/FileSystem.cpp +++ lldb/trunk/source/Host/posix/FileSystem.cpp @@ -10,6 +10,7 @@ #include "lldb/Host/FileSystem.h" // C includes +#include #include #include #include @@ -81,11 +82,25 @@ { if (recurse) { - StreamString command; - command.Printf("rm -rf \"%s\"", file_spec.GetCString()); - int status = ::system(command.GetString().c_str()); - if (status != 0) - error.SetError(status, eErrorTypeGeneric); + DIR *dirp = opendir(file_spec.GetCString()); + if (!dirp) + { + error.SetErrorToErrno(); + return error; + } + struct dirent *direntp; + while (error.Success() && (direntp = readdir(dirp))) + { + if (direntp->d_type == DT_DIR) + error = DeleteDirectory(FileSpec{direntp->d_name, false}, true); + else if (::unlink(direntp->d_name) != 0) + error.SetErrorToErrno(); + } + if (closedir(dirp) != 0) + error.SetErrorToErrno(); + if (error.Fail()) + return error; + return DeleteDirectory(file_spec, false); } else {