X-Git-Url: http://sigaev.ru/git/gitweb.cgi?p=trinked.git;a=blobdiff_plain;f=main.c;fp=main.c;h=6bbd6cf89f2c93bc820b8b46cf92cd80ecb2b292;hp=ff77ec5c05a32a3e9661a7d789bfb795718cc940;hb=2792e00e87c89cc11d9214733d6d52b127d15a07;hpb=5ccb9f10a0ef71a8b97934ca52123e763f455820 diff --git a/main.c b/main.c index ff77ec5..6bbd6cf 100644 --- a/main.c +++ b/main.c @@ -26,6 +26,7 @@ *------------------------------------------------------------------------- */ +#include #include #include #include @@ -35,13 +36,13 @@ #include #include +#include #include static char* dbdir = NULL; static int period = 300; /* in seconds */ static int tics = 1; static char* pidfile = NULL; -static char* logfile = NULL; static bool daemonize = false; static char tfile[MAXPATHLEN], ofile[MAXPATHLEN]; @@ -52,7 +53,7 @@ static void usage(const char *errmsg) { puts("trinketd - collecting info from AtomPro"); puts("Copyright (c) 2016, Teodor Sigaev "); - puts("trinketd [-d] [-l logfile] [-p pidfile] [-P period] [-D datadir] [-i tics]"); + puts("trinketd [-d] [-p pidfile] [-P period] [-D datadir] [-i tics]"); if (errmsg) { puts(""); @@ -71,20 +72,20 @@ main_loop() { prevDose = malloc(sizeof(*prevDose) * (tics + 1)); if (!prevDose) { - fprintf(stderr, "could not allocate array, exiting...\n"); + tlog(TL_CRIT, "could not allocate array, exiting..."); return; } while(42) { if (trinketOpen() != ERR_OK) { - fprintf(stderr, "trinketOpen fails\n"); + tlog(TL_ALARM, "trinketOpen fails"); sleep(1); continue; } if (trinketGetCumDose(&curDose) != ERR_OK) { - fprintf(stderr, "trinketGetCumDose fails\n"); + tlog(TL_ALARM, "trinketGetCumDose fails"); trinketClose(); sleep(1); continue; @@ -109,7 +110,7 @@ main_loop() { if (daemonize) { if ((fh = fopen(tfile, "w")) == NULL) { - fprintf(stderr, "fopen fails\n"); + tlog(TL_ALARM, "fopen fails: %s", strerror(errno)); successOpen = false; } } @@ -138,9 +139,9 @@ extern int opterr, optind; int main(int argn, char* argv[]) { - int i; - int pidfd, - logfd; + int i; + int pidfd; + char *logfile = NULL; opterr = 0; while((i=getopt(argn,argv,"dD:i:l:p:P:h")) != EOF) { @@ -190,35 +191,31 @@ main(int argn, char* argv[]) { usage("could not write pidfile"); } - if (logfile) { - logfd = open(logfile, O_CREAT | O_WRONLY | O_APPEND, 0666); - if (logfd < 0) - usage("could not write logfile"); - } - if (daemonize) { + opentlog((logfile == NULL) ? TL_OPEN_SYSLOG : TL_OPEN_FILE, + TL_INFO, logfile); + if (daemon(0, 0) == -1) - usage("could not daemonize"); + tlog(TL_CRIT | TL_EXIT, "could not daemonize"); + } else { + opentlog(TL_OPEN_STDERR | TL_OPEN_FILE, TL_INFO, logfile); } + + if (pidfile) { char pid[64]; snprintf(pid, sizeof(pid), "%lld", (long long)getpid()); if (write(pidfd, pid, strlen(pid)) != strlen(pid)) - usage("could not write pid"); + tlog(TL_CRIT | TL_EXIT, "could not write pid"); close(pidfd); } - if (logfile) { - dup2(logfd, fileno(stderr)); - close(logfd); - } + tlog(TL_CRIT, "trinketd started, pid: %lld", (long long)getpid()); - if (hid_init() < 0) { - fprintf(stderr, "hid_init fails\n"); - exit(1); - } + if (hid_init() < 0) + tlog(TL_CRIT | TL_EXIT, "hid_init fails"); if (dbdir) { snprintf(tfile, MAXPATHLEN, "%s/trinket.tmp", dbdir);