Date: Sat, 8 Aug 2020 12:29:23 -0700 From: Paul Eggert <eggert@cs.ucla.edu> Message-ID: <20200808192923.23487-2-eggert@cs.ucla.edu> | a reliable way | to determine whether 0 represents failure or buffer exhaustion This is not necessary. The cases can be distinguished by setting errno to 0 before the call, and checking afterwards (if 0 is returned) - if errno is set there was an error, if it is still 0, it is something else. A 0 return can indicate a successful return with no data, not just conversion failure or buffer exhaustion (eg: strftime(buf, sizeof buf, "%Z", tm); in a timezone where there are no timezone names). This is easy to avoid by simply using res = strftime(buf, sizeof buf, " %Z", tm); where any successful return must be at least 1, so 0 always indicates some kind of error (including when sizeof(buf) == 0, though that's not a case worth worrying about). Then the code simply uses buf+1 as the result (and res-1 as the length) after it has been determined that there was no error (ie: res >= 1). kre