xref: /aosp_15_r20/external/executorch/backends/qualcomm/runtime/Utils.cpp (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1*523fa7a6SAndroid Build Coastguard Worker /*
2*523fa7a6SAndroid Build Coastguard Worker  * Copyright (c) Qualcomm Innovation Center, Inc.
3*523fa7a6SAndroid Build Coastguard Worker  * All rights reserved.
4*523fa7a6SAndroid Build Coastguard Worker  *
5*523fa7a6SAndroid Build Coastguard Worker  * This source code is licensed under the BSD-style license found in the
6*523fa7a6SAndroid Build Coastguard Worker  * LICENSE file in the root directory of this source tree.
7*523fa7a6SAndroid Build Coastguard Worker  */
8*523fa7a6SAndroid Build Coastguard Worker #include <executorch/backends/qualcomm/runtime/Logging.h>
9*523fa7a6SAndroid Build Coastguard Worker #include <executorch/backends/qualcomm/runtime/Utils.h>
10*523fa7a6SAndroid Build Coastguard Worker #include <sys/stat.h>
11*523fa7a6SAndroid Build Coastguard Worker namespace executorch {
12*523fa7a6SAndroid Build Coastguard Worker namespace backends {
13*523fa7a6SAndroid Build Coastguard Worker namespace qnn {
14*523fa7a6SAndroid Build Coastguard Worker 
CreateDirectory(const std::string & path)15*523fa7a6SAndroid Build Coastguard Worker void CreateDirectory(const std::string& path) {
16*523fa7a6SAndroid Build Coastguard Worker   // Create any recursive directory
17*523fa7a6SAndroid Build Coastguard Worker   if (path.empty()) {
18*523fa7a6SAndroid Build Coastguard Worker     QNN_EXECUTORCH_LOG_ERROR("Create folder shouldn't be empty");
19*523fa7a6SAndroid Build Coastguard Worker     return;
20*523fa7a6SAndroid Build Coastguard Worker   }
21*523fa7a6SAndroid Build Coastguard Worker   std::size_t pos = path.find_last_of('/');
22*523fa7a6SAndroid Build Coastguard Worker   std::string subdir = (std::string::npos == pos) ? "" : path.substr(0, pos);
23*523fa7a6SAndroid Build Coastguard Worker   if (subdir.empty() || subdir == "." || subdir == "..") {
24*523fa7a6SAndroid Build Coastguard Worker     return;
25*523fa7a6SAndroid Build Coastguard Worker   }
26*523fa7a6SAndroid Build Coastguard Worker   CreateDirectory(subdir);
27*523fa7a6SAndroid Build Coastguard Worker   int mkdir_err = mkdir(subdir.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
28*523fa7a6SAndroid Build Coastguard Worker   if (mkdir_err != 0 && errno != EEXIST) {
29*523fa7a6SAndroid Build Coastguard Worker     std::string err_msg = "Failed to create " + subdir + " folder\n";
30*523fa7a6SAndroid Build Coastguard Worker     QNN_EXECUTORCH_LOG_ERROR(err_msg.c_str());
31*523fa7a6SAndroid Build Coastguard Worker   }
32*523fa7a6SAndroid Build Coastguard Worker }
33*523fa7a6SAndroid Build Coastguard Worker 
34*523fa7a6SAndroid Build Coastguard Worker } // namespace qnn
35*523fa7a6SAndroid Build Coastguard Worker } // namespace backends
36*523fa7a6SAndroid Build Coastguard Worker } // namespace executorch
37