Added a global string to be used for the tempdir. since the user preference is not...
authorCampbell Barton <ideasman42@gmail.com>
Wed, 13 Feb 2008 13:55:22 +0000 (13:55 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 13 Feb 2008 13:55:22 +0000 (13:55 +0000)
'btempdir' is set with BLI_where_is_temp() - This tries to use U.tempdir but falls back to $TEMP or /tmp/

16 files changed:
source/blender/blenkernel/bad_level_call_stubs/stubs.c
source/blender/blenkernel/intern/blender.c
source/blender/blenkernel/intern/pointcache.c
source/blender/blenlib/BLI_blenlib.h
source/blender/blenlib/intern/fileops.c
source/blender/blenlib/intern/util.c
source/blender/python/BPY_extern.h
source/blender/python/api2_2x/Blender.c
source/blender/render/intern/source/pipeline.c
source/blender/src/fluidsim.c
source/blender/src/header_info.c
source/blender/src/headerbuttons.c
source/blender/src/space.c
source/blender/src/usiblender.c
source/creator/creator.c
source/gameengine/GamePlayer/ghost/GPG_ghost.cpp

index 1bec177523481f9e80ee7e8ebd3238422f5af180..e7a8fd5278da5aa3e4a66492cb1133a39e0ebbe2 100644 (file)
@@ -49,6 +49,7 @@
 int winqueue_break= 0;
 
 char bprogname[1];
+char btempdir[1];
 
 struct IpoCurve;
 struct FluidsimSettings;
index 224d6af6336dd72f7a8ee2b208308d3c01d2b6bb..8574cf00e8dba0b0a38b26d62ae1e221b8923b77 100644 (file)
@@ -605,7 +605,7 @@ void BKE_write_undo(char *name)
                counter= counter % U.undosteps; 
        
                sprintf(numstr, "%d.blend", counter);
-               BLI_make_file_string("/", tstr, U.tempdir, numstr);
+               BLI_make_file_string("/", tstr, btempdir, numstr);
        
                success= BLO_write_file(tstr, G.fileflags, &err);
                
@@ -716,7 +716,7 @@ void BKE_undo_save_quit(void)
        /* no undo state to save */
        if(undobase.first==undobase.last) return;
                
-       BLI_make_file_string("/", str, U.tempdir, "quit.blend");
+       BLI_make_file_string("/", str, btempdir, "quit.blend");
 
        file = open(str,O_BINARY+O_WRONLY+O_CREAT+O_TRUNC, 0666);
        if(file == -1) {
index 13f5cb26e942028919ae3fbfecf833149bbc8366..7d3b6ca0569e30a78a7fe6671c1a432493e60921 100644 (file)
@@ -51,9 +51,6 @@
   #include "BLI_winstuff.h"
 #endif
 
-/* for U.tempdir */
-#include "DNA_userdef_types.h"
-
 
 /*     Takes an Object ID and returns a unique name
        - id: object id
@@ -79,9 +76,8 @@ static int ptcache_path(char *filename)
                return strlen(filename);
        } else {
                /* use the temp path. this is weak but better then not using point cache at all */
-               if (U.tempdir[0] != '\0' && BLI_exists(U.tempdir)) {
-                       return sprintf(filename, "%s/"PTCACHE_PATH"untitled/", U.tempdir);
-               }
+               /* btempdir is assumed to exist and ALWAYS has a trailing slash */
+               return sprintf(filename, "%s"PTCACHE_PATH"untitled/", btempdir);
        }
        return -1;
 }
