]> de.git.xonotic.org Git - xonotic/netradiant.git/commitdiff
fix bugs in skin load code
authorRudolf Polzer <divverent@alientrap.org>
Fri, 1 Oct 2010 10:13:36 +0000 (12:13 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Fri, 1 Oct 2010 10:13:36 +0000 (12:13 +0200)
tools/quake3/common/inout.c
tools/quake3/q3map2/model.c

index aebc5db3db419ab9e32c4ef2b95fd77662a7ea81..c56a9f5436d2619bddbcede0ab621852ec46f969 100644 (file)
@@ -271,7 +271,7 @@ void FPrintf (int flag, char *buf)
   static qboolean bGotXML = qfalse;
   char level[2];
 
-  printf(buf);
+  printf("%s", buf);
 
   // the following part is XML stuff only.. but maybe we don't want that message to go down the XML pipe?
   if (flag == SYS_NOXML)
index 137554b6b2beabd196a55dc320f96bb295aa3c66..a3945359413635590f18f0a84bd4f403e3dcf319 100644 (file)
@@ -242,13 +242,13 @@ void InsertModel( const char *name, int skin, int frame, m4x4_t transform, remap
        skinfilename[sizeof(skinfilename)-1] = 0;
        skinfilehandle = fopen(skinfilename, "r");
        skinfilesize = vfsLoadFile(skinfilename, (void**) &skinfilecontent, 0);
-       if(skinfilesize < 0)
+       if(skinfilesize < 0 && skin != 0)
        {
                /* fallback to skin 0 if invalid */
                snprintf(skinfilename, sizeof(skinfilename), "%s_0.skin", name);
                skinfilename[sizeof(skinfilename)-1] = 0;
                skinfilesize = vfsLoadFile(skinfilename, (void**) &skinfilecontent, 0);
-               if(skinfilesize < 0)
+               if(skinfilesize >= 0)
                        Sys_Printf( "Skin %d of %s does not exist, using 0 instead\n", skin, name );
        }
        sf = NULL;
@@ -280,16 +280,15 @@ void InsertModel( const char *name, int skin, int frame, m4x4_t transform, remap
                        sf = safe_malloc( sizeof( *sf ) );
                        sf->next = sf2;
 
-                       sprintf(format, "replace %%%ds %%%ds%%n", (int)sizeof(sf->name)-1, (int)sizeof(sf->to)-1);
-                       pos = 0;
-                       if(sscanf(skinfileptr, format, &sf->name, &sf->to, &pos) > 0 && pos > 0)
+                       sprintf(format, "replace %%%ds %%%ds", (int)sizeof(sf->name)-1, (int)sizeof(sf->to)-1);
+                       if(sscanf(skinfileptr, format, sf->name, sf->to) == 2)
                                continue;
-                       sprintf(format, "%%%ds,%%%ds%%n", (int)sizeof(sf->name)-1, (int)sizeof(sf->to)-1);
-                       pos = 0;
-                       if(sscanf(skinfileptr, format, &sf->name, &sf->to, &pos) > 0 && pos > 0)
+                       sprintf(format, " %%%d[^,       ] ,%%%ds", (int)sizeof(sf->name)-1, (int)sizeof(sf->to)-1);
+                       if((pos = sscanf(skinfileptr, format, sf->name, sf->to)) == 2)
                                continue;
 
                        /* invalid input line -> discard sf struct */
+                       Sys_Printf( "Discarding skin directive in %s: %s\n", skinfilename, skinfileptr );
                        free(sf);
                        sf = sf2;
                }