/*
 * 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: log-conf.c,v 1.3 2007/04/24 03:07:51 ca Exp $")

#include "sm/string.h"
#include "sm/io.h"
#include "sm/qmgrcomm.h"
#include "sm/sm-conf.h"
#include "sm/sm-conf-prt.h"

#define SM_CONF_LOG_DEF 1
#include "sm/logcnfdef.h"

typedef struct sm_cnf_S		sm_cnf_T, *sm_cnf_P;
struct sm_cnf_S
{
	sm_logspec_T	smc_log;
};

sm_conf_definition_T
smx_defs[] =
{
{ SM_CONF_DEF_MAGIC, "log", sm_conf_type_section,
	offsetof(sm_cnf_T, smc_log),
	0,
	NULL, SM_CONF_FLAG_KEEP_DEFAULT, sm_log_spec_defs},

/* sentinel */
{ SM_CONF_DEF_MAGIC, NULL }
};

static int Verbose = 0;

static int
dump_defs(sm_file_T *fp, const char *name)
{
	int err;
	sm_cnf_T sm_cnf;
	sm_conf_T *smc;
	sm_conf_node_T *node;

	sm_memzero(&sm_cnf, sizeof(sm_cnf));
	if ((smc = sm_conf_new(name)) == NULL)
	{
		return 1;
	}
	if ((err = sm_conf_read_FILE(smc, name, NULL)) != 0)
	{
		char buf[SM_CONF_ERROR_BUFFER_SIZE];
		char const *e = NULL;

		sm_io_fprintf(smioerr, "%s: %s\n",
			name ? name : "*stdin*",
			sm_conf_strerror(err, buf, sizeof buf));

		while ((e = sm_conf_syntax_error(smc, e)) != NULL)
			sm_io_fprintf(smioerr, "%s\n", e);

		sm_conf_destroy(smc);
		return 2;
	}
	err = sm_conf_scan(smc, smx_defs, SM_CONF_FLAG_KEEP_DEFAULT, &sm_cnf);
	if (err != 0)
	{
		sm_prt_conferr(name, smc, err, smioerr);
	}

	node = sm_conf_root(smc);
	sm_conf_dump_root(smc, node, fp);

	sm_io_flush(fp);
	return 0;
}

int
main(int argc, char **argv)
{
	int r;

	while ((r = getopt(argc, argv, "qV")) != -1)
	{
		switch (r)
		{
		  case 'V':
			Verbose++;
			break;
		  default:
/*
			usage(argv[0]);
*/
			return 1;
		}
	}

	argc -= optind;
	argv += optind;

	if (argc > 0)
		r = dump_defs(smioout, argv[0]);
	return r;
}


syntax highlighted by Code2HTML, v. 0.9.1