aboutsummaryrefslogtreecommitdiff
path: root/devel/electron23/files/patch-base_files_file__util__posix.cc
diff options
context:
space:
mode:
Diffstat (limited to 'devel/electron23/files/patch-base_files_file__util__posix.cc')
-rw-r--r--devel/electron23/files/patch-base_files_file__util__posix.cc52
1 files changed, 52 insertions, 0 deletions
diff --git a/devel/electron23/files/patch-base_files_file__util__posix.cc b/devel/electron23/files/patch-base_files_file__util__posix.cc
new file mode 100644
index 000000000000..b932d5c3169d
--- /dev/null
+++ b/devel/electron23/files/patch-base_files_file__util__posix.cc
@@ -0,0 +1,52 @@
+--- base/files/file_util_posix.cc.orig 2022-08-31 12:19:35 UTC
++++ base/files/file_util_posix.cc
+@@ -700,32 +700,34 @@ bool CreateDirectoryAndGetError(const FilePath& full_p
+ File::Error* error) {
+ ScopedBlockingCall scoped_blocking_call(
+ FROM_HERE, BlockingType::MAY_BLOCK); // For call to mkdir().
++ const FilePath kFileSystemRoot("/");
+ std::vector<FilePath> subpaths;
+
+ // Collect a list of all parent directories.
+ FilePath last_path = full_path;
+- subpaths.push_back(full_path);
++ if (full_path != kFileSystemRoot)
++ subpaths.push_back(full_path);
+ for (FilePath path = full_path.DirName();
+- path.value() != last_path.value(); path = path.DirName()) {
++ (path.value() != last_path.value() &&
++ (path != kFileSystemRoot)); path = path.DirName()) {
+ subpaths.push_back(path);
+ last_path = path;
+ }
+
+ // Iterate through the parents and create the missing ones.
+ for (const FilePath& subpath : base::Reversed(subpaths)) {
+- if (DirectoryExists(subpath))
+- continue;
+- if (mkdir(subpath.value().c_str(), 0700) == 0)
+- continue;
+- // Mkdir failed, but it might have failed with EEXIST, or some other error
+- // due to the directory appearing out of thin air. This can occur if
+- // two processes are trying to create the same file system tree at the same
+- // time. Check to see if it exists and make sure it is a directory.
+- int saved_errno = errno;
+- if (!DirectoryExists(subpath)) {
+- if (error)
+- *error = File::OSErrorToFileError(saved_errno);
+- return false;
++ if (!PathExists(subpath)) {
++ if ((mkdir(subpath.value().c_str(), 0700) == -1) &&
++ ((full_path != subpath) ? (errno != ENOENT) : (-1))) {
++ int saved_errno = errno;
++ if (error)
++ *error = File::OSErrorToFileError(saved_errno);
++ return false;
++ }
++ } else if (!DirectoryExists(subpath)) {
++ if (error)
++ *error = File::OSErrorToFileError(ENOTDIR);
++ return false;
+ }
+ }
+ return true;