From ce27796b7473d8649f0237a7506385e759a2ba99 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 4 May 2020 06:37:59 +0200 Subject: [PATCH] examples: beware of strnlen portability issues One function missing on Solaris 10 Sparc: CCLD examples/c/bistromathic/bistromathic Undefined first referenced symbol in file strnlen examples/c/bistromathic/bistromathic-parse.o ld: fatal: symbol referencing errors. No output written to examples/c/bistromathic/bistromathic Reported by Dagobert Michelsen. https://lists.gnu.org/r/bug-bison/2020-05/msg00048.html * examples/c/bistromathic/parse.y (xstrndup): Don't use strnlen. xstrndup is assembled from gnulib's xstrndup, strndup and strnlen... --- examples/c/bistromathic/parse.y | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/c/bistromathic/parse.y b/examples/c/bistromathic/parse.y index 8db9d457..38fedb46 100644 --- a/examples/c/bistromathic/parse.y +++ b/examples/c/bistromathic/parse.y @@ -400,7 +400,9 @@ void yyerror (YYLTYPE *loc, char const *format, ...) static char * xstrndup (const char *string, size_t n) { - size_t len = strnlen (string, n); + // len = strnlen (string, n), portably. + const char *end = memchr (string, '\0', n); + size_t len = end ? (size_t) (end - string) : n; char *new = malloc (len + 1); assert (new); new[len] = '\0';