[brlcad-commits] CVS: brlcad/src/mged red.c,14.9,14.10
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: John A. <joh...@us...> - 2006-11-05 02:26:18
|
Update of /cvsroot/brlcad/brlcad/src/mged In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv810 Modified Files: red.c Log Message: Improved error checking Index: red.c =================================================================== RCS file: /cvsroot/brlcad/brlcad/src/mged/red.c,v retrieving revision 14.9 retrieving revision 14.10 diff -w -u -r14.9 -r14.10 --- red.c 9 Jul 2006 19:17:16 -0000 14.9 +++ red.c 5 Nov 2006 02:26:15 -0000 14.10 @@ -1005,6 +1005,7 @@ char *name_v5=NULL; char *name=NULL; char line[RT_MAXLINE] = {0}; + char lineCopy[RT_MAXLINE] = {0}; char *ptr = (char *)NULL; int region=(-1); int id=0,air=0; @@ -1035,11 +1036,15 @@ } if( i == RT_MAXLINE ) { - Tcl_AppendResult(interp, "Line too long in edited file\n", (char *)NULL); - return( 1 ); + line[RT_MAXLINE-1] = '\0'; + Tcl_AppendResult(interp, "Line too long in edited file:\n", + line, "\n", (char *)NULL); + fclose( fp ); + return( -1 ); } line[++i] = '\0'; + strcpy( lineCopy, line ); /* skip leading white space */ i = (-1); @@ -1059,11 +1064,19 @@ len--; } if( len >= NAMESIZE ) { - Tcl_AppendResult(interp, "Name too long for v4 database: ", ptr, "\n", (char *)NULL ); + Tcl_AppendResult(interp, "Name too long for v4 database: ", + ptr, "\n", lineCopy, "\n", (char *)NULL ); + fclose( fp ); + return( -1 ); } } continue; } + else if( (ptr=find_keyword( i, line, "REGION_ID" ) ) ) + { + id = atoi( ptr ); + continue; + } else if( (ptr=find_keyword( i, line, "REGION" ) ) ) { if( *ptr == 'y' || *ptr == 'Y' ) @@ -1072,11 +1085,6 @@ region = 0; continue; } - else if( (ptr=find_keyword( i, line, "REGION_ID" ) ) ) - { - id = atoi( ptr ); - continue; - } else if( (ptr=find_keyword( i, line, "AIRCODE" ) ) ) { air = atoi( ptr ); @@ -1096,25 +1104,22 @@ rgb_valid = 1; ptr2 = strtok( ptr, delims ); - if( !ptr2 ) - { - rgb_valid = 0; + if( !ptr2 ) { continue; - } + } else { ptr2 = strtok( (char *)NULL, delims ); - if( !ptr2 ) - { + if( !ptr2 ) { rgb_valid = 0; - continue; - } + } else { ptr2 = strtok( (char *)NULL, delims ); - if( !ptr2 ) - { + if( !ptr2 ) { rgb_valid = 0; - continue; } - if( !rgb_valid ) - Tcl_AppendResult(interp, "Invalid color specification!!! Must be three integers, each 0-255\n", (char *)NULL ); + } + } + if( !rgb_valid ) { + Tcl_AppendResult(interp, "WARNING: invalid color specification!!! Must be three integers, each 0-255\n", (char *)NULL ); + } continue; } else if( (ptr=find_keyword( i, line, "SHADER" ) ) ) @@ -1133,7 +1138,7 @@ "\tMust be 'Yes' or 'No'\n", "\tNo Changes made\n", (char *)NULL ); fclose( fp ); - return( 1 ); + return( -1 ); } else if( region ) { @@ -1143,7 +1148,7 @@ "\tNo Changes made\n", (char *)NULL ); fclose( fp ); - return( 1 ); + return( -1 ); } if( air < 0 ) { @@ -1151,7 +1156,7 @@ "\tNo Changes made\n", (char *)NULL ); fclose( fp ); - return( 1 ); + return( -1 ); } if( air == 0 && id == 0 ) Tcl_AppendResult(interp, "Warning: both ID and Air codes are 0!!!\n", (char *)NULL ); @@ -1191,6 +1196,7 @@ /* Next must be the member name */ ptr = strtok( (char *)NULL, delims ); name = NULL; + if( ptr != NULL && *ptr != '\0' ) { if( dbip->dbi_version < 5 ) { strncpy( name_v4 , ptr , NAMESIZE ); name_v4[NAMESIZE] = '\0'; @@ -1212,6 +1218,7 @@ } name = name_v5; } + } if( relation != '+' && relation != 'u' && relation != '-' ) { @@ -1219,21 +1226,24 @@ bu_vls_init(&tmp_vls); bu_vls_printf(&tmp_vls, " %c is not a legal operator\n" , relation ); - Tcl_AppendResult(interp, bu_vls_addr(&tmp_vls), (char *)NULL); + Tcl_AppendResult(interp, bu_vls_addr(&tmp_vls), lineCopy, + "\n", (char *)NULL); bu_vls_free(&tmp_vls); fclose( fp ); - if( dbip->dbi_version >= 5 ) + if( dbip->dbi_version >= 5 && name_v5 ) bu_free( name_v5, "name_v5" ); return( -1 ); } + if( relation != '-' ) nonsubs++; if( name == NULL || name[0] == '\0' ) { - Tcl_AppendResult(interp, " operand name missing\n", (char *)NULL); + Tcl_AppendResult(interp, " operand name missing\n", + lineCopy, "\n", (char *)NULL); fclose( fp ); - if( dbip->dbi_version >= 5 ) + if( dbip->dbi_version >= 5 && name_v5 ) bu_free( name_v5, "name_v5" ); return( -1 ); } @@ -1252,9 +1262,10 @@ ptr = strtok( (char *)NULL, delims ); if( !ptr) { - Tcl_AppendResult(interp, "expecting a matrix\n", (char *)NULL); + Tcl_AppendResult(interp, "incomplete matrix\n", + lineCopy, "\n", (char *)NULL); fclose( fp ); - if( dbip->dbi_version >= 5 ) + if( dbip->dbi_version >= 5 && name_v5 ) bu_free( name_v5, "name_v5" ); return( -1 ); } |