Initial import.
[doldaconnect.git] / daemon / log.c
1 /*
2  *  Dolda Connect - Modular multiuser Direct Connect-style client
3  *  Copyright (C) 2004 Fredrik Tolf (fredrik@dolda2000.com)
4  *  
5  *  This program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2 of the License, or
8  *  (at your option) any later version.
9  *  
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *  
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program; if not, write to the Free Software
17  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18 */
19 #include <stdlib.h>
20 #include <syslog.h>
21 #include <stdio.h>
22 #include <stdarg.h>
23 #include <sys/uio.h>
24 #include <string.h>
25
26 #ifdef HAVE_CONFIG_H
27 #include <config.h>
28 #endif
29 #include "utils.h"
30
31 int logtostderr, logtosyslog;
32 int syslogfac = LOG_DAEMON;
33 static int inited = 0;
34
35 void flog(int priority, char *format, ...)
36 {
37     va_list args;
38     char *b;
39     struct iovec iov[2];
40     
41     va_start(args, format);
42     if((b = vsprintf2(format, args)) == NULL)
43     {
44         if(logtostderr)
45             fputs("No memory available for logging\n", stderr);
46         if(logtosyslog)
47             syslog(LOG_CRIT, "No memory available for logging");
48     }
49     va_end(args);
50     if(logtostderr)
51     {
52         iov[0].iov_base = b;
53         iov[0].iov_len = strlen(b);
54         iov[1].iov_base = "\n";
55         iov[1].iov_len = 1;
56         writev(2, iov, 2);
57     }
58     if(logtosyslog)
59         syslog(priority, "%s", b);
60     free(b);
61 }
62
63 void initlog(void)
64 {
65     if(inited)
66     {
67         closelog();
68         openlog("doldacond", LOG_PID, syslogfac);
69     } else {
70         openlog("doldacond", LOG_PID, syslogfac);
71         logtostderr = 1;
72         logtosyslog = 0;
73         inited = 1;
74     }
75 }