Blame
Date:
Thu Jun 9 16:21:57 2022 UTC
Message:
use getprogname(3) instead of __progname might help with portability, see for e.g. GitHub issue #1
001
2022-02-16
op
/* $OpenBSD: log.c,v 1.1 2018/07/10 16:39:54 florian Exp $ */
002
2022-02-16
op
003
2022-02-16
op
/*
004
2022-02-16
op
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
005
2022-02-16
op
*
006
2022-02-16
op
* Permission to use, copy, modify, and distribute this software for any
007
2022-02-16
op
* purpose with or without fee is hereby granted, provided that the above
008
2022-02-16
op
* copyright notice and this permission notice appear in all copies.
009
2022-02-16
op
*
010
2022-02-16
op
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
011
2022-02-16
op
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
012
2022-02-16
op
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
013
2022-02-16
op
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
014
2022-02-16
op
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
015
2022-02-16
op
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
016
2022-02-16
op
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
017
2022-02-16
op
*/
018
2022-02-16
op
019
2022-02-16
op
#include <stdio.h>
020
2022-02-16
op
#include <stdlib.h>
021
2022-02-16
op
#include <stdarg.h>
022
2022-02-16
op
#include <string.h>
023
2022-02-16
op
#include <syslog.h>
024
2022-02-16
op
#include <errno.h>
025
2022-02-16
op
#include <time.h>
026
2022-02-16
op
027
2022-02-16
op
#include "log.h"
028
2022-02-16
op
029
2022-02-16
op
static int debug;
030
2022-02-16
op
static int verbose;
031
2022-02-16
op
static const char *log_procname;
032
2022-02-16
op
033
2022-02-16
op
void
034
2022-02-16
op
log_init(int n_debug, int facility)
035
2022-02-16
op
{
036
2022-02-16
op
debug = n_debug;
037
2022-02-16
op
verbose = n_debug;
038
2022-06-09
op
log_procinit(getprogname());
039
2022-02-16
op
040
2022-02-16
op
if (!debug)
041
2022-06-09
op
openlog(getprogname(), LOG_PID | LOG_NDELAY, facility);
042
2022-02-16
op
043
2022-02-16
op
tzset();
044
2022-02-16
op
}
045
2022-02-16
op
046
2022-02-16
op
void
047
2022-02-16
op
log_procinit(const char *procname)
048
2022-02-16
op
{
049
2022-02-16
op
if (procname != NULL)
050
2022-02-16
op
log_procname = procname;
051
2022-02-16
op
}
052
2022-02-16
op
053
2022-02-16
op
void
054
2022-02-16
op
log_setverbose(int v)
055
2022-02-16
op
{
056
2022-02-16
op
verbose = v;
057
2022-02-16
op
}
058
2022-02-16
op
059
2022-02-16
op
int
060
2022-02-16
op
log_getverbose(void)
061
2022-02-16
op
{
062
2022-02-16
op
return (verbose);
063
2022-02-16
op
}
064
2022-02-16
op
065
2022-02-16
op
void
066
2022-02-16
op
logit(int pri, const char *fmt, ...)
067
2022-02-16
op
{
068
2022-02-16
op
va_list ap;
069
2022-02-16
op
070
2022-02-16
op
va_start(ap, fmt);
071
2022-02-16
op
vlog(pri, fmt, ap);
072
2022-02-16
op
va_end(ap);
073
2022-02-16
op
}
074
2022-02-16
op
075
2022-02-16
op
void
076
2022-02-16
op
vlog(int pri, const char *fmt, va_list ap)
077
2022-02-16
op
{
078
2022-02-16
op
char *nfmt;
079
2022-02-16
op
int saved_errno = errno;
080
2022-02-16
op
081
2022-02-16
op
if (debug) {
082
2022-02-16
op
/* best effort in out of mem situations */
083
2022-02-16
op
if (asprintf(&nfmt, "%s\n", fmt) == -1) {
084
2022-02-16
op
vfprintf(stderr, fmt, ap);
085
2022-02-16
op
fprintf(stderr, "\n");
086
2022-02-16
op
} else {
087
2022-02-16
op
vfprintf(stderr, nfmt, ap);
088
2022-02-16
op
free(nfmt);
089
2022-02-16
op
}
090
2022-02-16
op
fflush(stderr);
091
2022-02-16
op
} else
092
2022-02-16
op
vsyslog(pri, fmt, ap);
093
2022-02-16
op
094
2022-02-16
op
errno = saved_errno;
095
2022-02-16
op
}
096
2022-02-16
op
097
2022-02-16
op
void
098
2022-02-16
op
log_warn(const char *emsg, ...)
099
2022-02-16
op
{
100
2022-02-16
op
char *nfmt;
101
2022-02-16
op
va_list ap;
102
2022-02-16
op
int saved_errno = errno;
103
2022-02-16
op
104
2022-02-16
op
/* best effort to even work in out of memory situations */
105
2022-02-16
op
if (emsg == NULL)
106
2022-02-16
op
logit(LOG_ERR, "%s", strerror(saved_errno));
107
2022-02-16
op
else {
108
2022-02-16
op
va_start(ap, emsg);
109
2022-02-16
op
110
2022-02-16
op
if (asprintf(&nfmt, "%s: %s", emsg,
111
2022-02-16
op
strerror(saved_errno)) == -1) {
112
2022-02-16
op
/* we tried it... */
113
2022-02-16
op
vlog(LOG_ERR, emsg, ap);
114
2022-02-16
op
logit(LOG_ERR, "%s", strerror(saved_errno));
115
2022-02-16
op
} else {
116
2022-02-16
op
vlog(LOG_ERR, nfmt, ap);
117
2022-02-16
op
free(nfmt);
118
2022-02-16
op
}
119
2022-02-16
op
va_end(ap);
120
2022-02-16
op
}
121
2022-02-16
op
122
2022-02-16
op
errno = saved_errno;
123
2022-02-16
op
}
124
2022-02-16
op
125
2022-02-16
op
void
126
2022-02-16
op
log_warnx(const char *emsg, ...)
127
2022-02-16
op
{
128
2022-02-16
op
va_list ap;
129
2022-02-16
op
130
2022-02-16
op
va_start(ap, emsg);
131
2022-02-16
op
vlog(LOG_ERR, emsg, ap);
132
2022-02-16
op
va_end(ap);
133
2022-02-16
op
}
134
2022-02-16
op
135
2022-02-16
op
void
136
2022-02-16
op
log_info(const char *emsg, ...)
137
2022-02-16
op
{
138
2022-02-16
op
va_list ap;
139
2022-02-16
op
140
2022-02-16
op
va_start(ap, emsg);
141
2022-02-16
op
vlog(LOG_INFO, emsg, ap);
142
2022-02-16
op
va_end(ap);
143
2022-02-16
op
}
144
2022-02-16
op
145
2022-02-16
op
void
146
2022-02-16
op
log_debug(const char *emsg, ...)
147
2022-02-16
op
{
148
2022-02-16
op
va_list ap;
149
2022-02-16
op
150
2022-02-16
op
if (verbose) {
151
2022-02-16
op
va_start(ap, emsg);
152
2022-02-16
op
vlog(LOG_DEBUG, emsg, ap);
153
2022-02-16
op
va_end(ap);
154
2022-02-16
op
}
155
2022-02-16
op
}
156
2022-02-16
op
157
2022-02-16
op
static void
158
2022-02-16
op
vfatalc(int code, const char *emsg, va_list ap)
159
2022-02-16
op
{
160
2022-02-16
op
static char s[BUFSIZ];
161
2022-02-16
op
const char *sep;
162
2022-02-16
op
163
2022-02-16
op
if (emsg != NULL) {
164
2022-02-16
op
(void)vsnprintf(s, sizeof(s), emsg, ap);
165
2022-02-16
op
sep = ": ";
166
2022-02-16
op
} else {
167
2022-02-16
op
s[0] = '\0';
168
2022-02-16
op
sep = "";
169
2022-02-16
op
}
170
2022-02-16
op
if (code)
171
2022-02-16
op
logit(LOG_CRIT, "fatal in %s: %s%s%s",
172
2022-02-16
op
log_procname, s, sep, strerror(code));
173
2022-02-16
op
else
174
2022-02-16
op
logit(LOG_CRIT, "fatal in %s%s%s", log_procname, sep, s);
175
2022-02-16
op
}
176
2022-02-16
op
177
2022-02-16
op
void
178
2022-02-16
op
fatal(const char *emsg, ...)
179
2022-02-16
op
{
180
2022-02-16
op
va_list ap;
181
2022-02-16
op
182
2022-02-16
op
va_start(ap, emsg);
183
2022-02-16
op
vfatalc(errno, emsg, ap);
184
2022-02-16
op
va_end(ap);
185
2022-02-16
op
exit(1);
186
2022-02-16
op
}
187
2022-02-16
op
188
2022-02-16
op
void
189
2022-02-16
op
fatalx(const char *emsg, ...)
190
2022-02-16
op
{
191
2022-02-16
op
va_list ap;
192
2022-02-16
op
193
2022-02-16
op
va_start(ap, emsg);
194
2022-02-16
op
vfatalc(0, emsg, ap);
195
2022-02-16
op
va_end(ap);
196
2022-02-16
op
exit(1);
197
2022-02-16
op
}
Omar Polo