From: Yu Watanabe Date: Tue, 9 Sep 2025 00:10:44 +0000 (+0900) Subject: musl: make strtoll() accept strings start with dot X-Git-Tag: v259-rc1~52^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F39700%2Fhead;p=thirdparty%2Fsystemd.git musl: make strtoll() accept strings start with dot glibc accepts strings start with '.' and returns 0, but musl refuses them. Let's accept them, as our code assumes the function accept such strings. --- diff --git a/src/include/musl/stdlib.h b/src/include/musl/stdlib.h new file mode 100644 index 00000000000..ecfd6ccb430 --- /dev/null +++ b/src/include/musl/stdlib.h @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +#include_next + +long long strtoll_fallback(const char *nptr, char **endptr, int base); +#define strtoll strtoll_fallback diff --git a/src/libc/musl/meson.build b/src/libc/musl/meson.build index 78f93c35421..54866a8b612 100644 --- a/src/libc/musl/meson.build +++ b/src/libc/musl/meson.build @@ -6,5 +6,6 @@ endif libc_wrapper_sources += files( 'stdio.c', + 'stdlib.c', 'string.c', ) diff --git a/src/libc/musl/stdlib.c b/src/libc/musl/stdlib.c new file mode 100644 index 00000000000..1106fec9d0b --- /dev/null +++ b/src/libc/musl/stdlib.c @@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include + +/* The header stdlib.h overrides strtoll with strtoll_fallback, hence we need to undef it here. */ +#undef strtoll + +long long strtoll_fallback(const char *nptr, char **endptr, int base) { + /* glibc returns 0 if the first character is '.' without error, but musl returns as an error. + * As our code assumes the glibc behavior, let's accept strings start with '.'. */ + if (nptr && *nptr == '.') { + if (endptr) + *endptr = (char*) nptr; + return 0; + } + + /* Otherwise, use the native strtoll(). */ + return strtoll(nptr, endptr, base); +}