From 14237dc18a84ec7fd3264031998bec18eae34137 Mon Sep 17 00:00:00 2001 From: Vladimir Prus Date: Fri, 5 Jul 2002 10:41:53 +0000 Subject: [PATCH] Eliminated several minor leaks. [SVN r14305] --- src/engine/rules.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/engine/rules.h | 2 ++ 2 files changed, 43 insertions(+) diff --git a/src/engine/rules.c b/src/engine/rules.c index f953e83b4..3ba1fac57 100644 --- a/src/engine/rules.c +++ b/src/engine/rules.c @@ -291,6 +291,33 @@ copysettings( SETTINGS *head ) } #endif +/* + * freetargets() - delete a targets list + */ +void freetargets( TARGETS *chain ) +{ + while( chain ) + { + TARGETS* n = chain->next; + free( chain ); + chain = n; + } +} + +/* + * freeactions() - delete an action list + */ +void freeactions( ACTIONS *chain ) +{ + while( chain ) + { + ACTIONS* n = chain->next; + free( chain ); + chain = n; + } +} + + /* * freesettings() - delete a settings list */ @@ -311,6 +338,19 @@ freesettings( SETTINGS *v ) } } +static void freetarget( void *xt, void *data ) +{ + TARGET* t = (TARGET *)xt; + if ( t->settings ) + freesettings( t->settings ); + if ( t->deps[0] ) + freetargets( t->deps[0] ); + if ( t->deps[1] ) + freetargets( t->deps[1] ); + if ( t->actions ) + freeactions( t->actions ); +} + /* * donerules() - free TARGET tables */ @@ -318,6 +358,7 @@ freesettings( SETTINGS *v ) void donerules() { + hashenumerate( targethash, freetarget, 0 ); hashdone( targethash ); while ( settings_freelist ) { diff --git a/src/engine/rules.h b/src/engine/rules.h index 7e9533b5a..5f96c8c32 100644 --- a/src/engine/rules.h +++ b/src/engine/rules.h @@ -219,7 +219,9 @@ TARGET *bindtarget( char *targetname ); void touchtarget( char *t ); TARGETS *targetlist( TARGETS *chain, LIST *targets ); TARGETS *targetentry( TARGETS *chain, TARGET *target ); +void freetargets( TARGETS *chain ); ACTIONS *actionlist( ACTIONS *chain, ACTION *action ); +void freeactions( ACTIONS *chain ); SETTINGS *addsettings( SETTINGS *head, int append, char *symbol, LIST *value ); void pushsettings( SETTINGS *v ); void popsettings( SETTINGS *v );