[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34562] trunk/blender/source/blender: And here's a decent fix for correctly recognizing the the

Ton Roosendaal ton at blender.org
Sun Jan 30 14:12:04 CET 2011


Revision: 34562
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34562
Author:   ton
Date:     2011-01-30 13:12:03 +0000 (Sun, 30 Jan 2011)
Log Message:
-----------
And here's a decent fix for correctly recognizing the the
.blend1 etc backups. 
Proves again that lazy coders only make bad code :) 

Implementation note:
The filewindow now recoginizes .blend version backups as
a special type, so filtering for .blend files themselves
ignores it. However, they're recognized correctly as valid
.blend files, and draw an icon as .blend file when filtering 
is off. Can become a distinct icon if we want...

Modified Paths:
--------------
    trunk/blender/source/blender/blenlib/intern/path_util.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/space_file/file_draw.c
    trunk/blender/source/blender/editors/space_file/filelist.c
    trunk/blender/source/blender/makesdna/DNA_space_types.h

Modified: trunk/blender/source/blender/blenlib/intern/path_util.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/path_util.c	2011-01-30 12:26:16 UTC (rev 34561)
+++ trunk/blender/source/blender/blenlib/intern/path_util.c	2011-01-30 13:12:03 UTC (rev 34562)
@@ -1315,25 +1315,21 @@
 	BLI_clean(string);
 }
 
-/* if ext is .blend*, it doesn't compare last char */
 int BLI_testextensie(const char *str, const char *ext)
 {
 	short a, b;
-	int retval= 0;
+	int retval;
 	
 	a= strlen(str);
 	b= strlen(ext);
 	
 	if(a==0 || b==0 || b>=a) {
 		retval = 0;
+	} else if (BLI_strcasecmp(ext, str + a - b)) {
+		retval = 0;	
+	} else {
+		retval = 1;
 	}
-	else {
-		/* allow .blend1 .blend2 */
-		char *loc= BLI_strcasestr(str+a-b-1, ext);
-		
-		if(loc)
-			retval= 1;
-	}
 	
 	return (retval);
 }

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2011-01-30 12:26:16 UTC (rev 34561)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2011-01-30 13:12:03 UTC (rev 34562)
@@ -1039,7 +1039,7 @@
 
 int BLO_has_bfile_extension(char *str)
 {
-	return (BLI_testextensie(str, ".ble") || BLI_testextensie(str, ".blend")||BLI_testextensie(str, ".blend.gz"));
+	return (BLI_testextensie(str, ".ble") || BLI_testextensie(str, ".blend") || BLI_testextensie(str, ".blend.gz"));
 }
 
 int BLO_is_a_library(const char *path, char *dir, char *group)

Modified: trunk/blender/source/blender/editors/space_file/file_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/file_draw.c	2011-01-30 12:26:16 UTC (rev 34561)
+++ trunk/blender/source/blender/editors/space_file/file_draw.c	2011-01-30 13:12:03 UTC (rev 34562)
@@ -256,6 +256,8 @@
 	}
 	else if (file->flags & BLENDERFILE)
 		return ICON_FILE_BLEND;
+	else if (file->flags & BLENDERFILE_BACKUP)
+		return ICON_FILE_BLEND;
 	else if (file->flags & IMAGEFILE)
 		return ICON_FILE_IMAGE;
 	else if (file->flags & MOVIEFILE)

Modified: trunk/blender/source/blender/editors/space_file/filelist.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/filelist.c	2011-01-30 12:26:16 UTC (rev 34561)
+++ trunk/blender/source/blender/editors/space_file/filelist.c	2011-01-30 13:12:03 UTC (rev 34562)
@@ -722,10 +722,36 @@
 	BLI_strncpy(filelist->filter_glob, filter_glob, sizeof(filelist->filter_glob));
 }
 
+static int file_is_blend_backup(const char *str)
+{
+	short a, b;
+	int retval= 0;
+	
+	a= strlen(str);
+	b= 7;
+	
+	if(a==0 || b>=a);
+	else {
+		if(a > b+1)
+			b++;
+		
+		/* allow .blend1 .blend2 .blend32 */
+		char *loc= BLI_strcasestr(str+a-b, ".blend");
+		
+		if(loc)
+			retval= 1;
+	}
+	
+	return (retval);
+}
+
+
 static int file_extension_type(char *relname)
 {
 	if(BLO_has_bfile_extension(relname)) {
 		return BLENDERFILE;
+	} else if(file_is_blend_backup(relname)) {
+		return BLENDERFILE_BACKUP;
 	} else if(BLI_testextensie(relname, ".py")) {
 		return PYSCRIPTFILE;
 	} else if(BLI_testextensie(relname, ".txt")
@@ -757,7 +783,7 @@
 {
 	int type= file_extension_type(relname);
 	
-	if (type == BLENDERFILE)
+	if (type == BLENDERFILE || type==BLENDERFILE_BACKUP)
 		return ICON_FILE_BLEND;
 	else if (type ==  IMAGEFILE)
 		return ICON_FILE_IMAGE;

Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h	2011-01-30 12:26:16 UTC (rev 34561)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h	2011-01-30 13:12:03 UTC (rev 34562)
@@ -698,7 +698,7 @@
 #define EDITING				(1<<0)
 #define ACTIVEFILE			(1<<1)
 #define BLENDERFILE			(1<<2)
-#define PSXFILE				(1<<3)
+#define BLENDERFILE_BACKUP	(1<<3)
 #define IMAGEFILE			(1<<4)
 #define MOVIEFILE			(1<<5)
 #define PYSCRIPTFILE		(1<<6)




More information about the Bf-blender-cvs mailing list