On Mar 9, 2008, at 5:38 PM, Wayne Davison wrote:

On Sun, Mar 09, 2008 at 10:51:42AM -0400, Jeff Johnson wrote:
Meanwhile, below is a rewrite of POPT_fprintf, essentially identical
to the "man vsnprintf" example. See what you think ...

Looks good. I did some tweaking based on this code. The attached patch changes what you checked-in to CVS. See if you agree with these points:

1. If the system has vasprintf(), just use that (avoiding issues 2 & 3).


Agreed.

2. Always allocate one more byte than we need, just in case the system's
   vsprintf() has an off-by-one bug with the limit.


That's kinda nutty (but hurts nothing). I'd rather fix a known problem
rather than trying to anticipate all possibilities ...

3. Moved the va_start() and va_end() calls back in the loop because I
   believe that the systems that needed a va_copy() in the old code
   won't like the reuse of "ap" without it.


... afaik 3) is  <varargs.h> vs <stdarg.h> implementation dependent
confusion with va_start() and va_end(). But hurts nothing at all ...

Bonus question:  I didn't think older systems supported the idiom of
realloc(NULL, len) doing a malloc().  I didn't check to see if that
idiom is already used elsewhere in the popt code, though, so I just
left that alone.


... and my ultimate answer is:

Deranged and ancient uglix-like systems, with busted vsnpprintf and other damage, can certainly live with gud old fprintf(3) as popt _USED_ to do without all this dain bread conversion from UTF-* to the native locale using iconv & vsnprintf & nl_langinfo & wide characters &
     malloc'ing fprintf's & ....

None of this modern crapola existed on systems that had busted v*printf() implementations, almost
all the problems disappear with
    #define POPT_fprintf        fprintf
(and some tweaks to test whether POPT_fprintf is defined). KISS is always better ...

I tested both sides of the HAVE_VASPRINTF code and this seems good to
me.


Off to tweak in vasprintf(3) ... I am happy to see sprintf start to vanish ...

73 de Jeff
______________________________________________________________________
POPT Library                                           http://rpm5.org
Developer Communication List                       popt-devel@rpm5.org

Reply via email to