#include #include #include #include #include "time.h" /* gnulib time.h */ #include #define TIME_CHECK_GOOD -67768038400760896 #define TIME_CHECK_BAD -67768038400750896 static jmp_buf buf; static time_t check_time = TIME_CHECK_GOOD; static time_t last_good_time = TIME_CHECK_GOOD; static time_t last_bad_time = TIME_CHECK_BAD; /* time_find.c */ int localtime_hang_handler () { printf ("Hang detected for %ld\n", (long) check_time); last_bad_time = check_time; check_time = last_good_time; longjmp(buf, 1); } int main () { struct tm output_time; signal (SIGALRM, (void *) localtime_hang_handler); if(setjmp(buf)) next: check_time = (check_time + last_bad_time) / 2; alarm(1); localtime_r (&check_time, &output_time); printf ("No hang for %ld\n", (long) check_time); alarm(0); last_good_time = check_time; goto next; return 0; }