Re: Bison 3.5.93 released [beta]

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.bugs
Message-ID <[email protected]>

> Le 3 mai 2020 à 21:48, Dagobert Michelsen <[email protected]> a écrit :
> 
> Hi Akim,

Hi Dagobert,

> Am 03.05.2020 um 20:04 schrieb Akim Demaille <[email protected]>:
>> Here are the compressed sources:
>> https://alpha.gnu.org/gnu/bison/bison-3.5.93.tar.gz   (5.1MB)
>> https://alpha.gnu.org/gnu/bison/bison-3.5.93.tar.xz   (3.1MB)
> 
> I have one more 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

Doh...

> Would you mind adding?

Sure.  And don't tell me you don't have memchr :)

I'm installing this.  Cheers!

commit 2e1a64c17a1297b790e3deb34cc630fe4c9a1e3c
Author: Akim Demaille <[email protected]>
Date:   Mon May 4 06:37:59 2020 +0200

    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...

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';
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.