diff options
author | Kevin B Kenny <kennykb@acm.org> | 2003-05-15 21:51:46 (GMT) |
---|---|---|
committer | Kevin B Kenny <kennykb@acm.org> | 2003-05-15 21:51:46 (GMT) |
commit | 6d32bfc2e3607fa604256d127278dc051779c549 (patch) | |
tree | 49e0fa2a9af827e2b90a9260b0cbb7364e6a0f7a /generic/tclGetDate.y | |
parent | 254184a818b32e16b090faa444a90591c81c8c56 (diff) | |
download | tcl-6d32bfc2e3607fa604256d127278dc051779c549.zip tcl-6d32bfc2e3607fa604256d127278dc051779c549.tar.gz tcl-6d32bfc2e3607fa604256d127278dc051779c549.tar.bz2 |
Fixed Tcl bug 736425
Diffstat (limited to 'generic/tclGetDate.y')
-rw-r--r-- | generic/tclGetDate.y | 84 |
1 files changed, 83 insertions, 1 deletions
diff --git a/generic/tclGetDate.y b/generic/tclGetDate.y index 14b9869..3a7d032 100644 --- a/generic/tclGetDate.y +++ b/generic/tclGetDate.y @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclGetDate.y,v 1.18 2001/10/18 20:20:28 hobbs Exp $ + * RCS: @(#) $Id: tclGetDate.y,v 1.19 2003/05/15 21:51:46 kennykb Exp $ */ %{ @@ -134,6 +134,88 @@ static int yylex _ANSI_ARGS_((void)); int yyparse _ANSI_ARGS_((void)); + +/* + *---------------------------------------------------------------------- + * + * TclDateCleanup -- + * + * Clean up allocated memory on process exit. + * + * Results: + * None. + * + * Side effects: + * Frees the block of memory passed in as client data. + * + *---------------------------------------------------------------------- + */ + +static void +TclDateCleanup( ClientData clientData ) +{ + ckfree( (char*) clientData ); +} + +/* + *---------------------------------------------------------------------- + * + * TclDateAlloc -- + * + * Special purpose allocator for the two YACC stacks. + * + * Results: + * Returns a pointer to a block of memory. + * + * Side effects: + * Allocates the requested number of bytes, and + * sets up to delete the allocated memory on process exit. + * + * The YACC system is set up to free memory in its stacks only by + * abandonment. This procedure sets up to free it explicitly on exit + * from Tcl, as when unloading. + * + *---------------------------------------------------------------------- + */ + +static char* +TclDateAlloc( size_t n ) +{ + char* pointer = ckalloc( n ); + Tcl_CreateExitHandler( TclDateCleanup, (ClientData) pointer ); + return pointer; +} + +/* + *---------------------------------------------------------------------- + * + * TclDateRealloc -- + * + * Special purpose allocator for the two YACC stacks. + * + * Results: + * Returns a pointer to a block of memory. + * + * Side effects: + * Allocates the requested number of bytes, and + * sets up to delete the allocated memory on process exit. + * + * The YACC system is set up to free memory in its stacks only by + * abandonment. This procedure sets up to free it explicitly on exit + * from Tcl, as when unloading. + * + *---------------------------------------------------------------------- + */ +static char* +TclDateRealloc( char* oldPointer, size_t n ) +{ + char* newPointer; + Tcl_DeleteExitHandler( TclDateCleanup, (ClientData) oldPointer ); + newPointer = ckrealloc( oldPointer, n ); + Tcl_CreateExitHandler( TclDateCleanup, (ClientData) newPointer ); + return newPointer; +} + %} %union { |