On 10 April 2011 00:09, River Tarnell river.tarnell@wikimedia.de wrote:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Andrew Dunbar:
I've got a little program to index dump files that supports Windows and Linux but it doesn't compile on the Toolserver with either cc or gcc due to the lack of the function vasprintf(). It's a GNU extension so I'm surprised it didn't work even with gcc.
Why doesn't the Toolserver gcc have it, and does anybody know of a workaround?
*printf() is not part of the compiler, but the C library (libc); GNU glibc (used on Linux) provides it, while Solaris doesn't. There's been some discussion about it, but there are several incompatible asprintf() interfaces around and it's not clear which one should be implemented.
Someone else already provided a version using snprintf, but you could also use g_vasprintf() from glib, or the version from gettext's libintl.h (which means you need to include <libintl.h> and link against
- -lasprintf, both of which live in /opt/ts/gettext). I personally find
the snprintf solution the best and this is what I use in my own code.
Hmm currently I'm using _vscprintf / vsprintf on Windows/MSVC inside #ifdef _WIN32 and vasprintf Ubuntu/gcc inside #else
But my C-fu is to puny to figure out what #ifdefs to use to detect what combination of C compiler and libc I'm compiling under. Apparently it's important with snprintf since some implementations return "an unspecified return value less than 1" with size=0.
I don't want to have to use autoconf or swtich to a gcc on Windows.
Andrew Dunbar (hippietrail)
- river. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (SunOS)
iEYEARECAAYFAk2gaJ4ACgkQIXd7fCuc5vKziwCfTbDgK0nX32jK8iJcLWl278BK HNwAnRFW8/BhMUKS7zr6RRBcPlqCeWfj =31oq -----END PGP SIGNATURE-----
Toolserver-l mailing list (Toolserver-l@lists.wikimedia.org) https://lists.wikimedia.org/mailman/listinfo/toolserver-l Posting guidelines for this list: https://wiki.toolserver.org/view/Mailing_list_etiquette