@@ -100,7 +96,7 @@ int BKE_ptcache_id_filename(struct ID *id, char *filename, int cfra, int stack_i
        if (do_path) {
                len = ptcache_path(filename);
                if (len==-1)
-                       return;
+                       return -1;
                newname += len;
        }
        idname = (id->name+2);
index 4fc4241e6dca94a6b87c10be80efefcafb03fa2b..39b679144d5805a6ce68b8db5298ae2f8f144d59 100644 (file)
@@ -70,7 +70,6 @@
 #include "DNA_listBase.h" 
 
 #include <stdlib.h>
-
 extern ListBase fillfacebase;
 extern ListBase fillvertbase;
 /**
@@ -79,6 +78,8 @@ extern ListBase fillvertbase;
 extern ListBase filledgebase;
 extern int totblock;
 
+extern char btempdir[]; /* creator.c temp dir used instead of U.tempdir, set with BLI_where_is_temp( btempdir, 1 ); */
+
 struct chardesc;
 struct direntry;
 struct rctf;
@@ -257,6 +258,17 @@ void BLI_free_file_lines(struct LinkNode *lines);
         */
 void BLI_where_am_i(char *fullname, const char *name);
 
+       /**
+        * Gets the temp directory when blender first runs.
+        * If the default path is not found, use try $TEMP
+        * 
+        * Also make sure the temp dir has a trailing slash
+        *
+        * @param fullname The full path to the temp directory
+        */
+void BLI_where_is_temp(char *fullname, int usertemp);
+
+
        /**
         * determines the full path to the application bundle on OS X
         *
@@ -300,6 +312,7 @@ int   BLI_delete(char *file, int dir, int recursive);
 int   BLI_move(char *file, char *to);
 int   BLI_touch(const char *file);
 char *BLI_last_slash(const char *string);
+void  BLI_add_slash(char *string);
 
 /* BLI_rct.c */
 /**
index 2ee42d16176b3fbd08dd4227dca7effe0c07c5c7..fa76f2023ebf9a199fdb849ddd807e8936ff8454 100644 (file)
@@ -92,6 +92,22 @@ char *BLI_last_slash(const char *string) {
        else return lfslash;
 }
 
+/* adds a slash if there isnt one there alredy */
+void BLI_add_slash(char *string) {
+       int len = strlen(string);
+#ifdef WIN32
+       if (string[len-1]!='\\') {
+               string[len] = '\\';
+               string[len+1] = '\0';
+       }
+#else
+       if (string[len-1]!='/') {
+               string[len] = '/';
+               string[len+1] = '\0';
+       }
+#endif
+}
+
 /* gzip the file in from and write it to "to". 
  return -1 if zlib fails, -2 if the originating file does not exist
  note: will remove the "from" file
index d0f58a50eb9a1bc70f8d08ccdc66c2890c4feb13..f849b022e6e7bd766ab8e0a3d7d35170e3348a41 100644 (file)
 
 #include "MEM_guardedalloc.h"
 
-#include "BLI_blenlib.h"
 #include "DNA_listBase.h"
+#include "DNA_userdef_types.h"
+
+#include "BLI_blenlib.h"
 #include "BLI_storage.h"
 #include "BLI_storage_types.h"
 #include "BLI_dynamiclist.h"
@@ -1605,6 +1607,29 @@ void BLI_where_am_i(char *fullname, const char *name)
        }
 }
 
+void BLI_where_is_temp(char *fullname, int usertemp)
+{
+       fullname[0] = '\0';
+       
+       if (usertemp && BLI_exists(U.tempdir)) {
+               strcpy(fullname, U.tempdir);
+       }
+       
+       if (fullname[0] == '\0') {
+               char *tmp = getenv("TEMP");
+               if (tmp && BLI_exists(tmp)) {
+                       strcpy(fullname, tmp);
+               }
+       }
+       
+       if (fullname[0] == '\0') {
+               strcpy(fullname, "/tmp/");
+       } else {
+               /* add a trailing slash if needed */
+               BLI_add_slash(fullname);
+       }
+}
+
 /* 
  * returns absolute path to the app bundle
  * only useful on OS X 
index e4986727ab1a3dafb05bc07b1e8ca6019706affa..28c4c2f55ff0a9165b33bec9afd0ce72f8995e3e 100644 (file)
@@ -34,6 +34,7 @@
 #define BPY_EXTERN_H
 
 extern char bprogname[];       /* holds a copy of argv[0], from creator.c */
+extern char btempdir[];                /* use this to store a valid temp directory */
 
 struct Text; /* defined in DNA_text_types.h */
 struct ID; /* DNA_ID.h */
index 46f7b9da79f6ff537b1e43a834dce92d01c02ad1..a5a740d3b9045a5f364afb7f79f69986b6ed6976 100644 (file)
@@ -286,6 +286,7 @@ static PyObject *Blender_Set( PyObject * self, PyObject * args )
                if ( !PyArg_Parse( arg , "s" , &dir ))
                        return EXPP_ReturnPyObjError( PyExc_ValueError, "expected a string" );
                BLI_strncpy(U.tempdir, dir, FILE_MAXDIR);
+               BLI_where_is_temp( btempdir, 1 );
        } else if (StringEqual( name , "compressfile" ) ) {
                int value = PyObject_IsTrue( arg );
                
index f1e8854093597ec887b2b96db129fd44f56f8ac2..9794ed89afc66443ded689bdcb7e196fdbe6c461 100644 (file)
@@ -403,8 +403,6 @@ static int passtype_from_name(char *str)
        return 0;
 }
 
