This commit was generated by cvs2svn to track changes on a CVS vendor
[unix-history] / sbin / init.chmr / fake_syslog.c
CommitLineData
800ffe89
NW
1/*
2 * Warning: extremely XXX
3 * fake syslog to write to stderr, for standalone test version of init
4 */
9a6eb889
NW
5
6
7#ifdef FAKE_SYSLOG
8
9
10#include <unistd.h>
11#include <string.h>
800ffe89 12#include <stdarg.h>
9a6eb889
NW
13#include <errno.h>
14#include <sys/file.h>
800ffe89
NW
15
16
9a6eb889
NW
17#ifdef TESTRUN
18# define FAKE_LOGFILE "/dev/tty"
19#else
20# define FAKE_LOGFILE "/dev/console"
21#endif
22
23
24static char *
25itoa(i)
26 int i;
27{
28 static char buf[12];
29 char *s;
30 int minflg = 0;
31
32 s = &buf[11];
33 *s = '\0';
34 if (i < 0)
35 minflg = 1, i = -i;
36 do {
37 *(--s) = (i % 10) + '0';
38 i /= 10;
39 } while (i);
40 if (minflg)
41 *(--s) = '-';
42 return(s);
43}
44
45
46static int _log_fd = 2;
47static const char *_log_id = "";
800ffe89
NW
48
49
50void
9a6eb889
NW
51openlog(ident, logopt, facility)
52const char *ident;
53int logopt, facility;
800ffe89 54{
9a6eb889
NW
55 if (ident)
56 _log_id = ident;
57 if (_log_fd >= 0)
58 close(_log_fd);
59 _log_fd = open(FAKE_LOGFILE, O_WRONLY | O_NONBLOCK, 0);
800ffe89
NW
60}
61
62
63void
9a6eb889 64vsyslog(int pri, const char *fmt, va_list ap)
800ffe89 65{
9a6eb889
NW
66 const char *s, *t;
67 int saved_errno = errno;
800ffe89 68
9a6eb889
NW
69 if (write(_log_fd, "", 0) < 0)
70 openlog(NULL, 0, 0);
71 write(_log_fd, _log_id, strlen(_log_id));
72 if (*_log_id) write(_log_fd, ": ", 2);
73 for (s=fmt; *s; s++)
74 if (*s == '%')
75 switch (*(++s)) {
76 case '\0':
77 s--; break;
78 case '%':
79 write(_log_fd, s, 1); break;
80 case 's':
81 t = va_arg(ap, char *);
82 write(_log_fd, t, strlen(t));
83 break;
84 case 'm':
85#ifdef SMALL
86 write(_log_fd, "Error ", 6);
87 t = itoa(saved_errno);
88#else
89 t = strerror(saved_errno);
90#endif
91 write(_log_fd, t, strlen(t));
92 break;
93 case 'd':
94 t = itoa(va_arg(ap, int));
95 write(_log_fd, t, strlen(t));
96 break;
97 default:
98 write(_log_fd, s-1, 2);
99 }
100 else
101 write(_log_fd, s, 1);
102 write(_log_fd, "\n", 1);
800ffe89
NW
103}
104
9a6eb889 105
800ffe89 106void
9a6eb889 107syslog(int pri, const char *fmt, ...)
800ffe89 108{
9a6eb889
NW
109va_list ap;
110
111 va_start(ap, fmt);
112 vsyslog(pri, fmt, ap);
113 va_end(ap);
800ffe89
NW
114}
115
116
117void
118closelog(void)
119{
9a6eb889
NW
120 close(_log_fd);
121 _log_fd = -1;
800ffe89 122}
9a6eb889
NW
123
124
125#endif