From 2768012579e5a41554334fc27644bf60b788c9cb Mon Sep 17 00:00:00 2001 From: ac-stef Date: Mon, 19 May 2014 17:01:08 +0200 Subject: [PATCH] fix: allow creating directories without homedir With this fix, ac can also create directories relative to the working directory. This fixes xmaps for users without homedir set. --- source/src/stream.cpp | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/source/src/stream.cpp b/source/src/stream.cpp index 6fc653e1..d05126a2 100644 --- a/source/src/stream.cpp +++ b/source/src/stream.cpp @@ -217,26 +217,22 @@ void addpackagedir(const char *dir) const char *findfile(const char *filename, const char *mode) { static string s; - if(homedir[0]) - { - formatstring(s)("%s%s", homedir, filename); - if(fileexists(s, mode)) return s; - if(mode[0]=='w' || mode[0]=='a') + formatstring(s)("%s%s", homedir, filename); // homedir may be "" + if(fileexists(s, mode)) return s; + if(mode[0]=='w' || mode[0]=='a') + { // create missing directories, if necessary + string dirs; + copystring(dirs, s); + char *dir = strchr(dirs[0]==PATHDIV ? dirs+1 : dirs, PATHDIV); + while(dir) { - string dirs; - copystring(dirs, s); - char *dir = strchr(dirs[0]==PATHDIV ? dirs+1 : dirs, PATHDIV); - while(dir) - { - *dir = '\0'; - if(!fileexists(dirs, "r") && !createdir(dirs)) return s; - *dir = PATHDIV; - dir = strchr(dir+1, PATHDIV); - } - return s; + *dir = '\0'; + if(!fileexists(dirs, "r") && !createdir(dirs)) return s; + *dir = PATHDIV; + dir = strchr(dir+1, PATHDIV); } + return s; } - if(mode[0]=='w' || mode[0]=='a') return filename; loopv(packagedirs) { formatstring(s)("%s%s", packagedirs[i], filename); @@ -332,7 +328,7 @@ bool preparedir(const char *destination) string dir; copystring(dir, parentdir(destination)); vector dirs; - while(!fileexists(dir, "r")) + while(*dir && !fileexists(dir, "r")) { dirs.add(newstring(dir)); copystring(dir, parentdir(dir));