diff options
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/blender.c | 8 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/exotic.c | 41 |
2 files changed, 22 insertions, 27 deletions
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index b782d3a92a9..b218632e8e5 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -346,12 +346,6 @@ void BKE_userdef_free(void) BLI_freelistN(&U.addons); } -/* returns: - 0: no load file - 1: OK - 2: OK, and with new user settings -*/ - int BKE_read_file(bContext *C, const char *dir, ReportList *reports) { BlendFileData *bfd; @@ -459,7 +453,7 @@ static int read_undosave(bContext *C, UndoElem *uel) G.fileflags |= G_FILE_NO_UI; if(UNDO_DISK) - success= BKE_read_file(C, uel->str, NULL); + success= (BKE_read_file(C, uel->str, NULL) != BKE_READ_FILE_FAIL); else success= BKE_read_file_from_memfile(C, &uel->memfile, NULL); diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c index e695c40401a..30cad2b6d2f 100644 --- a/source/blender/blenkernel/intern/exotic.c +++ b/source/blender/blenkernel/intern/exotic.c @@ -74,7 +74,7 @@ #include "BKE_object.h" #include "BKE_material.h" #include "BKE_report.h" - +#include "BKE_exotic.h" #include "BKE_displist.h" #include "BKE_DerivedMesh.h" #include "BKE_curve.h" @@ -458,49 +458,50 @@ int BKE_read_exotic(Scene *scene, const char *name) { int len; gzFile gzfile; - char str[32]; - int *s0 = (int*) str; - int retval = 0; + int head[2]; + int retval; // make sure we're not trying to read a directory.... len= strlen(name); - if (name[len-1] !='/' && name[len-1] != '\\') { + if (ELEM(name[len-1], '/', '\\')) { + retval= BKE_READ_EXOTIC_FAIL_PATH; + } + else { gzfile = gzopen(name,"rb"); - if (NULL == gzfile ) { - //XXX error("Can't open file: %s", name); - retval= -1; - } else { - gzread(gzfile, str, 31); + if (gzfile == NULL) { + retval= BKE_READ_EXOTIC_FAIL_OPEN; + } + else { + len= gzread(gzfile, &head, sizeof(head)); gzclose(gzfile); - if ((*s0 != FORM) && (strncmp(str, "BLEN", 4) != 0) && !BLI_testextensie(name,".blend.gz")) { - + if (len == sizeof(head) && (head[0] == BLEN && head[1] == DER_)) { + retval= BKE_READ_EXOTIC_OK_BLEND; + } + else { //XXX waitcursor(1); if(is_dxf(name)) { dxf_read(scene, name); - retval = 1; + retval= BKE_READ_EXOTIC_OK_OTHER; } else if(is_stl(name)) { if (is_stl_ascii(name)) read_stl_mesh_ascii(scene, name); else read_stl_mesh_binary(scene, name); - retval = 1; + retval= BKE_READ_EXOTIC_OK_OTHER; } -#ifdef WITH_PYTHON - // TODO: this should not be in the kernel... - else { // unknown format, call Python importloader - /* pass */ + else { + retval= BKE_READ_EXOTIC_FAIL_FORMAT; } -#endif /* WITH_PYTHON */ //XXX waitcursor(0); } } } - return (retval); + return retval; } |