From 0bad8b0c9877f92eeeb550654f1ea51a71a085e4 Mon Sep 17 00:00:00 2001 From: Nick Bourdakos Date: Thu, 28 Aug 2025 06:37:51 -0700 Subject: [PATCH] Ensure parent directories exist before creating output files on Apple PiperOrigin-RevId: 800443625 --- internal/platform/implementation/apple/BUILD | 1 + internal/platform/implementation/apple/platform.mm | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/internal/platform/implementation/apple/BUILD b/internal/platform/implementation/apple/BUILD index ca58ac8a..19b97168 100644 --- a/internal/platform/implementation/apple/BUILD +++ b/internal/platform/implementation/apple/BUILD @@ -96,6 +96,7 @@ objc_library( "//third_party/apple_frameworks:Network", "@nlohmann_json//:json", "//internal/base:file_path", + "//internal/base:files", "//internal/platform:base", "//internal/platform/implementation:comm", "//internal/platform/implementation:platform", diff --git a/internal/platform/implementation/apple/platform.mm b/internal/platform/implementation/apple/platform.mm index c36d73e2..974a7ed5 100644 --- a/internal/platform/implementation/apple/platform.mm +++ b/internal/platform/implementation/apple/platform.mm @@ -20,6 +20,7 @@ #include #include "absl/strings/string_view.h" +#include "internal/base/files.h" #include "internal/platform/implementation/apple/awdl.h" #include "internal/platform/implementation/apple/atomic_boolean.h" #include "internal/platform/implementation/apple/atomic_uint32.h" @@ -27,6 +28,7 @@ #include "internal/platform/implementation/apple/condition_variable.h" #include "internal/platform/implementation/apple/count_down_latch.h" #include "internal/platform/implementation/apple/device_info.h" +#import "internal/platform/implementation/apple/Log/GNCLogger.h" #import "internal/platform/implementation/apple/multi_thread_executor.h" #include "internal/platform/implementation/apple/mutex.h" #include "internal/platform/implementation/apple/preferences_manager.h" @@ -134,6 +136,15 @@ std::unique_ptr ImplementationPlatform::CreateOutputFile(PayloadId p } std::unique_ptr ImplementationPlatform::CreateOutputFile(const std::string& file_path) { + FilePath path{file_path}; + FilePath folder_path = path.GetParentPath(); + // Verifies that a path is a valid directory. + if (!Files::DirectoryExists(folder_path)) { + if (!Files::CreateDirectories(folder_path)) { + GNCLoggerError(@"Failed to create directory: %@", @(folder_path.ToString().c_str())); + return nullptr; + } + } return shared::IOFile::CreateOutputFile(file_path); }