diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-10-11 15:07:26 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-10-11 15:07:26 +0000 |
| commit | 1a13d35406f04476a62989c4e003c89d8d826656 (patch) | |
| tree | 7ad9faae84f07736bbb9efe31408801ff891b532 /src/File.cc | |
| parent | 119b9a84486bb2f93f792f9d2864b749290cc9d2 (diff) | |
2010-10-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Rewritten File::mkdirs()
* src/File.cc
Diffstat (limited to 'src/File.cc')
| -rw-r--r-- | src/File.cc | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/src/File.cc b/src/File.cc index ee9f13cd..6a522589 100644 --- a/src/File.cc +++ b/src/File.cc @@ -105,23 +105,22 @@ bool File::mkdirs() { if(isDir()) { return false; } - std::vector<std::string> dirs; - util::split(name_, std::back_inserter(dirs), "/"); - if(!dirs.size()) { - return true; - } - - std::string accDir; - if(util::startsWith(name_, A2STR::SLASH_C)) { - accDir = A2STR::SLASH_C; - } - for(std::vector<std::string>::const_iterator itr = dirs.begin(), - eoi = dirs.end(); itr != eoi; ++itr, accDir += A2STR::SLASH_C) { - accDir += *itr; - if(File(accDir).isDir()) { + for(std::string::iterator i = name_.begin(), eoi = name_.end(); + i != eoi;) { + std::string::iterator j = std::find(i, eoi, '/'); + if(std::distance(i, j) == 0) { + ++i; + continue; + } + i = j; + if(j != eoi) { + ++i; + } + std::string dir = std::string(name_.begin(), j); + if(File(dir).isDir()) { continue; } - if(a2mkdir(accDir.c_str(), DIR_OPEN_MODE) == -1) { + if(a2mkdir(dir.c_str(), DIR_OPEN_MODE) == -1) { return false; } } |
