Re: things I don't understand in src/env/time.c + bugs + suggested patch

Heinrich Schuchardt <[email protected]>
Newsgroups gmane.comp.gnu.glpk
Message-ID <[email protected]>
On 01/29/2017 06:22 PM, Andrew Makhorin wrote:
> Hi Chris,
> 
>>> Not sure, but gmtime_s looks like a MSVC function. Could you point me
>>> out where gmtime_s is standardized? Thanks.
>>
>> gmtime_s is included in the (optional) annex K of C11. However, the
>> parameters are reversed compared to the MSVC version and the standard
>> one returns struct tm * while the MSVC one returns errno_t.
>>
>> Moreover, some searching shows that gmtime_s is documented starting
>> with VS 2010 (and _gmtime_s in VS 2005 and VS 2008). However, since VS
>> 2005 gmtime returns a different pointer per thread [1], so there is no
>> reason to use gmtime_s here - gmtime_s offers additional error
>> checking for null pointers, which is not an issue in this code.
>>
> 
> Thank you for information.
> 
> As Heinrich noticed, gmtime, strerror, and strtok are non-thread-safe
> (for example, in most recent version of glibc strtok just uses a static
> pointer without a tls specifier), so in a multi-threaded environment
> thread-safe versions of these functions should be used. The problem I
> encountered is that gcc (Debian 4.7.2-5) 4.7.2 installed on my Linux
> machine doesn't have gmtime_s, strerror_s, and strtok_s. It is unclear
> what to do if no thread-safe version of these functions are available.
> 

glibc (and POSIX 2008) has these functions:

struct tm *gmtime_r(const time_t *timep, struct tm *result);
int strerror_r(int errnum, char *buf, size_t buflen);
char *strtok_r(char *str, const char *delim, char **saveptr);

Windows (and C11) supply

errno_t gmtime_s(struct tm* _tm, const __time_t* time);
errno_t strerror_s(char *buffer, size_t numberOfElements, int errnum);
char *strtok_s(char *strToken, const char *strDelimit, char **context);

We can use __WOE__ to decide which function to use.

Best regards

Heinrich Schuchardt
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.