#include #include #include #include #include "time.h" /* gnulib time.h */ #include #define TIME_CHECK_DELTA 10000 #define TIME_CHECK_RANGE 120000 static jmp_buf buf; static time_t orig_large_time = -67768038400770896; static time_t large_time = -67768038400770896; /* time_find.c */ int localtime_hang_handler () { printf ("Hang detected for %ld\n", (long) large_time); longjmp(buf, 1); } int main () { struct tm output_time; signal (SIGALRM, (void *) localtime_hang_handler); if(setjmp(buf)) next: large_time = large_time + TIME_CHECK_DELTA; alarm(1); localtime_r (&large_time, &output_time); printf ("No hang for %ld\n", (long) large_time); alarm(0); if (large_time < (orig_large_time + TIME_CHECK_RANGE)) { goto next; } return 0; }