Ejemplo n.º 1
0
void suppl_log_enter(suppl_log_sptr_t library_name
	, suppl_log_csptr_t file_name
	, suppl_log_linenr_t linenr
	, suppl_log_local_data_t *local_data
	, suppl_log_csptr_t function_name
	, suppl_log_csptr_t function_class)
{	int ch1, ch2;

	assert(local_data);
	assert(function_name);
	assert(function_class);

	/* preserve the current settings */
	local_data->suppl_l_prv_nestlevel = suppl_l_nestlevel;
	local_data->suppl_l_prv_fct_enabled = suppl_l_fct_enabled;
	local_data->suppl_l_fctname = function_name;

	/* Set the new values */
	++suppl_l_nestlevel;
	if(library_name) {
		if(suppl_log_find_list(&S(classes), library_name) != '+') {
			suppl_l_fct_enabled = 0;
			goto goon;				/* libraries are mandotary */
		}
	}

	if((ch1 = suppl_log_find_list(&S(files), file_name)) != 0) {
		suppl_l_fct_enabled = ch1 == '+';
		goto goon;
	}

	ch1 = suppl_log_find_list(&S(classes), function_class);
	ch2 = suppl_log_find_list(&S(functions), function_name);

	if(ch1)
		suppl_l_fct_enabled = ch1 == '+' && (!ch2 || ch2 == '+');
	else if(ch2)
		suppl_l_fct_enabled = ch2 == '+';
	else			/* Neither ch1 nor ch2 */
		suppl_l_fct_enabled = S(classes).suppl_l_name[0] == '+'
		 || S(functions).suppl_l_name[0] == '+';

goon:
	if(suppl_log_class_enabled("fct")) {
		/* Create the log entries when entering a new function */
		suppl_log_log_header();
		suppl_log_log_item(">%s() \"%s\"", function_name, function_class);
		if(library_name)
			suppl_log_log_item(" lib:%s", library_name);
		if(file_name)
			suppl_log_log_item(" in %s:%lu", file_name, linenr);
		suppl_log_log_trailer();
	}
}
Ejemplo n.º 2
0
void suppl_log_leave(suppl_log_local_data_t *local_data)
{
	assert(local_data);
	assert(local_data->suppl_l_fctname);

	if(suppl_log_class_enabled("fct"))
		/* Create the log entries when leaving a function */
		suppl_log_log("<%s()", local_data->suppl_l_fctname);

	if(local_data->suppl_l_prv_nestlevel != suppl_l_nestlevel - 1)
		suppl_log_log("Missing %u DBG_LEAVE macro(s)"
		 , suppl_l_nestlevel - 1 - local_data->suppl_l_prv_nestlevel);

	/* restore the former settings */
	suppl_l_nestlevel = local_data->suppl_l_prv_nestlevel;
	suppl_l_fct_enabled = local_data->suppl_l_prv_fct_enabled;
	chkHeap
}