2010-10-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Rewritten File::mkdirs()
	* src/File.cc
pull/1/head
Tatsuhiro Tsujikawa 2010-10-11 15:07:26 +00:00
parent 119b9a8448
commit 1a13d35406
2 changed files with 19 additions and 15 deletions

View File

@ -1,3 +1,8 @@
2010-10-12 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Rewritten File::mkdirs()
* src/File.cc
2010-10-11 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Use RFC1123 date format in debug log of MDTM response and

View File

@ -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;
}
if(a2mkdir(accDir.c_str(), DIR_OPEN_MODE) == -1) {
i = j;
if(j != eoi) {
++i;
}
std::string dir = std::string(name_.begin(), j);
if(File(dir).isDir()) {
continue;
}
if(a2mkdir(dir.c_str(), DIR_OPEN_MODE) == -1) {
return false;
}
}