diff options
author | big biff <bigbiff@teamw.in> | 2019-01-19 17:02:53 +0100 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.omnirom.org> | 2019-01-19 17:02:53 +0100 |
commit | c757a6647764a4cf5b308a353c09c2bc38733589 (patch) | |
tree | d4a65909dfa5b5ba4dcfb6bc41254e4f91e5e575 | |
parent | toybox: create getprop symlink on SDK 27 (diff) | |
parent | Revert "updater: Remove dead make_parents()." (diff) | |
download | android_bootable_recovery-c757a6647764a4cf5b308a353c09c2bc38733589.tar android_bootable_recovery-c757a6647764a4cf5b308a353c09c2bc38733589.tar.gz android_bootable_recovery-c757a6647764a4cf5b308a353c09c2bc38733589.tar.bz2 android_bootable_recovery-c757a6647764a4cf5b308a353c09c2bc38733589.tar.lz android_bootable_recovery-c757a6647764a4cf5b308a353c09c2bc38733589.tar.xz android_bootable_recovery-c757a6647764a4cf5b308a353c09c2bc38733589.tar.zst android_bootable_recovery-c757a6647764a4cf5b308a353c09c2bc38733589.zip |
-rw-r--r-- | updater/install.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/updater/install.cpp b/updater/install.cpp index 741d97014..2266127f2 100644 --- a/updater/install.cpp +++ b/updater/install.cpp @@ -97,6 +97,34 @@ static void uiPrint(State* state, const std::string& buffer) { LOG(INFO) << buffer; } +static bool is_dir(const std::string& dirpath) { + struct stat st; + return stat(dirpath.c_str(), &st) == 0 && S_ISDIR(st.st_mode); +} + +// Create all parent directories of name, if necessary. +static bool make_parents(const std::string& name) { + size_t prev_end = 0; + while (prev_end < name.size()) { + size_t next_end = name.find('/', prev_end + 1); + if (next_end == std::string::npos) { + break; + } + std::string dir_path = name.substr(0, next_end); + if (!is_dir(dir_path)) { + int result = mkdir(dir_path.c_str(), 0700); + if (result != 0) { + PLOG(ERROR) << "failed to mkdir " << dir_path << " when make parents for " << name; + return false; + } + + LOG(INFO) << "created [" << dir_path << "]"; + } + prev_end = next_end; + } + return true; +} + void uiPrintf(State* _Nonnull state, const char* _Nonnull format, ...) { std::string error_msg; |