Michael Selig wrote:
> The basic issue here seems to me that "missing/vsnprintf.c" is being
> included even though snprintf() & vsnprintf() exist, and there is INHO
> an ugly kludge to get this to work. The "proper" Ruby way should be to
> change all calls to snprintf() & vsnprintf() to rb_snprintf() &
> rb_vsnprintf() if there is a "permanent" Ruby replacement for them. This
> wouldn't cause this compiler problem.

We already have rb_sprintf().  This is why sprintf.c exists.

> But why do thay need replacing in Linux in the first place?

Because the world is not built on top of Linux.  Direct reason why we chose to
include missing/vsnprintf.c rather than to check snprintf sanity in configure,
is that checking itself should go insanely complex.  It's much easier for us to
silently ignore system-provided routines.  Linux insanity is that it doesn't
give us a chance to ignore glibc's.

Another reason for us to avoid libc-provided fuctions is that we don't want our
printf variants to depend on locales, especially in representing floating point
numbers.  Localization mechanisms should be implemented on other layers than
Ruby's core.