-
-
 static void render_unique_exr_name(Render *re, char *str, int sample)
 {
        char di[FILE_MAX], name[FILE_MAXFILE], fi[FILE_MAXFILE];
@@ -417,11 +415,7 @@ static void render_unique_exr_name(Render *re, char *str, int sample)
        else
                sprintf(name, "%s_%s%d.exr", fi, re->scene->id.name+2, sample);
 
-       if(G.background)
-               BLI_make_file_string("/", str, "/tmp/", name);
-       else
-               BLI_make_file_string("/", str, U.tempdir, name);
-               
+       BLI_make_file_string("/", str, btempdir, name);
 }
 
 static void render_layer_add_pass(RenderResult *rr, RenderLayer *rl, int channels, int passtype)
index e9609d4057068a7c58030caa5b5ece5c9be7e5d2..a6620cef9271d21d612a3b43eefbaa0283d41088 100644 (file)
@@ -70,7 +70,6 @@
 #include "BKE_scene.h"
 #include "BKE_object.h"
 #include "BKE_softbody.h"
-#include "BKE_utildefines.h"
 #include "BKE_DerivedMesh.h"
 #include "BKE_ipo.h"
 #include "LBM_fluidsim.h"
@@ -151,6 +150,7 @@ typedef struct {
 /* ********************** fluid sim settings struct functions ********************** */
 
 /* allocates and initializes general main data */
+
 FluidsimSettings *fluidsimSettingsNew(struct Object *srcob)
 {
        //char blendDir[FILE_MAXDIR], blendFile[FILE_MAXFILE];
@@ -189,7 +189,7 @@ FluidsimSettings *fluidsimSettingsNew(struct Object *srcob)
 
        /*  elubie: changed this to default to the same dir as the render output
                to prevent saving to C:\ on Windows */
-       BLI_strncpy(fss->surfdataPath, U.tempdir, FILE_MAX); 
+       BLI_strncpy(fss->surfdataPath, btempdir, FILE_MAX); 
        fss->orgMesh = (Mesh *)srcob->data;
        fss->meshSurface = NULL;
        fss->meshBB = NULL;
index 1a6e7a0b77e7a94588cb77ea5d7c88ad79d3455d..08895fe941ad5a49c3177ed05e42358fc113571f 100644 (file)
@@ -867,7 +867,7 @@ static void do_info_filemenu(void *arg, int event)
                        
                        strcpy(scestr, G.sce);  /* temporal store */
                        save_over = G.save_over;
-                       BLI_make_file_string("/", str, U.tempdir, "quit.blend");
+                       BLI_make_file_string("/", str, btempdir, "quit.blend");
                        retval = BKE_read_file(str, NULL);
                        
                        /*we successfully loaded a blend file, get sure that
index dd3d6d9b33b184ec1a0d327dab5f5bb1ec33004c..d6e0b054a8b91c014930c01975bd1e3d7eebf592 100644 (file)
@@ -569,6 +569,8 @@ static void filesel_u_tempdir(char *name)
        BLI_split_dirfile(name, dir, file);
 
        strcpy(U.tempdir, dir);
+       BLI_where_is_temp( btempdir, 1 );
+       
        allqueue(REDRAWALL, 0);
 }
 
index e4f4d24ed23403540feaccd142196e21f10fbcc3..1f450b0961412575e6263770dc30cbf03c7c9bf7 100644 (file)
@@ -3340,10 +3340,18 @@ static void info_user_themebuts(uiBlock *block, short y1, short y2, short y3, sh
        }
 }
 
+/* setting the temp dir needs to set */
+void eval_utemp_dir_callback(void *dummy1, void *dummy2)
+{
+       if (!BLI_exists(U.tempdir))
+               error("temp directory does not exist, assign a valid directory");
+       BLI_where_is_temp(btempdir, 1);
+}
 
 void drawinfospace(ScrArea *sa, void *spacedata)
 {
        uiBlock *block;
+       uiBut *uibut;
        static short cur_light=0;
        float fac, col[3];
        short xpos, ypos, ypostab,  buth, rspace, dx, y1, y2, y3, y4, y5, y6, y7;
@@ -4225,9 +4233,13 @@ void drawinfospace(ScrArea *sa, void *spacedata)
                uiBlockEndAlign(block);
 
                uiBlockBeginAlign(block);
-               uiDefBut(block, TEX, 0, "Temp: ",
+               uibut = uiDefBut(block, TEX, 0, "Temp: ",
                         (xpos+edgsp+(3*lpref)+(3*midsp)),y1,(lpref-smfileselbut),buth,
                         U.tempdir, 1.0, 63.0, 0, 0, "The directory for storing temporary save files");
+               
+               /* set the btempdir from U.temp */
+               uiButSetFunc(uibut, eval_utemp_dir_callback, NULL, NULL);
+               
                uiDefIconBut(block, BUT, B_TEMPDIRFILESEL, ICON_FILESEL,
                        (xpos+edgsp+(4*lpref)+(3*midsp)-smfileselbut),y1,smfileselbut,buth,
                        0, 0, 0, 0, 0, "Select the default temporary save file location");
index 86c2d0c0f689ae59a033631374dbcc18bda41441..069dcce2375a5a0b59b9b2a3c71c3f3613702b98 100644 (file)
@@ -177,9 +177,7 @@ static void init_userdef_file(void)
        }
        if(U.mixbufsize==0) U.mixbufsize= 2048;
        if (BLI_streq(U.tempdir, "/")) {
-               char *tmp= getenv("TEMP");
-               
-               strcpy(U.tempdir, tmp?tmp:"/tmp/");
+               BLI_where_is_temp(U.tempdir, 0);
        }
        if (U.savetime <= 0) {
                U.savetime = 1;
@@ -646,7 +644,7 @@ static void get_autosave_location(char buf[FILE_MAXDIR+FILE_MAXFILE])
        sprintf(pidstr, "%d.blend", abs(getpid()));
        
 #ifdef WIN32
-       if (!BLI_exists(U.tempdir)) {
+       if (!BLI_exists(btempdir)) {
                BLI_strncpy(subdir, "autosave", sizeof(subdir));
                BLI_make_file_string("/", savedir, BLI_gethome(), subdir);
                
@@ -659,7 +657,7 @@ static void get_autosave_location(char buf[FILE_MAXDIR+FILE_MAXFILE])
        }
 #endif
        
-       BLI_make_file_string("/", buf, U.tempdir, pidstr);
+       BLI_make_file_string("/", buf, btempdir, pidstr);
 }
 
 void BIF_read_autosavefile(void)
@@ -950,7 +948,7 @@ static void delete_autosave(void)
 
        if (BLI_exists(tstr)) {
                char str[FILE_MAXDIR+FILE_MAXFILE];
-               BLI_make_file_string("/", str, U.tempdir, "quit.blend");
+               BLI_make_file_string("/", str, btempdir, "quit.blend");
 
                if(U.uiflag & USER_GLOBALUNDO) BLI_delete(tstr, 0, 0);
                else BLI_rename(tstr, str);
index 3918e29b9bf4ae2843e2faa33e9877d7cce8c5d0..d4a0bb49614a18624446ca73d3f2d8129a77e243 100644 (file)
@@ -128,7 +128,7 @@ extern void winlay_process_events(int wait_for_event);
 extern int pluginapi_force_ref(void);  /* from blenpluginapi:pluginapi.c */
 
 char bprogname[FILE_MAXDIR+FILE_MAXFILE]; /* from blenpluginapi:pluginapi.c */
-
+char btempdir[FILE_MAXDIR+FILE_MAXFILE];
 
 /* Initialise callbacks for the modules that need them */
 void setCallbacks(void); 
@@ -317,7 +317,7 @@ int main(int argc, char **argv)
        // need this.
 
        BLI_where_am_i(bprogname, argv[0]);
-
+       
                /* Hack - force inclusion of the plugin api functions,
                 * see blenpluginapi:pluginapi.c
                 */
@@ -490,12 +490,16 @@ int main(int argc, char **argv)
                 * added note (ton): i removed it altogether
                 */
 
-               BIF_init();
+               BIF_init(); /* loads .B.blend */
+               
+               BLI_where_is_temp( btempdir, 1 ); /* call after loading the .B.blend so we can read U.tempdir */
 
        }
        else {
                BPY_start_python(argc, argv);
                
+               BLI_where_is_temp( btempdir, 0 ); /* call after loading the .B.blend so we can read U.tempdir */
+               
                // (ton) Commented out. I have no idea whats thisfor... will mail around!
                // SYS_WriteCommandLineInt(syshandle,"noaudio",1);
         // audio = 0;
index 23447d3640146daaea20d3c9d8800178e1fa6a6a..0993446c77b62c63686756995a6a2047d6a38a61 100644 (file)
@@ -304,7 +304,6 @@ int main(int argc, char** argv)
 #endif /* __alpha__ */
 #endif /* __linux__ */
        BLI_where_am_i(bprogname, argv[0]);
-       
 #ifdef __APPLE__
     // Can't use Carbon right now because of double defined type ID (In Carbon.h and DNA_ID.h, sigh)
     /*