Hi, I am getting these compile warnings using Clang 3.7.0:
wsutil/nstime.c:235:25: warning: shifting a negative signed value is undefined [-Wshift-negative-value] time_t l_time_min = TIME_T_MIN; ^~~~~~~~~~ wsutil/nstime.c:223:36: note: expanded from macro 'TIME_T_MIN' : ~ (time_t) 0 << (sizeof (time_t) * CHAR_BIT - 1))) ~~~~~~~~~~~~ ^ wsutil/nstime.c:236:25: warning: shifting a negative signed value is undefined [-Wshift-negative-value] time_t l_time_max = TIME_T_MAX; ^~~~~~~~~~ wsutil/nstime.c:226:46: note: expanded from macro 'TIME_T_MAX' #define TIME_T_MAX ((time_t) (~ (time_t) 0 - TIME_T_MIN)) ^~~~~~~~~~ wsutil/nstime.c:223:36: note: expanded from macro 'TIME_T_MIN' : ~ (time_t) 0 << (sizeof (time_t) * CHAR_BIT - 1))) ~~~~~~~~~~~~ ^ Looking a bit further in the code, I became a bit confused on what is going on in nstime.c. There is a magic "fixup" constant and some special handling for the largest and smallest time_t values. The comments suggest that it is based on Samba code, but their latest version[1] is much simpler: #ifndef TIME_T_MIN /* we use 0 here, because (time_t)-1 means error */ #define TIME_T_MIN 0 #endif /* * we use the INT32_MAX here as on 64 bit systems, * gmtime() fails with INT64_MAX */ #ifndef TIME_T_MAX #define TIME_T_MAX MIN(INT32_MAX,_TYPE_MAXIMUM(time_t)) #endif /* 64 bit time (100 nanosec) 1601 - cifs6.txt, section 3.5, page 30, 4 byte aligned */ typedef uint64_t NTTIME; and the conversion method[2]: /** put a 8 byte filetime from a time_t This takes GMT as input **/ _PUBLIC_ void unix_to_nt_time(NTTIME *nt, time_t t) { uint64_t t2; if (t == (time_t)-1) { *nt = (NTTIME)-1LL; return; } if (t == TIME_T_MAX || t == INT64_MAX) { *nt = 0x7fffffffffffffffLL; return; } if (t == 0) { *nt = 0; return; } t2 = t; t2 += TIME_FIXUP_CONSTANT_INT; t2 *= 1000*1000*10; *nt = t2; } Shouldn't we do the same then? (Guy?) -- Kind regards, Peter Wu https://lekensteyn.nl [1]: https://github.com/samba-team/samba/blob/master/lib/util/time.h#L31 [2]: https://github.com/samba-team/samba/blob/master/lib/util/time.c#L136 ___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev@wireshark.org> Archives: https://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe