Re:A Soccer Con Man Who Couldn't Play the Game
by kazinator on Monday August 22, 2016 @07:14PM
(#12340108)
Though strftime is in ISO C, so there is little excuse, strptime is a POSIX function, so there is at least the possibility of a credible portability argument there. (Though this probably doesn't stretch far enough to justify the lack of an #ifdef to select the system's strptime if it is provided.)
[ Parent
| on HN ]
Re:A Soccer Con Man Who Couldn't Play the Game
by syntheticnature on Monday August 22, 2016 @09:19PM
(#12340653)
In this particular case the application was already quite POSIX-dependent in other ways, but it's a good point to make -- I did hesitate before deciding on it for that reason, now that you remind me.
To add additional details, for those who might draw amusement and/or wisdom: In all cases the input/output date/time strings had the same format. Further, a number of the bugs were due to half-implemented reinventions of atoi being involved -- and atoi was definitely available, as one of the reinventions used it! Finally, in at least one case there was a Y2100 problem.
Re:A Soccer Con Man Who Couldn't Play the Game
by MaulingMonkey on Tuesday August 23, 2016 @04:25AM
(#12342189)
To be fair, I'd reroll atoi too - but only once, with "sufficient" unit tests (e.g. round trip unit tests for INT_MIN..INT_MAX), and only because atoi has no proper error checking nor wchar_t* variants.
Re:A Soccer Con Man Who Couldn't Play the Game
by kazinator on Tuesday August 23, 2016 @06:32PM
(#12348312)
Indeed; atoi in fact invokes undefined behavior in out of range situations; you can only safely use it when the input has been lexically analyzed to be a valid integer of only so many digits as not to overflow.
I'd tend to make this re-rolled atoi a wrapper around strtol/wcstol.
Re:A Soccer Con Man Who Couldn't Play the Game
by MaulingMonkey on Wednesday August 24, 2016 @02:26AM
(#12350117)
> atoi in fact invokes undefined behavior in out of range situations
Ouch! TIL. You'd think by now I wouldn't be surprised by such things, and yet, somehow I was...