Alan, I notice your fix for the cppcheck detected issues makes use of goto's. In many circles use of goto is considered a real no-no. I'm not sure my fix of using a macro for checking error codes and cleaning up is any better (see recent fix to lib/nistcd/cdexpert.c), but we should perhaps have a coding policy on such things to go along with our style policy.
Any thoughts from other developers? Andrew On Thu, Dec 10, 2009 at 08:18:54PM +0000, air...@users.sourceforge.net wrote: > Revision: 10718 > http://plplot.svn.sourceforge.net/plplot/?rev=10718&view=rev > Author: airwin > Date: 2009-12-10 20:18:54 +0000 (Thu, 10 Dec 2009) > > Log Message: > ----------- > Get rid of memory leaks that would occur for error conditions. > (Issue found by cppcheck). > > Modified Paths: > -------------- > trunk/bindings/tcl/tclAPI.c > > Modified: trunk/bindings/tcl/tclAPI.c > =================================================================== > --- trunk/bindings/tcl/tclAPI.c 2009-12-10 19:53:30 UTC (rev 10717) > +++ trunk/bindings/tcl/tclAPI.c 2009-12-10 20:18:54 UTC (rev 10718) > @@ -640,6 +640,7 @@ > pls_auto_path( Tcl_Interp *interp ) > { > char *buf, *ptr = NULL, *dn; > + int return_code = TCL_OK; > #ifdef DEBUG > char *path; > #endif > @@ -651,7 +652,10 @@ > #ifdef TCL_DIR > Tcl_SetVar( interp, "dir", TCL_DIR, TCL_GLOBAL_ONLY ); > if ( tcl_cmd( interp, "set auto_path \"$dir $auto_path\"" ) == TCL_ERROR > ) > - return TCL_ERROR; > + { > + return_code = TCL_ERROR; > + goto finish; > + } > #ifdef DEBUG > fprintf( stderr, "adding %s to auto_path\n", TCL_DIR ); > path = Tcl_GetVar( interp, "auto_path", 0 ); > @@ -666,7 +670,10 @@ > plGetName( dn, "tcl", "", &ptr ); > Tcl_SetVar( interp, "dir", ptr, 0 ); > if ( tcl_cmd( interp, "set auto_path \"$dir $auto_path\"" ) == > TCL_ERROR ) > - return TCL_ERROR; > + { > + return_code = TCL_ERROR; > + goto finish; > + } > #ifdef DEBUG > fprintf( stderr, "adding %s to auto_path\n", ptr ); > path = Tcl_GetVar( interp, "auto_path", 0 ); > @@ -682,7 +689,10 @@ > plGetName( dn, "", "", &ptr ); > Tcl_SetVar( interp, "dir", ptr, 0 ); > if ( tcl_cmd( interp, "set auto_path \"$dir $auto_path\"" ) == > TCL_ERROR ) > - return TCL_ERROR; > + { > + return_code = TCL_ERROR; > + goto finish; > + } > #ifdef DEBUG > fprintf( stderr, "adding %s to auto_path\n", ptr ); > path = Tcl_GetVar( interp, "auto_path", 0 ); > @@ -699,7 +709,10 @@ > plGetName( dn, "tcl", "", &ptr ); > Tcl_SetVar( interp, "dir", ptr, 0 ); > if ( tcl_cmd( interp, "set auto_path \"$dir $auto_path\"" ) == > TCL_ERROR ) > - return TCL_ERROR; > + { > + return_code = TCL_ERROR; > + goto finish; > + } > #ifdef DEBUG > fprintf( stderr, "adding %s to auto_path\n", ptr ); > path = Tcl_GetVar( interp, "auto_path", 0 ); > @@ -713,19 +726,26 @@ > if ( getcwd( buf, 256 ) == 0 ) > { > Tcl_SetResult( interp, "Problems with getcwd in pls_auto_path", > TCL_STATIC ); > - return TCL_ERROR; > + { > + return_code = TCL_ERROR; > + goto finish; > + } > } > - > Tcl_SetVar( interp, "dir", buf, 0 ); > if ( tcl_cmd( interp, "set auto_path \"$dir $auto_path\"" ) == TCL_ERROR > ) > - return TCL_ERROR; > - > + { > + return_code = TCL_ERROR; > + goto finish; > + } > /*** see if plserver was invoked in the build tree ***/ > if ( plInBuildTree()) > { > Tcl_SetVar( interp, "dir", BUILD_DIR "/bindings/tk", TCL_GLOBAL_ONLY > ); > if ( tcl_cmd( interp, "set auto_path \"$dir $auto_path\"" ) == > TCL_ERROR ) > - return TCL_ERROR; > + { > + return_code = TCL_ERROR; > + goto finish; > + } > } > > #ifdef DEBUG > @@ -734,10 +754,10 @@ > fprintf( stderr, "auto_path is %s\n", path ); > #endif > > - free_mem( buf ); > +finish: free_mem( buf ); > free_mem( ptr ); > > - return TCL_OK; > + return return_code; > } > > /*----------------------------------------------------------------------*\ > > > This was sent by the SourceForge.net collaborative development platform, the > world's largest Open Source development site. > > ------------------------------------------------------------------------------ > Return on Information: > Google Enterprise Search pays you back > Get the facts. > http://p.sf.net/sfu/google-dev2dev > _______________________________________________ > Plplot-cvs mailing list > plplot-...@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/plplot-cvs > ----- End forwarded message ----- ------------------------------------------------------------------------------ Return on Information: Google Enterprise Search pays you back Get the facts. http://p.sf.net/sfu/google-dev2dev _______________________________________________ Plplot-devel mailing list Plplot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/plplot-devel