----- Original Message ----- > Hi, > > On 11/07/14 18:41, Bob Peterson wrote: > > ----- Original Message ----- > > (snip) > >> Use timersub() here perhaps? > >> > >> Otherwise looks good, > >> > >> Steve. > > Hi Steve, > > > > Thanks for the suggestion. How about this version? > Yes, that looks better. There is probably a nicer way to do the > conversion to string too... a quick google points at using a time_t to > contain tv_secs, converting to tm and then appending the tv_usecs after. > Should be a bit cleaner than doing it manually, > > Steve.
Hi, I could implement your suggestion like this. I could also use strftime, but it's ugly as sin, so I'm reluctant to do so. What do you think? Regards, Bob Peterson --- diff --git a/gfs2/fsck/main.c b/gfs2/fsck/main.c index b4b1a03..ad42b0d 100644 --- a/gfs2/fsck/main.c +++ b/gfs2/fsck/main.c @@ -11,6 +11,8 @@ #include <signal.h> #include <libintl.h> #include <locale.h> +#include <sys/time.h> +#include <time.h> #define _(String) gettext(String) #include "copyright.cf" @@ -244,11 +246,15 @@ static const struct fsck_pass passes[] = { static int fsck_pass(const struct fsck_pass *p, struct gfs2_sbd *sdp) { int ret; + struct timeval before, after, diff; + time_t runtime; + struct tm *run_tm; if (fsck_abort) return FSCK_CANCELED; pass = p->name; log_notice( _("Starting %s\n"), p->name); + gettimeofday(&before, 0); ret = p->f(sdp); if (ret) exit(ret); @@ -257,7 +263,16 @@ static int fsck_pass(const struct fsck_pass *p, struct gfs2_sbd *sdp) log_notice( _("%s interrupted \n"), p->name); return FSCK_CANCELED; } - log_notice( _("%s complete \n"), p->name); + gettimeofday(&after, 0); + timersub(&after, &before, &diff); + runtime = (time_t)diff.tv_sec; + run_tm = gmtime(&runtime); + log_notice( _("%s completed in "), p->name); + if (run_tm->tm_hour) + log_notice("%dh", run_tm->tm_hour); + if (run_tm->tm_min) + log_notice("%dm", run_tm->tm_min); + log_notice("%d.%03lds \n", run_tm->tm_sec, diff.tv_usec / 1000); return 0; }