1c0b746e5SOllivier Robert /* 2c0b746e5SOllivier Robert * uglydate - convert a time stamp to something barely readable 3c0b746e5SOllivier Robert * The string returned is 37 characters long. 4c0b746e5SOllivier Robert */ 5*2b15cb3dSCy Schubert #include <config.h> 6c0b746e5SOllivier Robert #include <stdio.h> 7c0b746e5SOllivier Robert 8c0b746e5SOllivier Robert #include "ntp_fp.h" 9c0b746e5SOllivier Robert #include "ntp_unixtime.h" 10c0b746e5SOllivier Robert #include "lib_strbuf.h" 11c0b746e5SOllivier Robert #include "ntp_stdlib.h" 12224ba2bdSOllivier Robert 13c0b746e5SOllivier Robert 14c0b746e5SOllivier Robert char * 15c0b746e5SOllivier Robert uglydate( 16c0b746e5SOllivier Robert l_fp *ts 17c0b746e5SOllivier Robert ) 18c0b746e5SOllivier Robert { 19c0b746e5SOllivier Robert char *bp; 20c0b746e5SOllivier Robert char *timep; 21c0b746e5SOllivier Robert struct tm *tm; 22c0b746e5SOllivier Robert time_t sec; 23c0b746e5SOllivier Robert long msec; 24c0b746e5SOllivier Robert int year; 25c0b746e5SOllivier Robert 26c0b746e5SOllivier Robert timep = ulfptoa(ts, 6); /* returns max 17 characters */ 27c0b746e5SOllivier Robert LIB_GETBUF(bp); 28c0b746e5SOllivier Robert sec = ts->l_ui - JAN_1970; 29c0b746e5SOllivier Robert msec = ts->l_uf / 4294967; /* fract / (2**32/1000) */ 30c0b746e5SOllivier Robert tm = gmtime(&sec); 31c0b746e5SOllivier Robert if (ts->l_ui == 0) { 32c0b746e5SOllivier Robert /* 33c0b746e5SOllivier Robert * Probably not a real good thing to do. Oh, well. 34c0b746e5SOllivier Robert */ 35c0b746e5SOllivier Robert year = 0; 36c0b746e5SOllivier Robert tm->tm_yday = 0; 37c0b746e5SOllivier Robert tm->tm_hour = 0; 38c0b746e5SOllivier Robert tm->tm_min = 0; 39c0b746e5SOllivier Robert tm->tm_sec = 0; 40c0b746e5SOllivier Robert } else { 41c0b746e5SOllivier Robert year = tm->tm_year; 42c0b746e5SOllivier Robert while (year >= 100) 43c0b746e5SOllivier Robert year -= 100; 44c0b746e5SOllivier Robert } 45*2b15cb3dSCy Schubert snprintf(bp, LIB_BUFLENGTH, 46*2b15cb3dSCy Schubert "%17s %02d:%03d:%02d:%02d:%02d.%03ld", timep, year, 47*2b15cb3dSCy Schubert tm->tm_yday, tm->tm_hour, tm->tm_min, tm->tm_sec, 48*2b15cb3dSCy Schubert msec); 49*2b15cb3dSCy Schubert 50c0b746e5SOllivier Robert return bp; 51c0b746e5SOllivier Robert } 52