diff -urN globus_rsl-3.0/globus_rsl.c globus_rsl-3.0x/globus_rsl.c --- globus_rsl-3.0/globus_rsl.c 2003-06-18 17:38:18.000000000 -0400 +++ globus_rsl-3.0x/globus_rsl.c 2003-06-19 18:13:29.000000000 -0400 @@ -1391,7 +1391,7 @@ default: return(1); } - + globus_free(*values); *values = (char **)globus_malloc(sizeof(char *) * (globus_list_size (tmp_value_list) * 2 + 1)); diff -urN globus_rsl-3.0/globus_rsl_parser.c globus_rsl-3.0x/globus_rsl_parser.c --- globus_rsl-3.0/globus_rsl_parser.c 2003-06-17 21:28:10.000000000 -0400 +++ globus_rsl-3.0x/globus_rsl_parser.c 2003-06-19 18:13:29.000000000 -0400 @@ -5,6 +5,8 @@ #define YYBISON 1 /* Identify Bison output. */ +#define YY_BUFFER_TRACKING /* ngallahe */ + #define yyparse globus_rslparse #define yylex globus_rsllex #define yyerror globus_rslerror @@ -1078,6 +1080,9 @@ * } */ +#ifdef YY_BUFFER_TRACKING + yy_free_all_buffers(); +#endif if (globus_parse_error_flag) { return (globus_rsl_t *) NULL; diff -urN globus_rsl-3.0/globus_rsl_parser.lex.c globus_rsl-3.0x/globus_rsl_parser.lex.c --- globus_rsl-3.0/globus_rsl_parser.lex.c 2003-06-17 20:06:17.000000000 -0400 +++ globus_rsl-3.0x/globus_rsl_parser.lex.c 2003-06-19 18:13:29.000000000 -0400 @@ -116,6 +116,16 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE; +#ifdef YY_BUFFER_TRACKING +struct yy_buffer_list +{ + YY_BUFFER_STATE my_yy_buf; + struct yy_buffer_list *nextbuf; +}; + +typedef struct yy_buffer_list *YY_BUFFER_LIST; +#endif + extern int yyleng; extern FILE *yyin, *yyout; @@ -248,6 +258,9 @@ void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer )); void yy_load_buffer_state YY_PROTO(( void )); YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size )); +#ifdef YY_BUFFER_TRACKING +YY_BUFFER_LIST* yy_track_buffer(YY_BUFFER_STATE b); +#endif void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b )); void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file )); void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b )); @@ -1700,7 +1713,7 @@ int size; #endif { - YY_BUFFER_STATE b; + YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) @@ -1715,6 +1728,10 @@ if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); +#ifdef YY_BUFFER_TRACKING + yy_track_buffer(b); +#endif + b->yy_is_our_buffer = 1; yy_init_buffer( b, file ); @@ -1722,6 +1739,48 @@ return b; } +#ifdef YY_BUFFER_TRACKING +#ifdef YY_USE_PROTOS +YY_BUFFER_LIST* yy_track_buffer(YY_BUFFER_STATE b) +#else +YY_BUFFER_LIST yy_track_buffer(b) +YY_BUFFER_STATE b; +#endif + { + static YY_BUFFER_LIST bl = NULL; + YY_BUFFER_LIST newbl = NULL; + YY_BUFFER_LIST *blp; + + + if(b != NULL) { + newbl = (YY_BUFFER_LIST) yy_flex_alloc( sizeof( struct yy_buffer_list ) ); + if(newbl == NULL) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + newbl->my_yy_buf = b; + newbl->nextbuf = bl; + bl = newbl; + } + + blp = &bl; + return blp; + } +#endif + +#ifdef YY_BUFFER_TRACKING +void yy_free_all_buffers() +{ + YY_BUFFER_LIST *blp; + + blp = yy_track_buffer(NULL); + while(*blp != NULL) { + yy_delete_buffer((*blp)->my_yy_buf); + } + + return; +} +#endif + + #ifdef YY_USE_PROTOS void yy_delete_buffer( YY_BUFFER_STATE b ) @@ -1730,6 +1789,11 @@ YY_BUFFER_STATE b; #endif { +#ifdef YY_BUFFER_TRACKING + YY_BUFFER_LIST *blp; + YY_BUFFER_LIST bl; + YY_BUFFER_LIST prevbl = NULL; +#endif if ( ! b ) return; @@ -1739,7 +1803,26 @@ if ( b->yy_is_our_buffer ) yy_flex_free( (void *) b->yy_ch_buf ); - yy_flex_free( (void *) b ); +#ifdef YY_BUFFER_TRACKING + blp = yy_track_buffer(NULL); + bl = *blp; + while(bl != NULL) { + if((bl)->my_yy_buf == b) { + if(prevbl == NULL) { + *blp = bl->nextbuf; + } + else { + prevbl->nextbuf = bl->nextbuf; + } + yy_flex_free( (void *) bl); + break; + } + prevbl = bl; + bl = bl->nextbuf; + } +#endif + + yy_flex_free( (void *) b); }