D-Bus  1.10.14
vsyslog.c
1 /* $Id: vsyslog.c,v 1.2 2000/09/20 03:42:30 robert Exp $
2 /*
3  * Copyright (c) 1994-1996 Sam Leffler
4  * Copyright (c) 1994-1996 Silicon Graphics, Inc.
5  * HylaFAX is a trademark of Silicon Graphics, Inc.
6  *
7  * Permission to use, copy, modify, distribute, and sell this software and
8  * its documentation for any purpose is hereby granted without fee, provided
9  * that (i) the above copyright notices and this permission notice appear in
10  * all copies of the software and related documentation, and (ii) the names of
11  * Sam Leffler and Silicon Graphics may not be used in any advertising or
12  * publicity relating to the software without the specific, prior written
13  * permission of Sam Leffler and Silicon Graphics.
14  *
15  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
17  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
18  *
19  * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
20  * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
21  * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
22  * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23  * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24  * OF THIS SOFTWARE.
25  */
26 #include <stdio.h>
27 #include <sys/types.h>
28 #include <stdarg.h>
29 #include <syslog.h>
30 #include <string.h>
31 #include <errno.h>
32 
33 void
34 vsyslog(int pri, const char* fmt, va_list ap)
35 {
36  char tbuf[2048], fmt_cpy[1024];
37  char* cp;
38  char c;
39 
40  /* substitute error message for %m */
41  for (cp = fmt_cpy; c = *fmt; ++fmt) {
42  if (c == '%' && fmt[1] == 'm') {
43  const char* dp;
44  ++fmt;
45  for (dp = strerror(errno); *cp = *dp++; ++cp)
46  ;
47  } else
48  *cp++ = c;
49  *cp = '\0';
50  }
51  (void) vsnprintf(tbuf, sizeof(tbuf), fmt_cpy, ap);
52  (void) syslog(pri, "%s", tbuf);
53 }
54