xref: /aosp_15_r20/bionic/libc/include/syslog.h (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker /*
2*8d67ca89SAndroid Build Coastguard Worker  * Copyright (C) 2008 The Android Open Source Project
3*8d67ca89SAndroid Build Coastguard Worker  * All rights reserved.
4*8d67ca89SAndroid Build Coastguard Worker  *
5*8d67ca89SAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
6*8d67ca89SAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
7*8d67ca89SAndroid Build Coastguard Worker  * are met:
8*8d67ca89SAndroid Build Coastguard Worker  *  * Redistributions of source code must retain the above copyright
9*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
10*8d67ca89SAndroid Build Coastguard Worker  *  * Redistributions in binary form must reproduce the above copyright
11*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in
12*8d67ca89SAndroid Build Coastguard Worker  *    the documentation and/or other materials provided with the
13*8d67ca89SAndroid Build Coastguard Worker  *    distribution.
14*8d67ca89SAndroid Build Coastguard Worker  *
15*8d67ca89SAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16*8d67ca89SAndroid Build Coastguard Worker  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17*8d67ca89SAndroid Build Coastguard Worker  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18*8d67ca89SAndroid Build Coastguard Worker  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19*8d67ca89SAndroid Build Coastguard Worker  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20*8d67ca89SAndroid Build Coastguard Worker  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21*8d67ca89SAndroid Build Coastguard Worker  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22*8d67ca89SAndroid Build Coastguard Worker  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23*8d67ca89SAndroid Build Coastguard Worker  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24*8d67ca89SAndroid Build Coastguard Worker  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25*8d67ca89SAndroid Build Coastguard Worker  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26*8d67ca89SAndroid Build Coastguard Worker  * SUCH DAMAGE.
27*8d67ca89SAndroid Build Coastguard Worker  */
28*8d67ca89SAndroid Build Coastguard Worker /*
29*8d67ca89SAndroid Build Coastguard Worker  * Copyright (c) 1982, 1986, 1988, 1993
30*8d67ca89SAndroid Build Coastguard Worker  *	The Regents of the University of California.  All rights reserved.
31*8d67ca89SAndroid Build Coastguard Worker  *
32*8d67ca89SAndroid Build Coastguard Worker  * Redistribution and use in source and binary forms, with or without
33*8d67ca89SAndroid Build Coastguard Worker  * modification, are permitted provided that the following conditions
34*8d67ca89SAndroid Build Coastguard Worker  * are met:
35*8d67ca89SAndroid Build Coastguard Worker  * 1. Redistributions of source code must retain the above copyright
36*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer.
37*8d67ca89SAndroid Build Coastguard Worker  * 2. Redistributions in binary form must reproduce the above copyright
38*8d67ca89SAndroid Build Coastguard Worker  *    notice, this list of conditions and the following disclaimer in the
39*8d67ca89SAndroid Build Coastguard Worker  *    documentation and/or other materials provided with the distribution.
40*8d67ca89SAndroid Build Coastguard Worker  * 3. Neither the name of the University nor the names of its contributors
41*8d67ca89SAndroid Build Coastguard Worker  *    may be used to endorse or promote products derived from this software
42*8d67ca89SAndroid Build Coastguard Worker  *    without specific prior written permission.
43*8d67ca89SAndroid Build Coastguard Worker  *
44*8d67ca89SAndroid Build Coastguard Worker  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
45*8d67ca89SAndroid Build Coastguard Worker  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
46*8d67ca89SAndroid Build Coastguard Worker  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
47*8d67ca89SAndroid Build Coastguard Worker  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
48*8d67ca89SAndroid Build Coastguard Worker  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
49*8d67ca89SAndroid Build Coastguard Worker  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
50*8d67ca89SAndroid Build Coastguard Worker  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
51*8d67ca89SAndroid Build Coastguard Worker  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
52*8d67ca89SAndroid Build Coastguard Worker  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
53*8d67ca89SAndroid Build Coastguard Worker  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
54*8d67ca89SAndroid Build Coastguard Worker  * SUCH DAMAGE.
55*8d67ca89SAndroid Build Coastguard Worker  */
56*8d67ca89SAndroid Build Coastguard Worker 
57*8d67ca89SAndroid Build Coastguard Worker #pragma once
58*8d67ca89SAndroid Build Coastguard Worker 
59*8d67ca89SAndroid Build Coastguard Worker #include <sys/cdefs.h>
60*8d67ca89SAndroid Build Coastguard Worker 
61*8d67ca89SAndroid Build Coastguard Worker #include <stdio.h>
62*8d67ca89SAndroid Build Coastguard Worker #include <stdarg.h>
63*8d67ca89SAndroid Build Coastguard Worker 
64*8d67ca89SAndroid Build Coastguard Worker __BEGIN_DECLS
65*8d67ca89SAndroid Build Coastguard Worker 
66*8d67ca89SAndroid Build Coastguard Worker /** Corresponds to the Android ERROR log priority. */
67*8d67ca89SAndroid Build Coastguard Worker #define LOG_EMERG 0
68*8d67ca89SAndroid Build Coastguard Worker /** Corresponds to the Android ERROR log priority. */
69*8d67ca89SAndroid Build Coastguard Worker #define LOG_ALERT 1
70*8d67ca89SAndroid Build Coastguard Worker /** Corresponds to the Android ERROR log priority. */
71*8d67ca89SAndroid Build Coastguard Worker #define LOG_CRIT 2
72*8d67ca89SAndroid Build Coastguard Worker /** Corresponds to the Android ERROR log priority. */
73*8d67ca89SAndroid Build Coastguard Worker #define LOG_ERR 3
74*8d67ca89SAndroid Build Coastguard Worker /** Corresponds to the Android WARN log priority. */
75*8d67ca89SAndroid Build Coastguard Worker #define LOG_WARNING 4
76*8d67ca89SAndroid Build Coastguard Worker /** Corresponds to the Android INFO log priority. */
77*8d67ca89SAndroid Build Coastguard Worker #define LOG_NOTICE 5
78*8d67ca89SAndroid Build Coastguard Worker /** Corresponds to the Android INFO log priority. */
79*8d67ca89SAndroid Build Coastguard Worker #define LOG_INFO 6
80*8d67ca89SAndroid Build Coastguard Worker /** Corresponds to the Android DEBUG log priority. */
81*8d67ca89SAndroid Build Coastguard Worker #define LOG_DEBUG 7
82*8d67ca89SAndroid Build Coastguard Worker 
83*8d67ca89SAndroid Build Coastguard Worker #define LOG_PRIMASK 7
84*8d67ca89SAndroid Build Coastguard Worker #define LOG_PRI(x) ((x) & LOG_PRIMASK)
85*8d67ca89SAndroid Build Coastguard Worker #define LOG_MAKEPRI(fac, pri) ((fac) | (pri))
86*8d67ca89SAndroid Build Coastguard Worker 
87*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
88*8d67ca89SAndroid Build Coastguard Worker #define LOG_KERN     (0<<3)
89*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
90*8d67ca89SAndroid Build Coastguard Worker #define LOG_USER     (1<<3)
91*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
92*8d67ca89SAndroid Build Coastguard Worker #define LOG_MAIL     (2<<3)
93*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
94*8d67ca89SAndroid Build Coastguard Worker #define LOG_DAEMON   (3<<3)
95*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
96*8d67ca89SAndroid Build Coastguard Worker #define LOG_AUTH     (4<<3)
97*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
98*8d67ca89SAndroid Build Coastguard Worker #define LOG_SYSLOG   (5<<3)
99*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
100*8d67ca89SAndroid Build Coastguard Worker #define LOG_LPR      (6<<3)
101*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
102*8d67ca89SAndroid Build Coastguard Worker #define LOG_NEWS     (7<<3)
103*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
104*8d67ca89SAndroid Build Coastguard Worker #define LOG_UUCP     (8<<3)
105*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
106*8d67ca89SAndroid Build Coastguard Worker #define LOG_CRON     (9<<3)
107*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
108*8d67ca89SAndroid Build Coastguard Worker #define LOG_AUTHPRIV (10<<3)
109*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
110*8d67ca89SAndroid Build Coastguard Worker #define LOG_FTP      (11<<3)
111*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
112*8d67ca89SAndroid Build Coastguard Worker #define LOG_LOCAL0   (16<<3)
113*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
114*8d67ca89SAndroid Build Coastguard Worker #define LOG_LOCAL1   (17<<3)
115*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
116*8d67ca89SAndroid Build Coastguard Worker #define LOG_LOCAL2   (18<<3)
117*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
118*8d67ca89SAndroid Build Coastguard Worker #define LOG_LOCAL3   (19<<3)
119*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
120*8d67ca89SAndroid Build Coastguard Worker #define LOG_LOCAL4   (20<<3)
121*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
122*8d67ca89SAndroid Build Coastguard Worker #define LOG_LOCAL5   (21<<3)
123*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
124*8d67ca89SAndroid Build Coastguard Worker #define LOG_LOCAL6   (22<<3)
125*8d67ca89SAndroid Build Coastguard Worker /** Currently ignored on Android. */
126*8d67ca89SAndroid Build Coastguard Worker #define LOG_LOCAL7   (23<<3)
127*8d67ca89SAndroid Build Coastguard Worker 
128*8d67ca89SAndroid Build Coastguard Worker #define LOG_NFACILITIES 24
129*8d67ca89SAndroid Build Coastguard Worker #define LOG_FACMASK 0x3f8
130*8d67ca89SAndroid Build Coastguard Worker #define LOG_FAC(x) (((x) >> 3) & (LOG_FACMASK >> 3))
131*8d67ca89SAndroid Build Coastguard Worker 
132*8d67ca89SAndroid Build Coastguard Worker /**
133*8d67ca89SAndroid Build Coastguard Worker  * Converts a log priority into a mask enabling that single priority,
134*8d67ca89SAndroid Build Coastguard Worker  * for use with setlogmask().
135*8d67ca89SAndroid Build Coastguard Worker  */
136*8d67ca89SAndroid Build Coastguard Worker #define LOG_MASK(pri) (1 << (pri))
137*8d67ca89SAndroid Build Coastguard Worker 
138*8d67ca89SAndroid Build Coastguard Worker /**
139*8d67ca89SAndroid Build Coastguard Worker  * Converts a log priority into a mask enabling that priority and all lower
140*8d67ca89SAndroid Build Coastguard Worker  * priorities, for use with setlogmask().
141*8d67ca89SAndroid Build Coastguard Worker  */
142*8d67ca89SAndroid Build Coastguard Worker #define LOG_UPTO(pri) ((1 << ((pri)+1)) - 1)
143*8d67ca89SAndroid Build Coastguard Worker 
144*8d67ca89SAndroid Build Coastguard Worker /** openlog() option ignored on Android. */
145*8d67ca89SAndroid Build Coastguard Worker #define LOG_PID    0x01
146*8d67ca89SAndroid Build Coastguard Worker /** openlog() option ignored on Android. */
147*8d67ca89SAndroid Build Coastguard Worker #define LOG_CONS   0x02
148*8d67ca89SAndroid Build Coastguard Worker /** openlog() option ignored on Android. */
149*8d67ca89SAndroid Build Coastguard Worker #define LOG_ODELAY 0x04
150*8d67ca89SAndroid Build Coastguard Worker /** openlog() option ignored on Android. */
151*8d67ca89SAndroid Build Coastguard Worker #define LOG_NDELAY 0x08
152*8d67ca89SAndroid Build Coastguard Worker /** openlog() option ignored on Android. */
153*8d67ca89SAndroid Build Coastguard Worker #define LOG_NOWAIT 0x10
154*8d67ca89SAndroid Build Coastguard Worker /**
155*8d67ca89SAndroid Build Coastguard Worker  * openlog() option to log to stderr as well as the system log.
156*8d67ca89SAndroid Build Coastguard Worker  *
157*8d67ca89SAndroid Build Coastguard Worker  * Available since API level 34 (ignored before then).
158*8d67ca89SAndroid Build Coastguard Worker  */
159*8d67ca89SAndroid Build Coastguard Worker #define LOG_PERROR 0x20
160*8d67ca89SAndroid Build Coastguard Worker 
161*8d67ca89SAndroid Build Coastguard Worker #if defined(SYSLOG_NAMES)
162*8d67ca89SAndroid Build Coastguard Worker /** A mapping from name to value, used by `facilitynames` and `prioritynames`. */
163*8d67ca89SAndroid Build Coastguard Worker typedef struct _code {
164*8d67ca89SAndroid Build Coastguard Worker   char* c_name;
165*8d67ca89SAndroid Build Coastguard Worker   int c_val;
166*8d67ca89SAndroid Build Coastguard Worker } CODE;
167*8d67ca89SAndroid Build Coastguard Worker /* A bogus facility value for "mark". */
168*8d67ca89SAndroid Build Coastguard Worker #define INTERNAL_MARK LOG_MAKEPRI((LOG_NFACILITIES<<3), 0)
169*8d67ca89SAndroid Build Coastguard Worker /** A table mapping facility names to values. */
170*8d67ca89SAndroid Build Coastguard Worker static const CODE facilitynames[] = {
171*8d67ca89SAndroid Build Coastguard Worker   { "auth", LOG_AUTH, },
172*8d67ca89SAndroid Build Coastguard Worker   { "authpriv", LOG_AUTHPRIV, },
173*8d67ca89SAndroid Build Coastguard Worker   { "cron", LOG_CRON, },
174*8d67ca89SAndroid Build Coastguard Worker   { "daemon", LOG_DAEMON, },
175*8d67ca89SAndroid Build Coastguard Worker   { "ftp", LOG_FTP, },
176*8d67ca89SAndroid Build Coastguard Worker   { "kern", LOG_KERN, },
177*8d67ca89SAndroid Build Coastguard Worker   { "lpr", LOG_LPR, },
178*8d67ca89SAndroid Build Coastguard Worker   { "mail", LOG_MAIL, },
179*8d67ca89SAndroid Build Coastguard Worker   { "mark", INTERNAL_MARK, },
180*8d67ca89SAndroid Build Coastguard Worker   { "news", LOG_NEWS, },
181*8d67ca89SAndroid Build Coastguard Worker   { "security", LOG_AUTH, },
182*8d67ca89SAndroid Build Coastguard Worker   { "syslog", LOG_SYSLOG, },
183*8d67ca89SAndroid Build Coastguard Worker   { "user", LOG_USER, },
184*8d67ca89SAndroid Build Coastguard Worker   { "uucp", LOG_UUCP, },
185*8d67ca89SAndroid Build Coastguard Worker   { "local0", LOG_LOCAL0, },
186*8d67ca89SAndroid Build Coastguard Worker   { "local1", LOG_LOCAL1, },
187*8d67ca89SAndroid Build Coastguard Worker   { "local2", LOG_LOCAL2, },
188*8d67ca89SAndroid Build Coastguard Worker   { "local3", LOG_LOCAL3, },
189*8d67ca89SAndroid Build Coastguard Worker   { "local4", LOG_LOCAL4, },
190*8d67ca89SAndroid Build Coastguard Worker   { "local5", LOG_LOCAL5, },
191*8d67ca89SAndroid Build Coastguard Worker   { "local6", LOG_LOCAL6, },
192*8d67ca89SAndroid Build Coastguard Worker   { "local7", LOG_LOCAL7, },
193*8d67ca89SAndroid Build Coastguard Worker   { NULL, -1, },
194*8d67ca89SAndroid Build Coastguard Worker };
195*8d67ca89SAndroid Build Coastguard Worker /* A bogus priority value for "none". */
196*8d67ca89SAndroid Build Coastguard Worker #define INTERNAL_NOPRI 8
197*8d67ca89SAndroid Build Coastguard Worker /** A table mapping priority names to values. */
198*8d67ca89SAndroid Build Coastguard Worker static const CODE prioritynames[] = {
199*8d67ca89SAndroid Build Coastguard Worker   { "alert", LOG_ALERT, },
200*8d67ca89SAndroid Build Coastguard Worker   { "crit", LOG_CRIT, },
201*8d67ca89SAndroid Build Coastguard Worker   { "debug", LOG_DEBUG, },
202*8d67ca89SAndroid Build Coastguard Worker   { "emerg", LOG_EMERG, },
203*8d67ca89SAndroid Build Coastguard Worker   { "err", LOG_ERR, },
204*8d67ca89SAndroid Build Coastguard Worker   { "error", LOG_ERR, },
205*8d67ca89SAndroid Build Coastguard Worker   { "info", LOG_INFO, },
206*8d67ca89SAndroid Build Coastguard Worker   { "none", INTERNAL_NOPRI, },
207*8d67ca89SAndroid Build Coastguard Worker   { "notice", LOG_NOTICE, },
208*8d67ca89SAndroid Build Coastguard Worker   { "panic", LOG_EMERG, },
209*8d67ca89SAndroid Build Coastguard Worker   { "warn", LOG_WARNING, },
210*8d67ca89SAndroid Build Coastguard Worker   { "warning", LOG_WARNING, },
211*8d67ca89SAndroid Build Coastguard Worker   { NULL, -1, },
212*8d67ca89SAndroid Build Coastguard Worker };
213*8d67ca89SAndroid Build Coastguard Worker #endif
214*8d67ca89SAndroid Build Coastguard Worker 
215*8d67ca89SAndroid Build Coastguard Worker /**
216*8d67ca89SAndroid Build Coastguard Worker  * [closelog(3)](https://man7.org/linux/man-pages/man3/closelog.3.html) does
217*8d67ca89SAndroid Build Coastguard Worker  * nothing on Android.
218*8d67ca89SAndroid Build Coastguard Worker  */
219*8d67ca89SAndroid Build Coastguard Worker void closelog(void);
220*8d67ca89SAndroid Build Coastguard Worker 
221*8d67ca89SAndroid Build Coastguard Worker /**
222*8d67ca89SAndroid Build Coastguard Worker  * [openlog(3)](https://man7.org/linux/man-pages/man3/openlog.3.html) sets
223*8d67ca89SAndroid Build Coastguard Worker  * the log tag to `__prefix`, which can be NULL to return to the default of
224*8d67ca89SAndroid Build Coastguard Worker  * getprogname(). On Android, the other two arguments are ignored.
225*8d67ca89SAndroid Build Coastguard Worker  */
226*8d67ca89SAndroid Build Coastguard Worker void openlog(const char* _Nullable __prefix, int __option, int __facility);
227*8d67ca89SAndroid Build Coastguard Worker 
228*8d67ca89SAndroid Build Coastguard Worker /**
229*8d67ca89SAndroid Build Coastguard Worker  * [setlogmask(3)](https://man7.org/linux/man-pages/man3/setlogmask.3.html)
230*8d67ca89SAndroid Build Coastguard Worker  * sets which log priorities will actually be logged. See `LOG_MASK` and
231*8d67ca89SAndroid Build Coastguard Worker  * `LOG_UPTO`.
232*8d67ca89SAndroid Build Coastguard Worker  */
233*8d67ca89SAndroid Build Coastguard Worker int setlogmask(int __mask);
234*8d67ca89SAndroid Build Coastguard Worker 
235*8d67ca89SAndroid Build Coastguard Worker /**
236*8d67ca89SAndroid Build Coastguard Worker  * [syslog(3)](https://man7.org/linux/man-pages/man3/syslog.3.html) formats
237*8d67ca89SAndroid Build Coastguard Worker  * the printf()-like message and logs it with the given priority, unless
238*8d67ca89SAndroid Build Coastguard Worker  * suppressed by setlogmask(). On Android, the output goes to logcat.
239*8d67ca89SAndroid Build Coastguard Worker  */
240*8d67ca89SAndroid Build Coastguard Worker void syslog(int __priority, const char* _Nonnull __fmt, ...) __printflike(2, 3);
241*8d67ca89SAndroid Build Coastguard Worker 
242*8d67ca89SAndroid Build Coastguard Worker /**
243*8d67ca89SAndroid Build Coastguard Worker  * [vsyslog(3)](https://man7.org/linux/man-pages/man3/vsyslog.3.html) formats
244*8d67ca89SAndroid Build Coastguard Worker  * the vprintf()-like message and logs it with the given priority, unless
245*8d67ca89SAndroid Build Coastguard Worker  * suppressed by setlogmask(). On Android, the output goes to logcat.
246*8d67ca89SAndroid Build Coastguard Worker  */
247*8d67ca89SAndroid Build Coastguard Worker void vsyslog(int __priority, const char* _Nonnull __fmt, va_list __args) __printflike(2, 0);
248*8d67ca89SAndroid Build Coastguard Worker 
249*8d67ca89SAndroid Build Coastguard Worker __END_DECLS
250