Re: mktime() failure vs 31-DEC-1969 23:59:59 GMT
Call localtime() on the seemingly-in-error mktime() result, and compare the relevant portions of the structs tm. A match implies a non-error.
This doesn't sound very stable, but perhaps there is no other alternative.
I'm not sure of what you mean by stable. This is, after all, exactly what mktime() does to determine is has the matching time_t.
Of course, we only need to check this when the return of mktime() is -1
Exactly what I meant by "Call localtime() on the seemingly-in-error mktime() result."
Call localtime() on the seemingly-in-error mktime() result, and compare the relevant portions of the structs tm. A match implies a non-error.
This doesn't sound very stable, but perhaps there is no other alternative.
I'm not sure of what you mean by stable. This is, after all, exactly what mktime() does to determine is has the matching time_t.
Arthur's response to your mail (included below) addresses this with respect to normalization. Also, who's to say that localtime() should return a meaningful tm struct when given a -1 input? The standards don't require it handle this case. If localtime() doesn't return a reasonable tm struct, that still doesn't automatically imply that the previous call to mktime() (returning -1) was a failure as well. The underlying engine for each routine may not be the same, so I don't think you can make this assumption. - Tom ------- Forwarded Message Date: Wed, 14 Feb 96 13:00:02 EST From: ado@elsie.nci.nih.gov (Arthur David Olson) Message-Id: <9602141800.AA06443@elsie.nci.nih.gov> To: bww@fore.com, tomp@zk3.dec.com Subject: Re: mktime() failure vs 31-DEC-1969 23:59:59 GMT Cc: tz@elsie.nci.nih.gov
The standards for mktime() define a return value of (time_t)-1 as indicating that the time specified cannot be represented. However, a return value of -1 is also a valid time_t corresponding to 31-DEC-1969 23:59:59 GMT. How do we distinguish between the two?
Call localtime() on the seemingly-in-error mktime() result, and compare the relevant portions of the structs tm. A match implies a non-error.
Since there's normalization going on in mktime, the tm that comes back from localtime may not match the one that went in to mktime even if -1 is being returned as a legitimate time_t rather than an error indication. Another possibility is to save away the original tm structure; if mktime returns -1, bump the tm_sec value by 1, call mktime again, and see if it returns zero. --ado ------- End of Forwarded Message
participants (2)
-
Bradley White -
tomp@zk3.dec.com