]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/filesys.cpp
GUIScene: Clear depth buffer + replace deprecated clearZBuffer calls
[dragonfireclient.git] / src / filesys.cpp
index be61ba430465d987150d1a6b3294dc9fccae4bb7..5ffb4506ea3c8bb50dc774b3e9db1e930f1748ae 100644 (file)
@@ -27,9 +27,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "log.h"
 #include "config.h"
 #include "porting.h"
-#ifdef __ANDROID__
-#include "settings.h" // For g_settings
-#endif
 
 namespace fs
 {
@@ -295,27 +292,26 @@ bool RecursiveDelete(const std::string &path)
 
        infostream<<"Removing \""<<path<<"\""<<std::endl;
 
-       //return false;
-
        pid_t child_pid = fork();
 
        if(child_pid == 0)
        {
                // Child
-               char argv_data[3][10000];
-               strcpy(argv_data[0], "/bin/rm");
-               strcpy(argv_data[1], "-rf");
-               strncpy(argv_data[2], path.c_str(), 10000);
-               char *argv[4];
-               argv[0] = argv_data[0];
-               argv[1] = argv_data[1];
-               argv[2] = argv_data[2];
-               argv[3] = NULL;
+               const char *argv[4] = {
+#ifdef __ANDROID__
+                       "/system/bin/rm",
+#else
+                       "/bin/rm",
+#endif
+                       "-rf",
+                       path.c_str(),
+                       NULL
+               };
 
                verbosestream<<"Executing '"<<argv[0]<<"' '"<<argv[1]<<"' '"
                                <<argv[2]<<"'"<<std::endl;
 
-               execv(argv[0], argv);
+               execv(argv[0], const_cast<char**>(argv));
 
                // Execv shouldn't return. Failed.
                _exit(1);
@@ -327,7 +323,6 @@ bool RecursiveDelete(const std::string &path)
                pid_t tpid;
                do{
                        tpid = wait(&child_status);
-                       //if(tpid != child_pid) process_terminated(tpid);
                }while(tpid != child_pid);
                return (child_status == 0);
        }
@@ -361,8 +356,9 @@ std::string TempPath()
                compatible with lua's os.tmpname which under the default
                configuration hardcodes mkstemp("/tmp/lua_XXXXXX").
        */
+
 #ifdef __ANDROID__
-       return g_settings->get("TMPFolder");
+       return porting::path_cache;
 #else
        return DIR_DELIM "tmp";
 #endif
@@ -403,21 +399,6 @@ void GetRecursiveSubPaths(const std::string &path,
        }
 }
 
-bool DeletePaths(const std::vector<std::string> &paths)
-{
-       bool success = true;
-       // Go backwards to succesfully delete the output of GetRecursiveSubPaths
-       for(int i=paths.size()-1; i>=0; i--){
-               const std::string &path = paths[i];
-               bool did = DeleteSingleFileOrEmptyDirectory(path);
-               if(!did){
-                       errorstream<<"Failed to delete "<<path<<std::endl;
-                       success = false;
-               }
-       }
-       return success;
-}
-
 bool RecursiveDeleteContent(const std::string &path)
 {
        infostream<<"Removing content of \""<<path<<"\""<<std::endl;
@@ -687,6 +668,12 @@ std::string AbsolutePath(const std::string &path)
 const char *GetFilenameFromPath(const char *path)
 {
        const char *filename = strrchr(path, DIR_DELIM_CHAR);
+       // Consistent with IsDirDelimiter this function handles '/' too
+       if (DIR_DELIM_CHAR != '/') {
+               const char *tmp = strrchr(path, '/');
+               if (tmp && tmp > filename)
+                       filename = tmp;
+       }
        return filename ? filename + 1 : path;
 }
 
@@ -740,6 +727,21 @@ bool safeWriteToFile(const std::string &path, const std::string &content)
        return true;
 }
 
+bool ReadFile(const std::string &path, std::string &out)
+{
+       std::ifstream is(path, std::ios::binary | std::ios::ate);
+       if (!is.good()) {
+               return false;
+       }
+
+       auto size = is.tellg();
+       out.resize(size);
+       is.seekg(0);
+       is.read(&out[0], size);
+
+       return true;
+}
+
 bool Rename(const std::string &from, const std::string &to)
 {
        return rename(from.c_str(), to.c_str()) == 0;