Use halloc to simplyfy allocations in function.c

darcs-hash:20061115141649-ac50b-aff0e3369bb19d6d88130781b13e598c9445b138.gz
This commit is contained in:
axel 2006-11-16 00:16:49 +10:00
parent cfa9ecbfd2
commit 6573d2b451
2 changed files with 40 additions and 34 deletions

View file

@ -1,5 +1,10 @@
/** \file function.c
Functions for storing and retrieving function information.
Prototypes for functions for storing and retrieving function
information. These functions also take care of autoloading
functions in the $fish_function_path. Actual function evaluation
is taken care of by the parser and to some degree the builtin
handling library.
*/
#include "config.h"
@ -25,6 +30,8 @@
#include "parse_util.h"
#include "env.h"
#include "expand.h"
#include "halloc.h"
#include "halloc_util.h"
/**
@ -135,19 +142,6 @@ static void autoload_names( array_list_t *out, int get_hidden )
al_destroy( &path_list );
}
/**
Free all contents of an entry to the function hash table
*/
static void clear_function_entry( void *key,
void *data )
{
function_data_t *d = (function_data_t *)data;
free( (void *)d->cmd );
free( (void *)d->desc );
free( (void *)d );
}
void function_init()
{
hash_init( &function,
@ -155,9 +149,14 @@ void function_init()
&hash_wcs_cmp );
}
static void clear_entry( void *key, void *value )
{
halloc_free( value );
}
void function_destroy()
{
hash_foreach( &function, &clear_function_entry );
hash_foreach( &function, &clear_entry );
hash_destroy( &function );
}
@ -176,13 +175,13 @@ void function_add( const wchar_t *name,
function_remove( name );
d = malloc( sizeof( function_data_t ) );
d = halloc( 0, sizeof( function_data_t ) );
d->definition_offset = parse_util_lineno( parser_get_buffer(), current_block->tok_pos )-1;
d->cmd = wcsdup( val );
d->cmd = halloc_wcsdup( d, val );
cmd_end = d->cmd + wcslen(d->cmd)-1;
d->desc = desc?wcsdup( desc ):0;
d->desc = desc?halloc_wcsdup( d, desc ):0;
d->definition_file = intern(reader_current_filename());
d->is_autoload = is_autoload;
@ -230,7 +229,7 @@ void function_remove( const wchar_t *name )
ev.function_name=name;
event_remove( &ev );
clear_function_entry( key, d );
halloc_free( d );
/*
Notify the autoloader that the specified function is erased, but
@ -282,7 +281,7 @@ void function_set_desc( const wchar_t *name, const wchar_t *desc )
if( data == 0 )
return;
data->desc =wcsdup(desc);
data->desc = halloc_wcsdup( data, desc );
}
/**
@ -294,9 +293,9 @@ static int al_contains_str( array_list_t *list, const wchar_t * str )
for( i=0; i<al_get_count( list ); i++ )
{
if( wcscmp( al_get( list, i ), str) == 0 )
{
return 1;
}
{
return 1;
}
}
return 0;
}

View file

@ -1,8 +1,10 @@
/** \file function.h
Prototypes for functions for storing and retrieving function
information. Actual function evaluation is taken care of by the
parser and to some degree the builtin handling library.
information. These functions also take care of autoloading
functions in the $fish_function_path. Actual function evaluation
is taken care of by the parser and to some degree the builtin
handling library.
*/
#ifndef FISH_FUNCTION_H
@ -16,13 +18,15 @@
Initialize function data
*/
void function_init();
/**
Destroy function data
*/
void function_destroy();
/**
Add an function. The parameters values are copied and should be freed by the caller.
Add an function. The parameters values are copied and should be
freed by the caller.
*/
void function_add( const wchar_t *name,
const wchar_t *val,
@ -34,11 +38,6 @@ void function_add( const wchar_t *name,
*/
void function_remove( const wchar_t *name );
/**
Returns true if the function with the name name uses internal variables, false otherwise.
*/
int function_use_vars( const wchar_t *name );
/**
Returns the definition of the function with the name \c name.
*/
@ -55,12 +54,13 @@ const wchar_t *function_get_desc( const wchar_t *name );
void function_set_desc( const wchar_t *name, const wchar_t *desc );
/**
Returns true if the function witrh the name name exists.
Returns true if the function with the name name exists.
*/
int function_exists( const wchar_t *name );
/**
Insert all function names into l. These are not copies of the strings and should not be freed after use.
Insert all function names into l. These are not copies of the
strings and should not be freed after use.
\param list the list to add the names to
\param get_hidden whether to include hidden functions, i.e. ones starting with an underscore
@ -71,11 +71,18 @@ void function_get_names( array_list_t *list,
/**
Returns tha absolute path of the file where the specified function
was defined. Returns 0 if the file was defined on the commandline.
This function does not autoload functions, it will only work on
functions that have already been defined.
*/
const wchar_t *function_get_definition_file( const wchar_t *name );
/**
Returns the linenumber where the definition of the specified function started
Returns the linenumber where the definition of the specified
function started.
This function does not autoload functions, it will only work on
functions that have already been defined.
*/
int function_get_definition_offset( const wchar_t *name );