Re: gmtime_r bug in High Sierra?
site_archiver@lists.apple.com Delivered-To: darwin-dev@lists.apple.com Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=w4SSlXUa0loy+yzk0uR1DoJepAAqvyQy1qP1V1akuXo=; b=oCmsCBvQruUTOOZ1GNRK1n9E5YONnJ9mKMXiEF9QkIKuzusX+Zf/g2D4T5KrMVyhQK tuPyws2jD21jQVGZK5jXE+JqQRbR9UvOLxV0+NLBOfWMpjo311j/ajW795XkySzlvFtp ZHgrHzP6TA8t0fbqMNnLSiLkevaLr86ywoDOhv9K2zMBseFpROsIKWJJYCGeOAcrXz8y b6oRpu9SZbQv3gm9ABfsY116mgWy7Ob6K6jMuA06XpHbe25QvNjnENY1qarvo3UoymNv sgdrxjKkGfpyMBcXRstQbBykghud80Mfey55w0VStgkGLVHIaIccTUTGWvPUWbz1Ljlz WKKQ== It's not a bug IMHO. The problem is that you don't check the return value of gmtime_r(). If you did, you'd see that the result is NULL (which means the function failed) and so you shouldn't use any of the results (they're undefined). #include <unistd.h> #include <time.h> #include <string.h> #include <stdio.h> int main(int argc, const char * argv[]) { char tmpc[128]; struct tm tm; memset(tmpc, 0, sizeof(tmpc)); __darwin_time_t tValue=2914986787602432000; if (gmtime_r(&tValue, &tm)) { strftime(tmpc, sizeof(tmpc), "%FT%T", &tm); printf("time: %s\n",tmpc); printf("-----------------\n"); } struct tm tm2; tm2.tm_mon=10240; memset(tmpc, 0, sizeof(tmpc)); tValue=2914986787602432000; if (gmtime_r(&tValue, &tm2)) { strftime(tmpc, sizeof(tmpc), "%FT%T", &tm2); printf("time: %s\n",tmpc); } return 0; } But also here, the number you're providing to tValue looks a lot like nanosecond time stamp, and gmtime_r() expects seconds. If you correct that, then you get: time: 2062-05-16T06:33:07 ----------------- time: 2062-05-16T06:33:07 On Sat, Sep 9, 2017 at 5:51 PM, Stephane Sudre <dev.iceberg@gmail.com> wrote:
Maybe I'm missing something (regarding the tm var) but shouldn't all the struct tm fields be correctly set by gmtime_r?
#include <unistd.h> #include <time.h> #include <string.h> #include <stdio.h>
int main(int argc, const char * argv[]) {
char tmpc[128]; struct tm tm;
memset(tmpc, 0, sizeof(tmpc));
__darwin_time_t tValue=2914986787602432000;
gmtime_r(&tValue, &tm); strftime(tmpc, sizeof(tmpc), "%FT%T", &tm);
printf("time: %s\n",tmpc);
printf("-----------------\n");
struct tm tm2; tm2.tm_mon=10240;
memset(tmpc, 0, sizeof(tmpc));
tValue=2914986787602432000;
gmtime_r(&tValue, &tm2); strftime(tmpc, sizeof(tmpc), "%FT%T", &tm2);
printf("time: %s\n",tmpc);
return 0; }
=>
time: 1900-01-00T18:40:00 ----------------- time: 1900-10241-00T18:40:00 _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (Darwin-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/darwin-dev/ stephen.butler%40gmail.com
This email sent to stephen.butler@gmail.com
_______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (Darwin-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/darwin-dev/site_archiver%40lists.app... This email sent to site_archiver@lists.apple.com
participants (1)
-
Stephen J. Butler