[pacman-dev] [PATCH] Consolidate and improve table implementations

Simon Gomizelj simongmzlj at gmail.com
Sun Jun 30 22:53:26 EDT 2013


>>  
>>  int trans_init(alpm_transflag_t flags, int check_valid)
>> @@ -424,6 +432,60 @@ static size_t string_length(const char *s)
>>  	return len;
>>  }
>>  
>> +static void add_table_cell(alpm_list_t **row, char *label, int mode)
>> +{
>> +	struct table_cell_t *cell = malloc(sizeof(struct table_cell_t));
>> +
>> +	cell->label = label;
>> +	cell->mode = mode;
>> +	cell->len = string_length(label);
>> +
>> +	*row = alpm_list_add(*row, cell);
>> +}
>> +
>> +static void table_free_cell(void *ptr)
>> +{
>> +	struct table_cell_t *cell = ptr;
>> +
>> +	if(cell) {
>> +		if((cell->mode & CELL_FREE) && cell->label) {
>> +			free(cell->label);
> 
> This isn't an official pacman style guideline and we do it in other
> places, but I personally view NULL checks before calling free functions
> as useless noise.  *free() functions should generally be NULL-safe, so
> manually checking adds unnecessary clutter and can be confusing when
> done inconsistently.
> 

Its not NULL safe though. If cell is NULL, then cell->mode / cell->label
is a null dereference error.

>> +		}
>> +		free(cell);
>> +	}
>> +}
>> +
>> +static void table_free(alpm_list_t *headers, alpm_list_t *rows)
>> +{
>> +	alpm_list_t *i;
>> +
>> +	alpm_list_free_inner(headers, table_free_cell);
>> +
>> +	for(i = rows; i; i = alpm_list_next(i)) {
>> +		if(i->data) {
>> +			alpm_list_free_inner(i->data, table_free_cell);
>> +			alpm_list_free(i->data);
> 
> NULL check.
> 

I'm assuming you don't want the check then?


More information about the pacman-dev mailing list