From: <m97...@us...> - 2006-09-25 17:37:34
|
Revision: 5692 http://svn.sourceforge.net/openmsx/?rev=5692&view=rev Author: m9710797 Date: 2006-09-25 10:37:20 -0700 (Mon, 25 Sep 2006) Log Message: ----------- added support for (recursive) subdirectories in RomPool Modified Paths: -------------- openmsx/trunk/ChangeLog openmsx/trunk/src/file/FilePool.cc openmsx/trunk/src/file/FilePool.hh Modified: openmsx/trunk/ChangeLog =================================================================== --- openmsx/trunk/ChangeLog 2006-09-24 15:41:20 UTC (rev 5691) +++ openmsx/trunk/ChangeLog 2006-09-25 17:37:20 UTC (rev 5692) @@ -1,5 +1,8 @@ $Id$ +2006-09-25 Wouter Vermaelen <wou...@sc...> + * Added support for (recursive) subdirectories in RomPool + 2006-09-23 Wouter Vermaelen <wou...@sc...> * Implemented PlayBall mapper type * Only flush DiskManipulator FAT cache when there were actual writes: Modified: openmsx/trunk/src/file/FilePool.cc =================================================================== --- openmsx/trunk/src/file/FilePool.cc 2006-09-24 15:41:20 UTC (rev 5691) +++ openmsx/trunk/src/file/FilePool.cc 2006-09-25 17:37:20 UTC (rev 5692) @@ -1,16 +1,16 @@ // $Id$ -#include <fstream> -#include <cassert> -#include "sha1.hh" -#include "SettingsConfig.hh" +#include "FilePool.hh" #include "File.hh" #include "FileException.hh" #include "FileContext.hh" #include "FileOperations.hh" -#include "FilePool.hh" #include "ReadDir.hh" #include "Date.hh" +#include "SettingsConfig.hh" +#include "sha1.hh" +#include <fstream> +#include <cassert> using std::endl; using std::ifstream; @@ -156,51 +156,64 @@ { ReadDir dir(directory); while (dirent* d = dir.getEntry()) { - string filename = directory + '/' + d->d_name; - if (!FileOperations::isRegularFile(filename)) { - continue; + string file = d->d_name; + string path = directory + '/' + file; + string result; + if (FileOperations::isRegularFile(path)) { + result = scanFile(sha1sum, path); + } else if (FileOperations::isDirectory(path)) { + if ((file != ".") && (file != "..")) { + result = scanDirectory(sha1sum, path); + } } - Pool::iterator it = findInDatabase(filename); - if (it == pool.end()) { - // not in pool - try { + if (!result.empty()) { + return result; + } + } + return string(); +} + +string FilePool::scanFile(const string& sha1sum, const string& filename) +{ + Pool::iterator it = findInDatabase(filename); + if (it == pool.end()) { + // not in pool + try { + time_t time; + string sum; + calcSha1sum(filename, time, sum); + pool.insert(make_pair(sum, make_pair(time, filename))); + if (sum == sha1sum) { + return filename; + } + } catch (FileException& e) { + // ignore + } + } else { + // already in pool + assert(filename == it->second.second); + try { + File file(filename); + if (file.getModificationDate() == it->second.first) { + // db is still up to date + if (it->first == sha1sum) { + return filename; + } + } else { + // db outdated time_t time; string sum; calcSha1sum(filename, time, sum); + pool.erase(it); pool.insert(make_pair(sum, - make_pair(time, filename))); + make_pair(time, filename))); if (sum == sha1sum) { return filename; } - } catch (FileException& e) { - // ignore } - } else { - // already in pool - assert(filename == it->second.second); - try { - File file(filename); - if (file.getModificationDate() == it->second.first) { - // db is still up to date - if (it->first == sha1sum) { - return filename; - } - } else { - // db outdated - time_t time; - string sum; - calcSha1sum(filename, time, sum); - pool.erase(it); - pool.insert(make_pair(sum, - make_pair(time, filename))); - if (sum == sha1sum) { - return filename; - } - } - } catch (FileException& e) { - // error reading file, remove from db - pool.erase(it); - } + } catch (FileException& e) { + // error reading file, remove from db + pool.erase(it); } } return string(); Modified: openmsx/trunk/src/file/FilePool.hh =================================================================== --- openmsx/trunk/src/file/FilePool.hh 2006-09-24 15:41:20 UTC (rev 5691) +++ openmsx/trunk/src/file/FilePool.hh 2006-09-25 17:37:20 UTC (rev 5692) @@ -30,6 +30,8 @@ std::string getFromPool(const std::string& sha1sum); std::string scanDirectory(const std::string& sha1sum, const std::string& directory); + std::string scanFile(const std::string& sha1sum, + const std::string& filename); Pool::iterator findInDatabase(const std::string& filename); Pool pool; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |