xref: /netbsd-src/lib/libc/compat/gen/compat_syslog.c (revision ace5b9b5feb0e7608bd2da7a617428d2e1cf8aa3)
1*ace5b9b5Schristos /*	$NetBSD: compat_syslog.c,v 1.3 2024/01/20 14:52:45 christos Exp $	*/
2fea19ff7Schristos 
3fea19ff7Schristos /*-
4fea19ff7Schristos  * Copyright (c) 2012 The NetBSD Foundation, Inc.
5fea19ff7Schristos  * All rights reserved.
6fea19ff7Schristos  *
7fea19ff7Schristos  * This code is derived from software contributed to The NetBSD Foundation
8fea19ff7Schristos  * by Christos Zoulas.
9fea19ff7Schristos  *
10fea19ff7Schristos  * Redistribution and use in source and binary forms, with or without
11fea19ff7Schristos  * modification, are permitted provided that the following conditions
12fea19ff7Schristos  * are met:
13fea19ff7Schristos  * 1. Redistributions of source code must retain the above copyright
14fea19ff7Schristos  *    notice, this list of conditions and the following disclaimer.
15fea19ff7Schristos  * 2. Redistributions in binary form must reproduce the above copyright
16fea19ff7Schristos  *    notice, this list of conditions and the following disclaimer in the
17fea19ff7Schristos  *    documentation and/or other materials provided with the distribution.
18fea19ff7Schristos  *
19fea19ff7Schristos  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20fea19ff7Schristos  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21fea19ff7Schristos  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22fea19ff7Schristos  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23fea19ff7Schristos  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24fea19ff7Schristos  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25fea19ff7Schristos  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26fea19ff7Schristos  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27fea19ff7Schristos  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28fea19ff7Schristos  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29fea19ff7Schristos  * POSSIBILITY OF SUCH DAMAGE.
30fea19ff7Schristos  */
31fea19ff7Schristos 
32fea19ff7Schristos #include "namespace.h"
33fea19ff7Schristos #include <sys/cdefs.h>
34fea19ff7Schristos 
35fea19ff7Schristos #define	__LIBC12_SOURCE__
36fea19ff7Schristos #include <stdarg.h>
37fea19ff7Schristos 
38fea19ff7Schristos #include <sys/types.h>
39fea19ff7Schristos #include <sys/syslog.h>
40*ace5b9b5Schristos #include <compat/include/extern.h>
41fea19ff7Schristos #include <compat/sys/syslog.h>
42fea19ff7Schristos 
43fea19ff7Schristos #ifdef __weak_alias
__weak_alias(closelog_r,_closelog_r)44fea19ff7Schristos __weak_alias(closelog_r,_closelog_r)
45fea19ff7Schristos __weak_alias(openlog_r,_openlog_r)
46fea19ff7Schristos __weak_alias(setlogmask_r,_setlogmask_r)
47fea19ff7Schristos __weak_alias(syslog_r,_syslog_r)
48fea19ff7Schristos __weak_alias(vsyslog_r,_vsyslog_r)
49fea19ff7Schristos __weak_alias(syslogp_r,_syslogp_r)
50fea19ff7Schristos __weak_alias(vsyslogp_r,_vsyslogp_r)
51a9bb3b0cSchristos 
52a9bb3b0cSchristos __weak_alias(syslog_ss,_syslog_ss)
53a9bb3b0cSchristos __weak_alias(vsyslog_ss,_vsyslog_ss)
54a9bb3b0cSchristos __weak_alias(syslogp_ss,_syslogp_ss)
55a9bb3b0cSchristos __weak_alias(vsyslogp_ss,_vsyslogp_ss)
56fea19ff7Schristos #endif /* __weak_alias */
57fea19ff7Schristos 
58fea19ff7Schristos __warn_references(closelog_r,
59fea19ff7Schristos     "warning: reference to compatibility closelog_r();"
60fea19ff7Schristos     " include <sys/syslog.h> for correct reference")
61fea19ff7Schristos __warn_references(openlog_r,
62fea19ff7Schristos     "warning: reference to compatibility openlog_r();"
63fea19ff7Schristos     " include <sys/syslog.h> for correct reference")
64fea19ff7Schristos __warn_references(setlogmask_r,
65fea19ff7Schristos     "warning: reference to compatibility setlogmask_r();"
66fea19ff7Schristos     " include <sys/syslog.h> for correct reference")
67fea19ff7Schristos __warn_references(syslog_r,
68fea19ff7Schristos     "warning: reference to compatibility syslog_r();"
69fea19ff7Schristos     " include <sys/syslog.h> for correct reference")
70fea19ff7Schristos __warn_references(vsyslog_r,
71fea19ff7Schristos     "warning: reference to compatibility vsyslog_r();"
72fea19ff7Schristos     " include <sys/syslog.h> for correct reference")
73fea19ff7Schristos __warn_references(syslogp_r,
74fea19ff7Schristos     "warning: reference to compatibility syslogp_r();"
75fea19ff7Schristos     " include <sys/syslog.h> for correct reference")
76fea19ff7Schristos __warn_references(vsyslogp_r,
77fea19ff7Schristos     "warning: reference to compatibility vsyslogp_r();"
78fea19ff7Schristos     " include <sys/syslog.h> for correct reference")
79fea19ff7Schristos 
80fea19ff7Schristos static void
81fea19ff7Schristos syslog_data_convert(struct syslog_data *d, const struct syslog_data60 *s)
82fea19ff7Schristos {
83fea19ff7Schristos 	d->log_file = s->log_file;
84fea19ff7Schristos 	d->log_connected = s->connected;
85fea19ff7Schristos 	d->log_opened = s->opened;
86fea19ff7Schristos 	d->log_stat = s->log_stat;
87fea19ff7Schristos 	d->log_tag = s->log_tag;
88fea19ff7Schristos 	d->log_fac = s->log_fac;
89fea19ff7Schristos 	d->log_mask = s->log_mask;
90fea19ff7Schristos }
91fea19ff7Schristos 
92fea19ff7Schristos void
closelog_r(struct syslog_data60 * data60)93fea19ff7Schristos closelog_r(struct syslog_data60 *data60)
94fea19ff7Schristos {
95fea19ff7Schristos 	struct syslog_data data = SYSLOG_DATA_INIT;
96fea19ff7Schristos 	syslog_data_convert(&data, data60);
97fea19ff7Schristos 	__closelog_r60(&data);
98fea19ff7Schristos }
99fea19ff7Schristos 
100fea19ff7Schristos void
openlog_r(const char * ident,int logstat,int logfac,struct syslog_data60 * data60)101fea19ff7Schristos openlog_r(const char *ident, int logstat, int logfac,
102fea19ff7Schristos     struct syslog_data60 *data60)
103fea19ff7Schristos {
104fea19ff7Schristos 	struct syslog_data data = SYSLOG_DATA_INIT;
105fea19ff7Schristos 	syslog_data_convert(&data, data60);
106fea19ff7Schristos 	__openlog_r60(ident, logstat, logfac, &data);
107fea19ff7Schristos }
108fea19ff7Schristos 
109fea19ff7Schristos int
setlogmask_r(int pmask,struct syslog_data60 * data60)110fea19ff7Schristos setlogmask_r(int pmask, struct syslog_data60 *data60)
111fea19ff7Schristos {
112fea19ff7Schristos 	struct syslog_data data = SYSLOG_DATA_INIT;
113fea19ff7Schristos 	syslog_data_convert(&data, data60);
114fea19ff7Schristos 	return __setlogmask_r60(pmask, &data);
115fea19ff7Schristos }
116fea19ff7Schristos 
117fea19ff7Schristos void
syslog_r(int pri,struct syslog_data60 * data60,const char * fmt,...)118fea19ff7Schristos syslog_r(int pri, struct syslog_data60 *data60, const char *fmt, ...)
119fea19ff7Schristos {
120fea19ff7Schristos 	va_list ap;
121fea19ff7Schristos 	struct syslog_data data = SYSLOG_DATA_INIT;
122fea19ff7Schristos 	syslog_data_convert(&data, data60);
123fea19ff7Schristos 
124fea19ff7Schristos 	va_start(ap, fmt);
125fea19ff7Schristos 	__vsyslog_r60(pri, &data, fmt, ap);
126fea19ff7Schristos 	va_end(ap);
127fea19ff7Schristos }
128fea19ff7Schristos 
129fea19ff7Schristos void
vsyslog_r(int pri,struct syslog_data60 * data60,const char * fmt,__va_list ap)130fea19ff7Schristos vsyslog_r(int pri, struct syslog_data60 *data60, const char *fmt, __va_list ap)
131fea19ff7Schristos {
132fea19ff7Schristos 	struct syslog_data data = SYSLOG_DATA_INIT;
133fea19ff7Schristos 	syslog_data_convert(&data, data60);
134fea19ff7Schristos 	__vsyslog_r60(pri, &data, fmt, ap);
135fea19ff7Schristos }
136a9bb3b0cSchristos 
137fea19ff7Schristos void
syslogp_r(int pri,struct syslog_data60 * data60,const char * msgid,const char * sdfmt,const char * msgfmt,...)138fea19ff7Schristos syslogp_r(int pri, struct syslog_data60 *data60, const char *msgid,
139fea19ff7Schristos     const char *sdfmt, const char *msgfmt, ...)
140fea19ff7Schristos {
141fea19ff7Schristos 	va_list ap;
142fea19ff7Schristos 	struct syslog_data data = SYSLOG_DATA_INIT;
143fea19ff7Schristos 	syslog_data_convert(&data, data60);
144fea19ff7Schristos 
145fea19ff7Schristos 	va_start(ap, msgfmt);
146fea19ff7Schristos 	__vsyslogp_r60(pri, &data, msgid, sdfmt, msgfmt, ap);
147fea19ff7Schristos 	va_end(ap);
148fea19ff7Schristos }
149fea19ff7Schristos 
150fea19ff7Schristos void
vsyslogp_r(int pri,struct syslog_data60 * data60,const char * msgid,const char * sdfmt,const char * msgfmt,__va_list ap)151fea19ff7Schristos vsyslogp_r(int pri, struct syslog_data60 *data60, const char *msgid,
152fea19ff7Schristos     const char *sdfmt, const char *msgfmt, __va_list ap)
153fea19ff7Schristos {
154fea19ff7Schristos 	struct syslog_data data = SYSLOG_DATA_INIT;
155fea19ff7Schristos 	syslog_data_convert(&data, data60);
156fea19ff7Schristos 
157fea19ff7Schristos 	__vsyslogp_r60(pri, &data, msgid, sdfmt, msgfmt, ap);
158fea19ff7Schristos }
159a9bb3b0cSchristos 
160a9bb3b0cSchristos /*
161a9bb3b0cSchristos  * These are semi-private
162a9bb3b0cSchristos  */
163a9bb3b0cSchristos #define LOG_SIGNAL_SAFE (int)0x80000000
164a9bb3b0cSchristos 
165a9bb3b0cSchristos void
syslog_ss(int pri,struct syslog_data60 * data,const char * fmt,...)166a9bb3b0cSchristos syslog_ss(int pri, struct syslog_data60 *data, const char *fmt, ...)
167a9bb3b0cSchristos {
168a9bb3b0cSchristos 	va_list ap;
169a9bb3b0cSchristos 
170a9bb3b0cSchristos 	va_start(ap, fmt);
171a9bb3b0cSchristos 	vsyslog_r(pri | LOG_SIGNAL_SAFE, data, fmt, ap);
172a9bb3b0cSchristos 	va_end(ap);
173a9bb3b0cSchristos }
174a9bb3b0cSchristos 
175a9bb3b0cSchristos void
syslogp_ss(int pri,struct syslog_data60 * data,const char * msgid,const char * sdfmt,const char * msgfmt,...)176a9bb3b0cSchristos syslogp_ss(int pri, struct syslog_data60 *data, const char *msgid,
177a9bb3b0cSchristos     const char *sdfmt, const char *msgfmt, ...)
178a9bb3b0cSchristos {
179a9bb3b0cSchristos 	va_list ap;
180a9bb3b0cSchristos 
181a9bb3b0cSchristos 	va_start(ap, msgfmt);
182a9bb3b0cSchristos 	vsyslogp_r(pri | LOG_SIGNAL_SAFE, data, msgid, sdfmt, msgfmt, ap);
183a9bb3b0cSchristos 	va_end(ap);
184a9bb3b0cSchristos }
185a9bb3b0cSchristos 
186a9bb3b0cSchristos void
vsyslog_ss(int pri,struct syslog_data60 * data,const char * fmt,va_list ap)187a9bb3b0cSchristos vsyslog_ss(int pri, struct syslog_data60 *data, const char *fmt, va_list ap)
188a9bb3b0cSchristos {
189a9bb3b0cSchristos 	vsyslog_r(pri | LOG_SIGNAL_SAFE, data, fmt, ap);
190a9bb3b0cSchristos }
191a9bb3b0cSchristos 
192a9bb3b0cSchristos void
vsyslogp_ss(int pri,struct syslog_data60 * data,const char * msgid,const char * sdfmt,const char * msgfmt,va_list ap)193a9bb3b0cSchristos vsyslogp_ss(int pri, struct syslog_data60 *data, const char *msgid,
194a9bb3b0cSchristos     const char *sdfmt, const char *msgfmt, va_list ap)
195a9bb3b0cSchristos {
196a9bb3b0cSchristos 	vsyslogp_r(pri | LOG_SIGNAL_SAFE, data, msgid, sdfmt, msgfmt, ap);
197a9bb3b0cSchristos }
198