diff options
author | Ira Rice <irarice@gmail.com> | 2009-01-19 12:04:12 -0700 |
---|---|---|
committer | Ira Rice <irarice@gmail.com> | 2009-01-19 12:04:12 -0700 |
commit | 2b5947171bfa4cdad73bb87d7195408fca4e685a (patch) | |
tree | 18031046af095edd65b5f4b2c61c944b68767bb6 /src/main.cpp | |
parent | fa007dafa2c499425e7112095cbda9c2ff5ea20c (diff) | |
download | mana-2b5947171bfa4cdad73bb87d7195408fca4e685a.tar.gz mana-2b5947171bfa4cdad73bb87d7195408fca4e685a.tar.bz2 mana-2b5947171bfa4cdad73bb87d7195408fca4e685a.tar.xz mana-2b5947171bfa4cdad73bb87d7195408fca4e685a.zip |
Fixed a directory creation error reported by our Windows users (why
doesn't PhysFS handle this properly?!?) when there's already an update
directory. Also fixed the recorder class so that it's fixed on Windows
as well.
Signed-off-by: Ira Rice <irarice@gmail.com>
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/src/main.cpp b/src/main.cpp index ea120fc4..a0066c66 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -101,7 +101,8 @@ #include <sys/stat.h> #endif -namespace { +namespace +{ Window *setupWindow = 0; struct SetupListener : public gcn::ActionListener @@ -186,7 +187,8 @@ void setUpdatesDir() std::stringstream updates; // If updatesHost is currently empty, fill it from config file - if (updateHost.empty()) { + if (updateHost.empty()) + { updateHost = config.getValue("updatehost", "http://www.aethyra.org/updates"); } @@ -198,31 +200,59 @@ void setUpdatesDir() // Parse out any "http://" or "ftp://", and set the updates directory size_t pos; pos = updateHost.find("://"); - if (pos != updateHost.npos) { - if (pos + 3 < updateHost.length()) { + if (pos != updateHost.npos) + { + if (pos + 3 < updateHost.length()) + { updates << "updates/" << updateHost.substr(pos + 3) << "/" << loginData.port; updatesDir = updates.str(); - } else { + } + else + { logger->log(_("Error: Invalid update host: %s"), updateHost.c_str()); errorMessage = _("Invalid update host: ") + updateHost; state = ERROR_STATE; } - } else { + } + else + { logger->log(_("Warning: no protocol was specified for the update host")); - updates << "updates/" << updateHost << "/" << loginData.port; + updates << "updates/" << updateHost << "/" << loginData.port; updatesDir = updates.str(); } ResourceManager *resman = ResourceManager::getInstance(); // Verify that the updates directory exists. Create if necessary. - if (!resman->isDirectory("/" + updatesDir)) { - if (!resman->mkdir("/" + updatesDir)) { + if (!resman->isDirectory("/" + updatesDir)) + { + if (!resman->mkdir("/" + updatesDir)) + { +#if defined WIN32 + std::string newDir = homeDir + "\\" + updatesDir; + std::string::size_type loc = newDir.find("/", 0); + + while (loc != std::string::npos) + { + newDir.replace(loc, 1, "\\"); + loc = newDir.find("/", loc); + } + + if (!CreateDirectory(newDir.c_str(), 0) && + GetLastError() != ERROR_ALREADY_EXISTS) + { + logger->log(_("Error: %s can't be made, but doesn't exist!"), + newDir.c_str()); + errorMessage = _("Error creating updates directory!"); + state = ERROR_STATE; + } +#else logger->log(_("Error: %s/%s can't be made, but doesn't exist!"), homeDir.c_str(), updatesDir.c_str()); errorMessage = _("Error creating updates directory!"); state = ERROR_STATE; +#endif } } } |