Hi Gary, > > OK Guys, shall we dust this "snprintfv" thing off, polish a bit and > > hand off to the interested gnulib folks? :) It'd be nice to have it > > have first class support. Heck, I'd like to see some of the add-on > > interfaces made more widely available anyway. :) > > That sounds like a splendid idea! I'll even have some time to spend > on it starting next month.
This would be welcome. The presence in gnulib offers for your library: - a tool for integration into other packages ("gnulib-tool --import snprintfv") and for standalone testing ("gnulib-tool --create-testdir snprintfv"), - some people who proofread the code and do nitpicking, (*) - more visibility; possibly other library codes will rely on it. Now that gnulib supports subdirectories, you can even have all sources remain in a lib/snprintfv/ directory. snprintfv also has an interesting abstraction of "stream". This resembles the output streams that I've been using in GNU gettext lately. (And it's a pain to do this in C, rather than the ever-more-ugly C++.): ostream http://cvs.savannah.gnu.org/viewcvs/*checkout*/gettext/gnulib-local/lib/ostream.oo.h?content-type=text%2Fplain&rev=1.1&root=gettext fd-ostream http://cvs.savannah.gnu.org/viewcvs/*checkout*/gettext/gnulib-local/lib/fd-ostream.oo.h?content-type=text%2Fplain&rev=1.1&root=gettext file-ostream http://cvs.savannah.gnu.org/viewcvs/*checkout*/gettext/gnulib-local/lib/file-ostream.oo.h?content-type=text%2Fplain&rev=1.1&root=gettext memory-ostream http://cvs.savannah.gnu.org/viewcvs/*checkout*/gettext/gnulib-local/lib/memory-ostream.oo.h?content-type=text%2Fplain&rev=1.1&root=gettext term-ostream http://cvs.savannah.gnu.org/viewcvs/*checkout*/gettext/gnulib-local/lib/term-ostream.oo.h?content-type=text%2Fplain&rev=1.2&root=gettext iconv-ostream http://cvs.savannah.gnu.org/viewcvs/*checkout*/gettext/gnulib-local/lib/iconv-ostream.oo.h?content-type=text%2Fplain&rev=1.1&root=gettext html-ostream http://cvs.savannah.gnu.org/viewcvs/*checkout*/gettext/gnulib-local/lib/html-ostream.oo.h?content-type=text%2Fplain&rev=1.1&root=gettext But I think the *printf replacements should continue to be based on the vasnprintf code, because of object code size. On a Linux/x86 system: $ size vasnprintf.o text data bss dec hex filename 6669 0 0 6669 1a0d vasnprintf.o $ ld -r -o snprintfv.o libsnprintfvc_la-*.o $ size snprintfv.o text data bss dec hex filename 17984 1020 416 19420 4bdc snprintfv.o Not everyone want to spend 18 KB of object code in a facility that "nearly" is contained in the standard libc. regex.o being even bigger is not much of a justification because only ca. 20% of the programs need regex, whereas 100% need printf. $ size regex.o [this one is compiled with -fPIC] text data bss dec hex filename 62079 5964 0 68043 109cb regex.o Bruno (*) The snprintfv in smalltalk-2.3.2 has this compiler warning which really looks like a bug: printf.c: In function `stream_printfv': printf.c:658: warning: assignment makes pointer from integer without a cast