Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Fwd: snprintf?
Am 08.06.15 um 18:24 schrieb Andrew Cagney:
> FYI, want a bug report?
I think this is best handled on the Lua mailing list.
>
> ---------- Forwarded message ----------
> From: Andrew Cagney <andrew.cagney%gmail.com@localhost>
> Date: 8 June 2015 at 12:22
> Subject: snprintf?
> To: lua-l%lists.lua.org@localhost
>
>
> Hi,
>
> I just found a bug in an embedded port of lua which didn't support
> sprintf(). Specifically, the work-around:
>
> #define sprintf(s,fmt,...) snprintf(s, sizeof(s), fmt, __VA_ARGS__)
>
> is broken. Consider correct code such as:
>
> char *b = ...; sprintf(b, "%d", 1);
>
> found in lstrlib.c.
>
> This, however, begs the question: should lua switch to snprintf()?
>
> First, I don't think anyone will dispute that snprintf() is more
> robust than sprintf(). Rather, the problem is with portability.
> While snprintf() was formalized in c99, and almost all the C compilers
> have been supporting it since forever, there's been one holdout -
> Microsoft - they have had a somewhat recalcitrant attitude towards C
> standards compliance and, consequently, snprintf wasn't an option
> (Microsoft does have sprintf_s() and _snprintf() but they have
> different semantics).
> http://en.cppreference.com/w/c/io/fprintf
> https://msdn.microsoft.com/en-us/library/2ts7cx93%28v=vs.120%29.aspx
>
> However, recently we've been seeing something of a shift in
> Microsoft's attitude. Specifically Visual Studio 14/15 should support
> things like snprintf:
> http://blogs.msdn.com/b/vcblog/archive/2014/06/03/visual-studio-14-ctp.aspx
>
> So I'd like to float the idea of adopting snprintf(), for instance:
>
> - just assume snprintf (which would require a very recent Microsoft C compiler)
>
> - define Lsnprintf() as snprintf() and use that, except on old windows
> systems which can wrap _snprintf() and deal with the different
> semantics
>
> - define Lsnrintf() as snprintf() and use that, except on windows
> where it is re-defined as sprintf() (ignore the length parameter);
> this means things are no worse than what we have now
>
> Andrew
>
Home |
Main Index |
Thread Index |
Old Index