#include "global.h"
cfg_root_t cfg;
sched_root_task_t *root;
int Verbose, Kill;
extern char compiled[], compiledby[], compilehost[];
char szCfgName[PATH_MAX] = BUTZ_CFG;
static void
Usage()
{
printf( " -= Butz =- Service for board buttons management\n"
"=== %s === %s@%s ===\n\n"
" Syntax: butz [options] [set_value]\n"
"\n"
"\t-c <cfgfile>\tConfig file [default: /etc/butz.conf]\n"
"\t-v\t\tVerbose ...\n"
"\n", compiled, compiledby, compilehost);
}
static void *
sigHandler(sched_task_t *task)
{
switch (TASK_VAL(task)) {
case SIGHUP:
cfgUnloadConfig(&cfg);
if (cfgLoadConfig(szCfgName, &cfg)) {
ELIBERR(cfg);
Kill++;
}
break;
case SIGTERM:
Kill++;
break;
default:
EERROR(EINVAL, "Undefined signal %lu!", TASK_VAL(task));
break;
}
taskExit(task, NULL);
}
int
main(int argc, char **argv)
{
char ch;
while ((ch = getopt(argc, argv, "hvc:")) != -1)
switch (ch) {
case 'c':
strlcpy(szCfgName, optarg, sizeof szCfgName);
break;
case 'v':
Verbose++;
break;
case 'h':
default:
Usage();
return 1;
}
argc -= optind;
argv += optind;
openlog("butz", LOG_PID | LOG_CONS, LOG_DAEMON);
if (cfgLoadConfig(szCfgName, &cfg)) {
ELIBERR(cfg);
return 1;
}
root = schedBegin();
if (!root) {
ELIBERR(sched);
return 1;
}
schedSignal(root, sigHandler, NULL, SIGHUP, NULL, 0);
schedSignal(root, sigHandler, NULL, SIGTERM, NULL, 0);
schedRun(root, &Kill);
schedEnd(&root);
cfgUnloadConfig(&cfg);
closelog();
return 0;
}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>