/*
 * Copyright (c) 2004, 2005 Sendmail, Inc. and its suppliers.
 *	All rights reserved.
 *
 * By using this file, you agree to the terms and conditions set
 * forth in the LICENSE file which can be found at the top level of
 * the sendmail distribution.
 *
 */

#include "sm/generic.h"
SM_RCSID("@(#)$Id: dbgcat.c,v 1.6 2006/11/27 00:05:17 ca Exp $")
#include "sm/error.h"
#include "sm/assert.h"
#include "sm/limits.h"
#include "sm/util.h"

/*
**  SM_SET_DBGLC -- set debug level in a category
**	first[-last][.level]
**	level defaults to 1.
**
**	Parameters:
**		ptr -- (pointer to) argument to parse
**		dbg -- array of debug level
**		dbg_size -- size of array
**
**	Returns:
**		usual sm_error code
*/

sm_ret_T
sm_set_dbglc(char **ptr, uint dbg[], uint dbg_size)
{
	sm_ret_T ret;
	ulong first, last, level;

	SM_REQUIRE(ptr != NULL);
	SM_REQUIRE(*ptr != NULL);
	SM_REQUIRE(dbg != NULL);
	SM_REQUIRE(dbg_size > 0);

	ret = sm_parse_ct_lvl(ptr, &first, &last, &level);
	if (sm_is_err(ret))
		return ret;

	if (first >= dbg_size || last >= dbg_size || last < first)
		return sm_err_perm(EINVAL);
	SM_ASSERT(first < dbg_size);
	SM_ASSERT(last < dbg_size);

	/* set the flags */
	while (first <= last)
		dbg[first++] = level;
	return SM_SUCCESS;
}

/*
**  SM_SET_DBGCATS -- set debug level in categories
**	this can be a comma separated list of specifications each of which is
**	parsed by sm_set_dbglc()
**
**	Parameters:
**		ptr -- (pointer to) argument to parse
**		dbg -- array of debug level
**		dbg_size -- size of array
**
**	Returns:
**		usual sm_error code
*/

sm_ret_T
sm_set_dbgcats(char **ptr, uint dbg[], uint dbg_size)
{
	sm_ret_T ret;

	SM_REQUIRE(ptr != NULL);
	SM_REQUIRE(*ptr != NULL);
	SM_REQUIRE(dbg != NULL);
	SM_REQUIRE(dbg_size > 0);

	do {
		ret = sm_set_dbglc(ptr, dbg, dbg_size);
	} while (SM_SUCCESS == ret && ',' == **ptr && *(++*ptr) != '\0');
	if (SM_SUCCESS == ret && **ptr != '\0')
		ret = sm_err_perm(EINVAL);
	return ret;
}


syntax highlighted by Code2HTML, v. 0.9.1