]> git.jsancho.org Git - lugaru.git/commitdiff
Dirs are now created if missing under GNU/Linux
authorCôme Chilliet <come@chilliet.eu>
Fri, 2 Dec 2016 11:41:32 +0000 (18:41 +0700)
committerCôme Chilliet <come@chilliet.eu>
Fri, 2 Dec 2016 11:41:32 +0000 (18:41 +0700)
Source/Account.cpp
Source/GameTick.cpp
Source/Settings.cpp
Source/Utils/Folders.cpp
Source/Utils/Folders.h

index f650330a0f87bcbb3d9c456eb03488bf3fca5d88..b93eff19ad5978f91628d4885a43c70a879c31be 100644 (file)
@@ -115,6 +115,7 @@ Account* Account::loadFile(string filename)
     FILE *tfile;
     int numaccounts;
     int accountactive;
+    errno = 0;
 
     tfile = fopen(filename.c_str(), "rb" );
 
@@ -194,6 +195,7 @@ Account* Account::loadFile(string filename)
 void Account::saveFile(string filename, Account* accountactive)
 {
     FILE *tfile;
+    errno = 0;
 
     tfile = fopen(filename.c_str(), "wb" );
     if (tfile) {
index 8646111176e950a827c514798411ad1fa4c6ae86..e7f6c50e1d6716ee4c7f6132461c47052c32e30b 100644 (file)
@@ -746,11 +746,11 @@ void LoadCampaign()
 
 vector<string> ListCampaigns()
 {
+    errno = 0;
     DIR *campaigns = opendir(Folders::getResourcePath("Campaigns").c_str());
     struct dirent *campaign = NULL;
     if (!campaigns) {
-        perror("Problem while loading campaigns");
-        cerr << "campaign folder was : " << Folders::getResourcePath("Campaigns") << endl;
+        perror(("Problem while loading campaigns from " + Folders::getResourcePath("Campaigns")).c_str());
         exit(EXIT_FAILURE);
     }
     vector<string> campaignNames;
@@ -818,6 +818,7 @@ void Game::Loadlevel(const std::string& name)
 
     int mapvers;
     FILE *tfile;
+    errno = 0;
     tfile = fopen( Folders::getResourcePath("Maps/"+name).c_str(), "rb" );
     if (tfile) {
         pause_sound(stream_firesound);
index 2ebfbfff3498633b73a23aa70bd0e1b1a5f57e95..42d5d352c3a83dbe1b4ae027ca4dea311a8c1926 100644 (file)
@@ -80,6 +80,7 @@ void SaveSettings()
         newscreenheight = screenheight;
     if (newscreenheight < 0)
         newscreenheight = screenheight;
+    errno = 0;
     ofstream opstream(Folders::getConfigFilePath());
     if (opstream.fail()) {
         perror(("Couldn't save config file " + Folders::getConfigFilePath()).c_str());
@@ -172,6 +173,7 @@ void SaveSettings()
 
 bool LoadSettings()
 {
+    errno = 0;
     ifstream ipstream(Folders::getConfigFilePath(), std::ios::in);
     if ( ipstream.fail() ) {
         perror(("Couldn't read config file " + Folders::getConfigFilePath()).c_str());
index 7e08959fadabbae35eedb00e9bcff4f2750cbb27..0a36e5c86e1906392d2359db9e97fda07f74cc53 100644 (file)
@@ -20,13 +20,15 @@ along with Lugaru.  If not, see <http://www.gnu.org/licenses/>.
 
 #include "Folders.h"
 #include <cstring>
+#include <sys/stat.h>
 
 const std::string Folders::dataDir = DATADIR;
 
 std::string Folders::getScreenshotDir()
 {
-    /* TODO - create folder if missing */
-    return getUserDataPath() + "/Screenshots";
+    std::string screenshotDir = getUserDataPath() + "/Screenshots";
+    makeDirectory(screenshotDir);
+    return screenshotDir;
 }
 
 std::string Folders::getResourcePath(std::string filepath)
@@ -36,12 +38,16 @@ std::string Folders::getResourcePath(std::string filepath)
 
 std::string Folders::getUserDataPath()
 {
-    return getGenericDirectory("XDG_DATA_HOME", ".local/share");
+    std::string userDataPath = getGenericDirectory("XDG_DATA_HOME", ".local/share");
+    makeDirectory(userDataPath);
+    return userDataPath;
 }
 
 std::string Folders::getConfigFilePath()
 {
-    return getGenericDirectory("XDG_CONFIG_HOME", ".config") + "/config.txt";
+    std::string configFolder = getGenericDirectory("XDG_CONFIG_HOME", ".config");
+    makeDirectory(configFolder);
+    return configFolder + "/config.txt";
 }
 
 /* Generic code for XDG ENVVAR test and fallback */
@@ -55,8 +61,20 @@ std::string Folders::getGenericDirectory(const char* ENVVAR, const std::string f
         if((path != NULL) && (strlen(path) != 0)) {
             ret = std::string(path) + '/' + fallback + "/lugaru";
         } else {
-            ret = "";
+            ret = ".";
         }
     }
     return ret;
 }
+
+bool Folders::makeDirectory(std::string path) {
+    errno = 0;
+    int status = mkdir(path.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
+    if (status == 0) {
+        return true;
+    } else if(errno == EEXIST) {
+        return true;
+    } else {
+        return false;
+    }
+}
index 1dd46fbf2c1440a093ea1bf034fd93162646c1e6..0343b6c2d4923578a436cae24a7a08b9947270d0 100644 (file)
@@ -46,6 +46,7 @@ public:
 
 private:
     static std::string getGenericDirectory(const char* ENVVAR, const std::string fallback);
+    static bool makeDirectory(std::string path);
 };
 
 #endif /* _FOLDERS_H_ */