diff options
author | Chen Qi <Qi.Chen@windriver.com> | 2018-07-17 10:05:11 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-07-18 10:18:42 +0100 |
commit | ada8a5d9175b141b4fe532f542f5c1f7ffa26d88 (patch) | |
tree | 64af2142c781c13ee7669004b615d41cfb787f92 /meta/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch | |
parent | 219eed186d32b01a7132233c5110c08055ed6e27 (diff) | |
download | poky-ada8a5d9175b141b4fe532f542f5c1f7ffa26d88.tar.gz |
systemd: upgrade to 239
Upgrade systemd to 239.
1. Patch Changes
* Rebased Patches
0002-binfmt-Don-t-install-dependency-links-at-install-tim.patch
0003-use-lnr-wrapper-instead-of-looking-for-relative-opti.patch
0006-Make-root-s-home-directory-configurable.patch
0027-remove-nobody-user-group-checking.patch
0011-socket-util-don-t-fail-if-libc-doesn-t-support-IDN.patch
0013-add-fallback-parse_printf_format-implementation.patch
0014-src-basic-missing.h-check-for-missing-strndupa.patch
0015-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch
0016-src-basic-missing.h-check-for-missing-__compar_fn_t-.patch
0017-Include-netinet-if_ether.h.patch
0019-Do-not-enable-nss-tests-if-nss-systemd-is-not-enable.patch
0022-don-t-use-glibc-specific-qsort_r.patch
0024-comparison_fn_t-is-glibc-specific-use-raw-signature-.patch
0026-Use-uintmax_t-for-handling-rlim_t.patch
0030-fix-missing-of-__register_atfork-for-non-glibc-build.patch
0031-fix-missing-ULONG_LONG_MAX-definition-in-case-of-mus.patch
0001-core-device.c-Change-the-default-device-timeout-to-2.patch
0001-Remove-fstack-protector-flags-to-workaround-musl-bui.patch
* Dropped Patches and Reasons
0001-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch
This patch is dropped because the problem has been fixed by
binutils upstream. And this workaround could be dropped.
https://sourceware.org/bugzilla/show_bug.cgi?id=18548
0007-Revert-rules-remove-firmware-loading-rules.patch
0008-Revert-udev-remove-userspace-firmware-loading-suppor.patch
These two patches are dropped because they are for kernel < 3.7.
But the current minimal requirement of kernel to build systemd
is as below.
REQUIREMENTS:
Linux kernel >= 3.13
Linux kernel >= 4.2 for unified cgroup hierarchy support
So these two patches no long make any sense.
Also remove non-exist firmware-path option
0009-remove-duplicate-include-uchar.h.patch
0010-check-for-uchar.h-in-meson.build.patch
These two patches are dropped because musl has implemented
uchar.h. See commit below from musl repo.
"""
ab9672ae73248f51e30f4553c4b8878525e46383
implement uchar.h (C11 UTF-16/32 conversion) interfaces
"""
0018-check-for-missing-canonicalize_file_name.patch
The above patch is dropped because current systemd does not need
canonicalize_file_name.
0025-Define-_PATH_WTMPX-and-_PATH_UTMPX-if-not-defined.patch
The above patch is dropped because utmp makes no sense in musl.
Check code below from musl.
include/utmp.h:#define _PATH_UTMP "/dev/null/utmp"
And utmp PACKAGECONFIG has been explicitly disabled for musl.
So we don't need this patch.
0032-memfd.patch
0033-basic-macros-rename-noreturn-into-_noreturn_-8456.patch
libmount.patch
0034-Fix-format-truncation-compile-failure-by-typecasting.patch
The above patches are dropped because they are backported patches.
And current systemd has contained these patches.
0036-time-util-fix-build-with-gcc8-Werror-format-truncati.patch
The above patch is dropped because it has been merged and is now
in new version.
* Newly Added Patch
0005-include-gshadow-only-if-ENABLE_GSHADOW-is-1.patch
This patch is added to fix build for musl.
0019-Do-not-disable-buffering-when-writing-to-oom_score_a.patch
This patch is added to fix the following error which caused system
unable to boot up.
systemd-udevd.service: Failed to adjust OOM setting: Invalid argument
dbus.service: Failed to adjust OOM setting: Invalid argument
0020-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch
This patch is added to fix segment fault error on musl systems.
0001-login-use-parse_uid-when-unmounting-user-runtime-dir.patch
This patch is backported to solve a race condition between
user-runtime-dir@xxx.service stop and user deletion.
2. PACKAGECONFIG and Dependency Changes
* Add a new PACKAGECONFIG item 'gshadow'. Enable it by default for glibc
but disable it by default for musl. This is because musl does not provide
gshadow.h.
* Add a new PACKAGECONFIG item 'portabled'. Default to disable it because
it's still experimental, according to the announcement letter.
"""
Currently, the support is still experimental, but this is expected to
change soon. Reflecting this experimental state, the "portablectl" binary
is not installed into /usr/bin yet.
"""
* Change 'kmod' from a hard dependency to a PACKAGECONFIG item. Default
to enable it.
* Change 'acl' from a hard dependency to a PACKAGECONFIG item. Default
to enable it.
* Remove 'readline' from DEPENDS. systemd does not need it.
* Remove 'libcgroup' from DEPENDS. The dependency on libcgroup has been
removed from systemd a long time ago. We now remove this unnecessary
dependency from DEPENDS.
3. update-alternatives changes
The utilities like shutdown, poweroff, etc. are now created as symlinks
at do_install. So there's no need to use update-alternatives mechanism
anymore to create the symlinks now. In addtion, I don't think we now
support multiple init systems at one running system, so there's really
no need to use update-alternatives mechanism here.
Also update the FILES_${PN} to include these files to avoid QA issue.
(From OE-Core rev: 597f4645faf61486eb1d2ab73f3d974460ab9466)
Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch')
-rw-r--r-- | meta/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch | 432 |
1 files changed, 432 insertions, 0 deletions
diff --git a/meta/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch b/meta/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch new file mode 100644 index 0000000000..7652a2d8cc --- /dev/null +++ b/meta/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch | |||
@@ -0,0 +1,432 @@ | |||
1 | From 582af7ec13131dfcc620ed81de7b211914c4cb03 Mon Sep 17 00:00:00 2001 | ||
2 | From: Chen Qi <Qi.Chen@windriver.com> | ||
3 | Date: Fri, 29 Jun 2018 13:43:49 +0800 | ||
4 | Subject: [PATCH 04/19] add fallback parse_printf_format implementation | ||
5 | |||
6 | Upstream-Status: Inappropriate [musl specific] | ||
7 | |||
8 | Signed-off-by: Emil Renner Berthing <systemd@esmil.dk> | ||
9 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
10 | Signed-off-by: Chen Qi <Qi.Chen@windriver.com> | ||
11 | --- | ||
12 | meson.build | 1 + | ||
13 | src/basic/meson.build | 5 + | ||
14 | src/basic/parse-printf-format.c | 273 ++++++++++++++++++++++++++++++++++++++++ | ||
15 | src/basic/parse-printf-format.h | 57 +++++++++ | ||
16 | src/basic/stdio-util.h | 2 +- | ||
17 | src/journal/journal-send.c | 2 +- | ||
18 | 6 files changed, 338 insertions(+), 2 deletions(-) | ||
19 | create mode 100644 src/basic/parse-printf-format.c | ||
20 | create mode 100644 src/basic/parse-printf-format.h | ||
21 | |||
22 | diff --git a/meson.build b/meson.build | ||
23 | index e045b9224..8c16bc979 100644 | ||
24 | --- a/meson.build | ||
25 | +++ b/meson.build | ||
26 | @@ -598,6 +598,7 @@ foreach header : ['crypt.h', | ||
27 | 'linux/btrfs.h', | ||
28 | 'linux/memfd.h', | ||
29 | 'linux/vm_sockets.h', | ||
30 | + 'printf.h', | ||
31 | 'sys/auxv.h', | ||
32 | 'valgrind/memcheck.h', | ||
33 | 'valgrind/valgrind.h', | ||
34 | diff --git a/src/basic/meson.build b/src/basic/meson.build | ||
35 | index 31625b178..0c27528e7 100644 | ||
36 | --- a/src/basic/meson.build | ||
37 | +++ b/src/basic/meson.build | ||
38 | @@ -302,6 +302,11 @@ foreach item : [['af', af_list_txt, 'af', ''], | ||
39 | endforeach | ||
40 | |||
41 | basic_sources += [missing_h] + generated_gperf_headers | ||
42 | + | ||
43 | +if conf.get('HAVE_PRINTF_H') != 1 | ||
44 | + basic_sources += [files('parse-printf-format.c')] | ||
45 | +endif | ||
46 | + | ||
47 | basic_gcrypt_sources = files( | ||
48 | 'gcrypt-util.c', | ||
49 | 'gcrypt-util.h') | ||
50 | diff --git a/src/basic/parse-printf-format.c b/src/basic/parse-printf-format.c | ||
51 | new file mode 100644 | ||
52 | index 000000000..49437e544 | ||
53 | --- /dev/null | ||
54 | +++ b/src/basic/parse-printf-format.c | ||
55 | @@ -0,0 +1,273 @@ | ||
56 | +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ | ||
57 | + | ||
58 | +/*** | ||
59 | + This file is part of systemd. | ||
60 | + | ||
61 | + Copyright 2014 Emil Renner Berthing <systemd@esmil.dk> | ||
62 | + | ||
63 | + With parts from the musl C library | ||
64 | + Copyright 2005-2014 Rich Felker, et al. | ||
65 | + | ||
66 | + systemd is free software; you can redistribute it and/or modify it | ||
67 | + under the terms of the GNU Lesser General Public License as published by | ||
68 | + the Free Software Foundation; either version 2.1 of the License, or | ||
69 | + (at your option) any later version. | ||
70 | + | ||
71 | + systemd is distributed in the hope that it will be useful, but | ||
72 | + WITHOUT ANY WARRANTY; without even the implied warranty of | ||
73 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
74 | + Lesser General Public License for more details. | ||
75 | + | ||
76 | + You should have received a copy of the GNU Lesser General Public License | ||
77 | + along with systemd; If not, see <http://www.gnu.org/licenses/>. | ||
78 | +***/ | ||
79 | + | ||
80 | +#include <stddef.h> | ||
81 | +#include <string.h> | ||
82 | + | ||
83 | +#include "parse-printf-format.h" | ||
84 | + | ||
85 | +static const char *consume_nonarg(const char *fmt) | ||
86 | +{ | ||
87 | + do { | ||
88 | + if (*fmt == '\0') | ||
89 | + return fmt; | ||
90 | + } while (*fmt++ != '%'); | ||
91 | + return fmt; | ||
92 | +} | ||
93 | + | ||
94 | +static const char *consume_num(const char *fmt) | ||
95 | +{ | ||
96 | + for (;*fmt >= '0' && *fmt <= '9'; fmt++) | ||
97 | + /* do nothing */; | ||
98 | + return fmt; | ||
99 | +} | ||
100 | + | ||
101 | +static const char *consume_argn(const char *fmt, size_t *arg) | ||
102 | +{ | ||
103 | + const char *p = fmt; | ||
104 | + size_t val = 0; | ||
105 | + | ||
106 | + if (*p < '1' || *p > '9') | ||
107 | + return fmt; | ||
108 | + do { | ||
109 | + val = 10*val + (*p++ - '0'); | ||
110 | + } while (*p >= '0' && *p <= '9'); | ||
111 | + | ||
112 | + if (*p != '$') | ||
113 | + return fmt; | ||
114 | + *arg = val; | ||
115 | + return p+1; | ||
116 | +} | ||
117 | + | ||
118 | +static const char *consume_flags(const char *fmt) | ||
119 | +{ | ||
120 | + while (1) { | ||
121 | + switch (*fmt) { | ||
122 | + case '#': | ||
123 | + case '0': | ||
124 | + case '-': | ||
125 | + case ' ': | ||
126 | + case '+': | ||
127 | + case '\'': | ||
128 | + case 'I': | ||
129 | + fmt++; | ||
130 | + continue; | ||
131 | + } | ||
132 | + return fmt; | ||
133 | + } | ||
134 | +} | ||
135 | + | ||
136 | +enum state { | ||
137 | + BARE, | ||
138 | + LPRE, | ||
139 | + LLPRE, | ||
140 | + HPRE, | ||
141 | + HHPRE, | ||
142 | + BIGLPRE, | ||
143 | + ZTPRE, | ||
144 | + JPRE, | ||
145 | + STOP | ||
146 | +}; | ||
147 | + | ||
148 | +enum type { | ||
149 | + NONE, | ||
150 | + PTR, | ||
151 | + INT, | ||
152 | + UINT, | ||
153 | + ULLONG, | ||
154 | + LONG, | ||
155 | + ULONG, | ||
156 | + SHORT, | ||
157 | + USHORT, | ||
158 | + CHAR, | ||
159 | + UCHAR, | ||
160 | + LLONG, | ||
161 | + SIZET, | ||
162 | + IMAX, | ||
163 | + UMAX, | ||
164 | + PDIFF, | ||
165 | + UIPTR, | ||
166 | + DBL, | ||
167 | + LDBL, | ||
168 | + MAXTYPE | ||
169 | +}; | ||
170 | + | ||
171 | +static const short pa_types[MAXTYPE] = { | ||
172 | + [NONE] = PA_INT, | ||
173 | + [PTR] = PA_POINTER, | ||
174 | + [INT] = PA_INT, | ||
175 | + [UINT] = PA_INT, | ||
176 | + [ULLONG] = PA_INT | PA_FLAG_LONG_LONG, | ||
177 | + [LONG] = PA_INT | PA_FLAG_LONG, | ||
178 | + [ULONG] = PA_INT | PA_FLAG_LONG, | ||
179 | + [SHORT] = PA_INT | PA_FLAG_SHORT, | ||
180 | + [USHORT] = PA_INT | PA_FLAG_SHORT, | ||
181 | + [CHAR] = PA_CHAR, | ||
182 | + [UCHAR] = PA_CHAR, | ||
183 | + [LLONG] = PA_INT | PA_FLAG_LONG_LONG, | ||
184 | + [SIZET] = PA_INT | PA_FLAG_LONG, | ||
185 | + [IMAX] = PA_INT | PA_FLAG_LONG_LONG, | ||
186 | + [UMAX] = PA_INT | PA_FLAG_LONG_LONG, | ||
187 | + [PDIFF] = PA_INT | PA_FLAG_LONG_LONG, | ||
188 | + [UIPTR] = PA_INT | PA_FLAG_LONG, | ||
189 | + [DBL] = PA_DOUBLE, | ||
190 | + [LDBL] = PA_DOUBLE | PA_FLAG_LONG_DOUBLE | ||
191 | +}; | ||
192 | + | ||
193 | +#define S(x) [(x)-'A'] | ||
194 | +#define E(x) (STOP + (x)) | ||
195 | + | ||
196 | +static const unsigned char states[]['z'-'A'+1] = { | ||
197 | + { /* 0: bare types */ | ||
198 | + S('d') = E(INT), S('i') = E(INT), | ||
199 | + S('o') = E(UINT),S('u') = E(UINT),S('x') = E(UINT), S('X') = E(UINT), | ||
200 | + S('e') = E(DBL), S('f') = E(DBL), S('g') = E(DBL), S('a') = E(DBL), | ||
201 | + S('E') = E(DBL), S('F') = E(DBL), S('G') = E(DBL), S('A') = E(DBL), | ||
202 | + S('c') = E(CHAR),S('C') = E(INT), | ||
203 | + S('s') = E(PTR), S('S') = E(PTR), S('p') = E(UIPTR),S('n') = E(PTR), | ||
204 | + S('m') = E(NONE), | ||
205 | + S('l') = LPRE, S('h') = HPRE, S('L') = BIGLPRE, | ||
206 | + S('z') = ZTPRE, S('j') = JPRE, S('t') = ZTPRE | ||
207 | + }, { /* 1: l-prefixed */ | ||
208 | + S('d') = E(LONG), S('i') = E(LONG), | ||
209 | + S('o') = E(ULONG),S('u') = E(ULONG),S('x') = E(ULONG),S('X') = E(ULONG), | ||
210 | + S('e') = E(DBL), S('f') = E(DBL), S('g') = E(DBL), S('a') = E(DBL), | ||
211 | + S('E') = E(DBL), S('F') = E(DBL), S('G') = E(DBL), S('A') = E(DBL), | ||
212 | + S('c') = E(INT), S('s') = E(PTR), S('n') = E(PTR), | ||
213 | + S('l') = LLPRE | ||
214 | + }, { /* 2: ll-prefixed */ | ||
215 | + S('d') = E(LLONG), S('i') = E(LLONG), | ||
216 | + S('o') = E(ULLONG),S('u') = E(ULLONG), | ||
217 | + S('x') = E(ULLONG),S('X') = E(ULLONG), | ||
218 | + S('n') = E(PTR) | ||
219 | + }, { /* 3: h-prefixed */ | ||
220 | + S('d') = E(SHORT), S('i') = E(SHORT), | ||
221 | + S('o') = E(USHORT),S('u') = E(USHORT), | ||
222 | + S('x') = E(USHORT),S('X') = E(USHORT), | ||
223 | + S('n') = E(PTR), | ||
224 | + S('h') = HHPRE | ||
225 | + }, { /* 4: hh-prefixed */ | ||
226 | + S('d') = E(CHAR), S('i') = E(CHAR), | ||
227 | + S('o') = E(UCHAR),S('u') = E(UCHAR), | ||
228 | + S('x') = E(UCHAR),S('X') = E(UCHAR), | ||
229 | + S('n') = E(PTR) | ||
230 | + }, { /* 5: L-prefixed */ | ||
231 | + S('e') = E(LDBL),S('f') = E(LDBL),S('g') = E(LDBL), S('a') = E(LDBL), | ||
232 | + S('E') = E(LDBL),S('F') = E(LDBL),S('G') = E(LDBL), S('A') = E(LDBL), | ||
233 | + S('n') = E(PTR) | ||
234 | + }, { /* 6: z- or t-prefixed (assumed to be same size) */ | ||
235 | + S('d') = E(PDIFF),S('i') = E(PDIFF), | ||
236 | + S('o') = E(SIZET),S('u') = E(SIZET), | ||
237 | + S('x') = E(SIZET),S('X') = E(SIZET), | ||
238 | + S('n') = E(PTR) | ||
239 | + }, { /* 7: j-prefixed */ | ||
240 | + S('d') = E(IMAX), S('i') = E(IMAX), | ||
241 | + S('o') = E(UMAX), S('u') = E(UMAX), | ||
242 | + S('x') = E(UMAX), S('X') = E(UMAX), | ||
243 | + S('n') = E(PTR) | ||
244 | + } | ||
245 | +}; | ||
246 | + | ||
247 | +size_t parse_printf_format(const char *fmt, size_t n, int *types) | ||
248 | +{ | ||
249 | + size_t i = 0; | ||
250 | + size_t last = 0; | ||
251 | + | ||
252 | + memset(types, 0, n); | ||
253 | + | ||
254 | + while (1) { | ||
255 | + size_t arg; | ||
256 | + unsigned int state; | ||
257 | + | ||
258 | + fmt = consume_nonarg(fmt); | ||
259 | + if (*fmt == '\0') | ||
260 | + break; | ||
261 | + if (*fmt == '%') { | ||
262 | + fmt++; | ||
263 | + continue; | ||
264 | + } | ||
265 | + arg = 0; | ||
266 | + fmt = consume_argn(fmt, &arg); | ||
267 | + /* flags */ | ||
268 | + fmt = consume_flags(fmt); | ||
269 | + /* width */ | ||
270 | + if (*fmt == '*') { | ||
271 | + size_t warg = 0; | ||
272 | + fmt = consume_argn(fmt+1, &warg); | ||
273 | + if (warg == 0) | ||
274 | + warg = ++i; | ||
275 | + if (warg > last) | ||
276 | + last = warg; | ||
277 | + if (warg <= n && types[warg-1] == NONE) | ||
278 | + types[warg-1] = INT; | ||
279 | + } else | ||
280 | + fmt = consume_num(fmt); | ||
281 | + /* precision */ | ||
282 | + if (*fmt == '.') { | ||
283 | + fmt++; | ||
284 | + if (*fmt == '*') { | ||
285 | + size_t parg = 0; | ||
286 | + fmt = consume_argn(fmt+1, &parg); | ||
287 | + if (parg == 0) | ||
288 | + parg = ++i; | ||
289 | + if (parg > last) | ||
290 | + last = parg; | ||
291 | + if (parg <= n && types[parg-1] == NONE) | ||
292 | + types[parg-1] = INT; | ||
293 | + } else { | ||
294 | + if (*fmt == '-') | ||
295 | + fmt++; | ||
296 | + fmt = consume_num(fmt); | ||
297 | + } | ||
298 | + } | ||
299 | + /* length modifier and conversion specifier */ | ||
300 | + state = BARE; | ||
301 | + do { | ||
302 | + unsigned char c = *fmt++; | ||
303 | + | ||
304 | + if (c < 'A' || c > 'z') | ||
305 | + continue; | ||
306 | + state = states[state]S(c); | ||
307 | + if (state == 0) | ||
308 | + continue; | ||
309 | + } while (state < STOP); | ||
310 | + | ||
311 | + if (state == E(NONE)) | ||
312 | + continue; | ||
313 | + | ||
314 | + if (arg == 0) | ||
315 | + arg = ++i; | ||
316 | + if (arg > last) | ||
317 | + last = arg; | ||
318 | + if (arg <= n) | ||
319 | + types[arg-1] = state - STOP; | ||
320 | + } | ||
321 | + | ||
322 | + if (last > n) | ||
323 | + last = n; | ||
324 | + for (i = 0; i < last; i++) | ||
325 | + types[i] = pa_types[types[i]]; | ||
326 | + | ||
327 | + return last; | ||
328 | +} | ||
329 | diff --git a/src/basic/parse-printf-format.h b/src/basic/parse-printf-format.h | ||
330 | new file mode 100644 | ||
331 | index 000000000..47be7522d | ||
332 | --- /dev/null | ||
333 | +++ b/src/basic/parse-printf-format.h | ||
334 | @@ -0,0 +1,57 @@ | ||
335 | +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ | ||
336 | + | ||
337 | +/*** | ||
338 | + This file is part of systemd. | ||
339 | + | ||
340 | + Copyright 2014 Emil Renner Berthing <systemd@esmil.dk> | ||
341 | + | ||
342 | + With parts from the GNU C Library | ||
343 | + Copyright 1991-2014 Free Software Foundation, Inc. | ||
344 | + | ||
345 | + systemd is free software; you can redistribute it and/or modify it | ||
346 | + under the terms of the GNU Lesser General Public License as published by | ||
347 | + the Free Software Foundation; either version 2.1 of the License, or | ||
348 | + (at your option) any later version. | ||
349 | + | ||
350 | + systemd is distributed in the hope that it will be useful, but | ||
351 | + WITHOUT ANY WARRANTY; without even the implied warranty of | ||
352 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
353 | + Lesser General Public License for more details. | ||
354 | + | ||
355 | + You should have received a copy of the GNU Lesser General Public License | ||
356 | + along with systemd; If not, see <http://www.gnu.org/licenses/>. | ||
357 | +***/ | ||
358 | + | ||
359 | +#pragma once | ||
360 | + | ||
361 | +#include "config.h" | ||
362 | + | ||
363 | +#if HAVE_PRINTF_H | ||
364 | +#include <printf.h> | ||
365 | +#else | ||
366 | + | ||
367 | +#include <stddef.h> | ||
368 | + | ||
369 | +enum { /* C type: */ | ||
370 | + PA_INT, /* int */ | ||
371 | + PA_CHAR, /* int, cast to char */ | ||
372 | + PA_WCHAR, /* wide char */ | ||
373 | + PA_STRING, /* const char *, a '\0'-terminated string */ | ||
374 | + PA_WSTRING, /* const wchar_t *, wide character string */ | ||
375 | + PA_POINTER, /* void * */ | ||
376 | + PA_FLOAT, /* float */ | ||
377 | + PA_DOUBLE, /* double */ | ||
378 | + PA_LAST | ||
379 | +}; | ||
380 | + | ||
381 | +/* Flag bits that can be set in a type returned by `parse_printf_format'. */ | ||
382 | +#define PA_FLAG_MASK 0xff00 | ||
383 | +#define PA_FLAG_LONG_LONG (1 << 8) | ||
384 | +#define PA_FLAG_LONG_DOUBLE PA_FLAG_LONG_LONG | ||
385 | +#define PA_FLAG_LONG (1 << 9) | ||
386 | +#define PA_FLAG_SHORT (1 << 10) | ||
387 | +#define PA_FLAG_PTR (1 << 11) | ||
388 | + | ||
389 | +size_t parse_printf_format(const char *fmt, size_t n, int *types); | ||
390 | + | ||
391 | +#endif /* HAVE_PRINTF_H */ | ||
392 | diff --git a/src/basic/stdio-util.h b/src/basic/stdio-util.h | ||
393 | index 73c03274c..30192cd71 100644 | ||
394 | --- a/src/basic/stdio-util.h | ||
395 | +++ b/src/basic/stdio-util.h | ||
396 | @@ -1,12 +1,12 @@ | ||
397 | /* SPDX-License-Identifier: LGPL-2.1+ */ | ||
398 | #pragma once | ||
399 | |||
400 | -#include <printf.h> | ||
401 | #include <stdarg.h> | ||
402 | #include <stdio.h> | ||
403 | #include <sys/types.h> | ||
404 | |||
405 | #include "macro.h" | ||
406 | +#include "parse-printf-format.h" | ||
407 | |||
408 | #define snprintf_ok(buf, len, fmt, ...) \ | ||
409 | ((size_t) snprintf(buf, len, fmt, __VA_ARGS__) < (len)) | ||
410 | diff --git a/src/journal/journal-send.c b/src/journal/journal-send.c | ||
411 | index a0621524a..65bcbcd2e 100644 | ||
412 | --- a/src/journal/journal-send.c | ||
413 | +++ b/src/journal/journal-send.c | ||
414 | @@ -2,7 +2,6 @@ | ||
415 | |||
416 | #include <errno.h> | ||
417 | #include <fcntl.h> | ||
418 | -#include <printf.h> | ||
419 | #include <stddef.h> | ||
420 | #include <sys/socket.h> | ||
421 | #include <sys/un.h> | ||
422 | @@ -21,6 +20,7 @@ | ||
423 | #include "stdio-util.h" | ||
424 | #include "string-util.h" | ||
425 | #include "util.h" | ||
426 | +#include "parse-printf-format.h" | ||
427 | |||
428 | #define SNDBUF_SIZE (8*1024*1024) | ||
429 | |||
430 | -- | ||
431 | 2.11.0 | ||
432 | |||