diff --git a/release/freedesktop/blender-thumbnailer.py b/release/freedesktop/blender-thumbnailer.py index 5274da103b9..27d6259d172 100755 --- a/release/freedesktop/blender-thumbnailer.py +++ b/release/freedesktop/blender-thumbnailer.py @@ -25,57 +25,54 @@ To run automatically with nautilus: gconftool --type string --set /desktop/gnome/thumbnailers/application@x-blender/command "blender-thumbnailer.py %i %o" """ -import os import struct -import sys def blend_extract_thumb(path): + import os + # def MAKE_ID(tag): ord(tag[0])<<24 | ord(tag[1])<<16 | ord(tag[2])<<8 | ord(tag[3]) REND = 1145980242 # MAKE_ID(b'REND') TEST = 1414743380 # MAKE_ID(b'TEST') blendfile = open(path, 'rb') - head = blendfile.read(7) + head = blendfile.read(12) if head[0:2] == b'\x1f\x8b': # gzip magic import gzip blendfile.close() blendfile = gzip.open(path, 'rb') - head = blendfile.read(7) + head = blendfile.read(12) - if head != b'BLENDER': + if not head.startswith(b'BLENDER'): blendfile.close() return None, 0, 0 - is_64_bit = (blendfile.read(1) == b'-') + is_64_bit = (head[7] == b'-') # true for PPC, false for X86 - is_big_endian = (blendfile.read(1) == b'V') + is_big_endian = (head[8] == b'V') - # Now read the bhead chunk!!! - blendfile.read(3) # skip the version - - sizeof_pointer = 8 if is_64_bit else 4 + # blender pre 2.5 had no thumbs + if head[9:11] <= b'24': + return None, 0, 0 sizeof_bhead = 24 if is_64_bit else 20 - - int_endian = '>i' if is_big_endian else ' ") else: diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index ecbdab98257..53a9b85b980 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -195,7 +195,7 @@ static void id_search_cb(const bContext *C, void *arg_template, char *str, uiSea RNA_parameter_set_lookup(&parms, "context", &C); - if (RNA_function_call(C, &reports, &ptr, func, &parms) == 0) { + if (RNA_function_call((bContext *)C, &reports, &ptr, func, &parms) == 0) { int* ret; RNA_parameter_get_lookup(&parms, "ret", (void **)&ret); diff --git a/source/blender/imbuf/intern/thumbs_blend.c b/source/blender/imbuf/intern/thumbs_blend.c index 7f1c903e9de..cb27b1a647f 100644 --- a/source/blender/imbuf/intern/thumbs_blend.c +++ b/source/blender/imbuf/intern/thumbs_blend.c @@ -40,16 +40,14 @@ static ImBuf *loadblend_thumb(gzFile gzfile) { - char buf[8]; - int code= 0; + char buf[12]; + int bhead[24/sizeof(int)]; /* max size on 64bit */ char endian, pointer_size; char endian_switch; - int len, im_len, x, y; - ImBuf *img= NULL; - + int sizeof_bhead ; /* read the blend file header */ - if(gzread(gzfile, buf, 8) != 8) + if(gzread(gzfile, buf, 12) != 12) return NULL; if(strncmp(buf, "BLENDER", 7)) return NULL; @@ -61,38 +59,23 @@ static ImBuf *loadblend_thumb(gzFile gzfile) else return NULL; - /* read the next 4 bytes, only need the first char, ignore the version */ - /* endian and vertsion (ignored) */ - if(gzread(gzfile, buf, 4) != 4) - return NULL; + sizeof_bhead = 16 + pointer_size; - if(buf[0]=='V') + if(buf[8]=='V') endian= B_ENDIAN; /* big: PPC */ - else if(buf[0]=='v') + else if(buf[8]=='v') endian= L_ENDIAN; /* little: x86 */ else return NULL; - while(gzread(gzfile, &code, sizeof(int)) == sizeof(int)) { - endian_switch = ((ENDIAN_ORDER != endian)) ? 1 : 0; - - if(gzread(gzfile, buf, sizeof(int)) != sizeof(int)) - return NULL; - - len = *( (int *)((void *)buf) ); + endian_switch = ((ENDIAN_ORDER != endian)) ? 1 : 0; + while(gzread(gzfile, bhead, sizeof_bhead) == sizeof_bhead) { if(endian_switch) - SWITCH_INT(len); + SWITCH_INT(bhead[1]); /* length */ - /* finally read the rest of the bhead struct, pointer and 2 ints */ - if(gzread(gzfile, buf, pointer_size) != pointer_size) - return NULL; - if(gzread(gzfile, buf, sizeof(int) * 2) != sizeof(int) * 2) - return NULL; - - /* we dont actually care whats in the bhead */ - if (code==REND) { - gzseek(gzfile, len, SEEK_CUR); /* skip to the next */ + if (bhead[0]==REND) { + gzseek(gzfile, bhead[1], SEEK_CUR); /* skip to the next */ } else { break; @@ -100,35 +83,36 @@ static ImBuf *loadblend_thumb(gzFile gzfile) } /* using 'TEST' since new names segfault when loading in old blenders */ - if(code != TEST) - return NULL; + if(bhead[0] == TEST) { + ImBuf *img= NULL; + int size[2]; - if(gzread(gzfile, &x, sizeof(int)) != sizeof(int)) - return NULL; - if(gzread(gzfile, &y, sizeof(int)) != sizeof(int)) - return NULL; + if(gzread(gzfile, size, sizeof(size)) != sizeof(size)) + return NULL; - len -= sizeof(int) * 2; + if(endian_switch) { + SWITCH_INT(size[0]); + SWITCH_INT(size[1]); + } + /* length */ + bhead[1] -= sizeof(int) * 2; - if(endian_switch) { - SWITCH_INT(x); - SWITCH_INT(y); + /* inconsistant image size, quit early */ + if(bhead[1] != size[0] * size[1] * sizeof(int)) + return NULL; + + /* finally malloc and read the data */ + img= IMB_allocImBuf(size[0], size[1], 32, IB_rect | IB_metadata, 0); + + if(gzread(gzfile, img->rect, bhead[1]) != bhead[1]) { + IMB_freeImBuf(img); + img= NULL; + } + + return img; } - - /* inconsistant image size, quit early */ - im_len = x * y * sizeof(int); - if(im_len != len) - return NULL; - - /* finally malloc and read the data */ - img= IMB_allocImBuf(x, y, 32, IB_rect | IB_metadata, 0); - - if(gzread(gzfile, img->rect, len) != len) { - IMB_freeImBuf(img); - img= NULL; - } - - return img; + + return NULL; } ImBuf *IMB_loadblend_thumb(const char *path) diff --git a/source/blender/makesrna/intern/rna_controller.c b/source/blender/makesrna/intern/rna_controller.c index c66ce532351..43297f29945 100644 --- a/source/blender/makesrna/intern/rna_controller.c +++ b/source/blender/makesrna/intern/rna_controller.c @@ -103,6 +103,7 @@ static void rna_Controller_state_number_set(struct PointerRNA *ptr, const int va cont->state_mask = (1 << (value - 1)); } +#if 0 /* editable is set to false, comment for now. */ static void rna_Controller_state_get(PointerRNA *ptr, int *values) { bController *cont= (bController *)ptr->data; @@ -113,7 +114,6 @@ static void rna_Controller_state_get(PointerRNA *ptr, int *values) values[i] = (cont->state_mask & (1<data; diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index fc7bf9b79c7..86e08118e54 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -689,14 +689,14 @@ void wm_autosave_location(char *filename) sprintf(pidstr, "%d.blend", abs(getpid())); #ifdef WIN32 - // XXX Need to investigate how to handle default location of '/tmp/' - // This is a relative directory on Windows, and it may be - // found. Example: - // Blender installed on D:\ drive, D:\ drive has D:\tmp\ - // Now, BLI_exists() will find '/tmp/' exists, but - // BLI_make_file_string will create string that has it most likely on C:\ - // through get_default_root(). - // If there is no C:\tmp autosave fails. + /* XXX Need to investigate how to handle default location of '/tmp/' + * This is a relative directory on Windows, and it may be + * found. Example: + * Blender installed on D:\ drive, D:\ drive has D:\tmp\ + * Now, BLI_exists() will find '/tmp/' exists, but + * BLI_make_file_string will create string that has it most likely on C:\ + * through get_default_root(). + * If there is no C:\tmp autosave fails. */ if (!BLI_exists(U.tempdir)) { savedir = BLI_get_folder_create(BLENDER_USER_AUTOSAVE, NULL); BLI_make_file_string("/", filename, savedir, pidstr); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 09c11bcfda5..370dd111936 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -2702,7 +2702,7 @@ int WM_radial_control_modal(bContext *C, wmOperator *op, wmEvent *event) float dist; double new_value = RNA_float_get(op->ptr, "new_value"); int ret = OPERATOR_RUNNING_MODAL; - float initial_value = RNA_float_get(op->ptr, "initial_value"); + // float initial_value = RNA_float_get(op->ptr, "initial_value"); mode = RNA_int_get(op->ptr, "mode"); RNA_int_get_array(op->ptr, "initial_mouse", initial_mouse);