From 1a13d35406f04476a62989c4e003c89d8d826656 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Mon, 11 Oct 2010 15:07:26 +0000 Subject: 2010-10-12 Tatsuhiro Tsujikawa Rewritten File::mkdirs() * src/File.cc --- src/File.cc | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) (limited to 'src/File.cc') 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 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::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; } } -- cgit