summaryrefslogtreecommitdiff
path: root/src/File.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-10-11 15:07:26 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-10-11 15:07:26 +0000
commit1a13d35406f04476a62989c4e003c89d8d826656 (patch)
tree7ad9faae84f07736bbb9efe31408801ff891b532 /src/File.cc
parent119b9a84486bb2f93f792f9d2864b749290cc9d2 (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.cc29
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;
}
}