/* (C) 2011 Mika Ilmaranta */ #include #include "defs.h" #include "timecalc.h" int timeval_diff_cmp(struct timeval *a, struct timeval *b, int operation, time_t sec, suseconds_t usec) { time_t diff_sec; suseconds_t diff_usec; diff_sec = a->tv_sec - b->tv_sec; diff_usec = a->tv_usec - b->tv_usec; if(diff_usec < 0) { diff_sec--; diff_usec = 1000000L + diff_usec; } switch(operation) { case TIMEVAL_DIFF_CMP_GT: if(diff_sec > sec) return(TRUE); if(diff_sec == sec && diff_usec > usec) return(TRUE); return(FALSE); break; case TIMEVAL_DIFF_CMP_LT: if(diff_sec < sec) return(TRUE); if(diff_sec == sec && diff_usec < usec) return(TRUE); return(FALSE); break; default: syslog(LOG_ERR, "%s: %s: warning: unknown timeval_diff_cmp operation requested %d", __FILE__, __FUNCTION__, operation); return(FALSE); } } long timeval_diff(struct timeval *a, struct timeval *b) { return( ((a->tv_sec - b->tv_sec) * 1000000L) + (a->tv_usec - b->tv_usec) ); } void timeval_add(struct timeval *a, time_t sec, suseconds_t usec) { a->tv_sec += sec; a->tv_usec += usec; if(a->tv_usec >= 1000000L) { a->tv_sec++; a->tv_usec -= 1000000L; } } /* EOF */