Re: Dillo and Irix

Johannes Hofmann <[email protected]>
Newsgroups gmane.comp.web.dillo.devel
Message-ID <[email protected]>
On Tue, Sep 16, 2014 at 06:29:27AM +0000, eocene wrote:
> 
> In the typical vsnprintf() (i.e., following the c99 standard), if you
> have space for 10 bytes and you want to write 20 bytes (including '\0'),
> you return 19, whereas irix returns 9.
> 
> Some options:
> 
> 1. It's possible to make irix and the standard run with a change like
> 
> diff -r 5f63e28334b2 dlib/dlib.c
> --- a/dlib/dlib.c       Tue Sep 16 00:21:49 2014 +0000
> +++ b/dlib/dlib.c       Tue Sep 16 04:59:20 2014 +0000
> @@ -406,11 +406,11 @@
>           va_copy(argp2, argp);
>           n = vsnprintf(ds->str + ds->len, ds->sz - ds->len, format, argp2);
>           va_end(argp2);
> -         if (n > -1 && n < ds->sz - ds->len) {
> +         if (n > -1 && n+1 < ds->sz - ds->len) {
>              ds->len += n;      /* Success! */
>              break;
>           } else if (n > -1) {  /* glibc >= 2.1 */
> -            n_sz = ds->len + n + 1;
> +            n_sz = ds->len + n + 2;
>           } else {              /* old glibc */
>              n_sz = ds->sz * 2;
>           }
> 
> ...although it would need tweaking to waste less running time.
> 
> But of course even if dillo is partly about retrocomputing, it'll be
> 99% linux+bsd retrocomputing and 1% other-stuff retrocomputing, so...
> 
> 2. Throw an ifdef at it. Dillo has never had many ifdefs, and I'd thought
> they were discouraged, but maybe the changes needed for all of that stuff
> at the bottom of Compatibility.html like
> 
> SGI O2 running IRIX
> Tru64 (OSF1) 4.0 on Alpha 
> QNX RTP 6.1/x86 (with occasional memory faults out of GTK+) 
> AIX 4.3 (with some tweaks) 
> Atari-based 68k-systems running MiNT 
> Microsoft Windows using Cygwin 
> RISC OS
> 
> ...just didn't make it back into mainline dillo1?
> 
> 3. We could always borrow fltk's vsnprintf(), which is about 250 lines.
> 
> 
> I lean toward giving it an ifdef.

I would suggest testing for this specific (v)snprintf() behaviour in
configure and ifdef based on the result rather than on the OS.
There might even be some builtin support for this check in autoconf
as the issue is mentioned in [1].

  Johannes
 
[1] https://www.gnu.org/software/autoconf/manual/autoconf-2.64/html_node/Function-Portability.html
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.