Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2008-02-13 16:55:22 +0300
committerCampbell Barton <ideasman42@gmail.com>2008-02-13 16:55:22 +0300
commitbc9848f7e67c3e695403179f8bcdb78b0e5764a3 (patch)
tree18561a90fa2660b5227a0c73c1d519d8a58cfab3 /source/blender
parente26b5aa9c47fbc604c23efe9100940ff68d8ddbe (diff)
Added a global string to be used for the tempdir. since the user preference is not loaded in background mode and the user preference is not validated and has no fallback.
'btempdir' is set with BLI_where_is_temp() - This tries to use U.tempdir but falls back to $TEMP or /tmp/
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/bad_level_call_stubs/stubs.c1
-rw-r--r--source/blender/blenkernel/intern/blender.c4
-rw-r--r--source/blender/blenkernel/intern/pointcache.c10
-rw-r--r--source/blender/blenlib/BLI_blenlib.h15
-rw-r--r--source/blender/blenlib/intern/fileops.c16
-rw-r--r--source/blender/blenlib/intern/util.c27
-rw-r--r--source/blender/python/BPY_extern.h1
-rw-r--r--source/blender/python/api2_2x/Blender.c1
-rw-r--r--source/blender/render/intern/source/pipeline.c8
-rw-r--r--source/blender/src/fluidsim.c4
-rw-r--r--source/blender/src/header_info.c2
-rw-r--r--source/blender/src/headerbuttons.c2
-rw-r--r--source/blender/src/space.c14
-rw-r--r--source/blender/src/usiblender.c10
14 files changed, 87 insertions, 28 deletions
diff --git a/source/blender/blenkernel/bad_level_call_stubs/stubs.c b/source/blender/blenkernel/bad_level_call_stubs/stubs.c
index 1bec1775234..e7a8fd5278d 100644
--- a/source/blender/blenkernel/bad_level_call_stubs/stubs.c
+++ b/source/blender/blenkernel/bad_level_call_stubs/stubs.c
@@ -49,6 +49,7 @@
int winqueue_break= 0;
char bprogname[1];
+char btempdir[1];
struct IpoCurve;
struct FluidsimSettings;
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index 224d6af6336..8574cf00e8d 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -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) {
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index 13f5cb26e94..7d3b6ca0569 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -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);
diff --git a/source/blender/blenlib/BLI_blenlib.h b/source/blender/blenlib/BLI_blenlib.h
index 4fc4241e6dc..39b679144d5 100644
--- a/source/blender/blenlib/BLI_blenlib.h
+++ b/source/blender/blenlib/BLI_blenlib.h
@@ -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;
@@ -258,6 +259,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
*
* @return path to application bundle
@@ -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 */
/**
diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c
index 2ee42d16176..fa76f2023eb 100644
--- a/source/blender/blenlib/intern/fileops.c
+++ b/source/blender/blenlib/intern/fileops.c
@@ -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
diff --git a/source/blender/blenlib/intern/util.c b/source/blender/blenlib/intern/util.c
index d0f58a50eb9..f849b022e6e 100644
--- a/source/blender/blenlib/intern/util.c
+++ b/source/blender/blenlib/intern/util.c
@@ -44,8 +44,10 @@
#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
diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h
index e4986727ab1..28c4c2f55ff 100644
--- a/source/blender/python/BPY_extern.h
+++ b/source/blender/python/BPY_extern.h
@@ -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 */
diff --git a/source/blender/python/api2_2x/Blender.c b/source/blender/python/api2_2x/Blender.c
index 46f7b9da79f..a5a740d3b90 100644
--- a/source/blender/python/api2_2x/Blender.c
+++ b/source/blender/python/api2_2x/Blender.c
@@ -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 );
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index f1e88540935..9794ed89afc 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -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)
diff --git a/source/blender/src/fluidsim.c b/source/blender/src/fluidsim.c
index e9609d40570..a6620cef927 100644
--- a/source/blender/src/fluidsim.c
+++ b/source/blender/src/fluidsim.c
@@ -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;
diff --git a/source/blender/src/header_info.c b/source/blender/src/header_info.c
index 1a6e7a0b77e..08895fe941a 100644
--- a/source/blender/src/header_info.c
+++ b/source/blender/src/header_info.c
@@ -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
diff --git a/source/blender/src/headerbuttons.c b/source/blender/src/headerbuttons.c
index dd3d6d9b33b..d6e0b054a8b 100644
--- a/source/blender/src/headerbuttons.c
+++ b/source/blender/src/headerbuttons.c
@@ -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);
}
diff --git a/source/blender/src/space.c b/source/blender/src/space.c
index e4f4d24ed23..1f450b09614 100644
--- a/source/blender/src/space.c
+++ b/source/blender/src/space.c
@@ -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");
diff --git a/source/blender/src/usiblender.c b/source/blender/src/usiblender.c
index 86c2d0c0f68..069dcce2375 100644
--- a/source/blender/src/usiblender.c
+++ b/source/blender/src/usiblender.c
@@ -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);