[Python-Dev] test_builtin failing? or just 64-bit platforms (original) (raw)
Guido van Rossum guido@python.org
Sat, 01 Dec 2001 03:06:01 -0500
- Previous message: [Python-Dev] test_builtin failing? or just 64-bit platforms
- Next message: [Python-Dev] test_builtin failing? or just 64-bit platforms
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
> Hm, snprintf is supposed to truncate the result,
According to C99, yes, but MS has its own pre-C99 snprintf semantics, and glibc has had at least two different versions. > but it seems that here it refused to do anything. Maybe PyOSsnprintf > should be a wrapper that checks the return value of snprintf? Check it for what? We can't (at least not yet) count on uniform behavior across platform snprintf implementations.
See below. On my system, the snprintf man page documents both behaviors, with the gcc version where it switches.
> I noticed that none of the recently checked-in PyOSsnprintf calls > have their return value checked,
They were all derived (and most mindlessly) from existing sprintf calls that didn't check either. A goal of this transformation was to change as little as possible. > and I think it's better to leave it that way (since in many cases we > really don't know what to do instead) -- maybe PyOSsnprintf should > even return void (or does it already?). The comments suggest it wants to return the C99-defined value (an int, < 0 for an encoding error, else the number of characters (excluding \0) written if the size is big enough, else the number of characters that would have been written (excluding \0) had size been big enough. So the output was converted in full iff the return value is non-negative and strictly less than the size passed in. That's fine by me, and I'll note that MS snprintf meets that much too (if size isn't big enough, it returns a negative result). So perhaps in a debug build PyOSsnprintf could assert that the returned value is non-negative and less than the passed-in size ...
Should work for gcc too.
Note that the Tru64 output suggests that the behavior (== effect on the buffer) may differ too: a truncated version of the desired output may or may not be written to the buffer. This can be addressed by pre-filling the buffer with a useful pattern in PyOS_snprintf before calling the system's snprintf -- e.g. "---" (to give a patriotic example :-).
--Guido van Rossum (home page: http://www.python.org/~guido/)
PS: I feel like I'm writing this on borrowed time -- Comcast and Excite@Home haven't disconnected me from the net yet. :-)
- Previous message: [Python-Dev] test_builtin failing? or just 64-bit platforms
- Next message: [Python-Dev] test_builtin failing? or just 64-bit platforms
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]