1*b7579f77SDag-Erling Smørgrav /* taken from ldns 1.6.1 */ 2*b7579f77SDag-Erling Smørgrav #include "config.h" 3*b7579f77SDag-Erling Smørgrav #ifdef HAVE_TIME_H 4*b7579f77SDag-Erling Smørgrav #include <time.h> 5*b7579f77SDag-Erling Smørgrav #endif 6*b7579f77SDag-Erling Smørgrav #include "util/locks.h" 7*b7579f77SDag-Erling Smørgrav 8*b7579f77SDag-Erling Smørgrav /** the lock for ctime buffer */ 9*b7579f77SDag-Erling Smørgrav static lock_basic_t ctime_lock; 10*b7579f77SDag-Erling Smørgrav /** has it been inited */ 11*b7579f77SDag-Erling Smørgrav static int ctime_r_init = 0; 12*b7579f77SDag-Erling Smørgrav 13*b7579f77SDag-Erling Smørgrav /** cleanup ctime_r on exit */ 14*b7579f77SDag-Erling Smørgrav static void 15*b7579f77SDag-Erling Smørgrav ctime_r_cleanup(void) 16*b7579f77SDag-Erling Smørgrav { 17*b7579f77SDag-Erling Smørgrav if(ctime_r_init) { 18*b7579f77SDag-Erling Smørgrav ctime_r_init = 0; 19*b7579f77SDag-Erling Smørgrav lock_basic_destroy(&ctime_lock); 20*b7579f77SDag-Erling Smørgrav } 21*b7579f77SDag-Erling Smørgrav } 22*b7579f77SDag-Erling Smørgrav 23*b7579f77SDag-Erling Smørgrav char *ctime_r(const time_t *timep, char *buf) 24*b7579f77SDag-Erling Smørgrav { 25*b7579f77SDag-Erling Smørgrav char* result; 26*b7579f77SDag-Erling Smørgrav if(!ctime_r_init) { 27*b7579f77SDag-Erling Smørgrav /* still small race where this init can be done twice, 28*b7579f77SDag-Erling Smørgrav * which is mostly harmless */ 29*b7579f77SDag-Erling Smørgrav ctime_r_init = 1; 30*b7579f77SDag-Erling Smørgrav lock_basic_init(&ctime_lock); 31*b7579f77SDag-Erling Smørgrav atexit(&ctime_r_cleanup); 32*b7579f77SDag-Erling Smørgrav } 33*b7579f77SDag-Erling Smørgrav lock_basic_lock(&ctime_lock); 34*b7579f77SDag-Erling Smørgrav result = ctime(timep); 35*b7579f77SDag-Erling Smørgrav if(buf && result) { 36*b7579f77SDag-Erling Smørgrav if(strlen(result) > 10 && result[7]==' ' && result[8]=='0') 37*b7579f77SDag-Erling Smørgrav result[8]=' '; /* fix error in windows ctime */ 38*b7579f77SDag-Erling Smørgrav strcpy(buf, result); 39*b7579f77SDag-Erling Smørgrav } 40*b7579f77SDag-Erling Smørgrav lock_basic_unlock(&ctime_lock); 41*b7579f77SDag-Erling Smørgrav return result; 42*b7579f77SDag-Erling Smørgrav } 43