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.

Bob Peterson
Red Hat File Systems
---
diff --git a/gfs2/fsck/main.c b/gfs2/fsck/main.c
index 81b7dd5..2c51e80 100644
--- a/gfs2/fsck/main.c
+++ b/gfs2/fsck/main.c
@@ -11,6 +11,7 @@
  #include <signal.h>
  #include <libintl.h>
  #include <locale.h>
+#include <sys/time.h>
  #define _(String) gettext(String)
  #include <syslog.h>
@@ -247,11 +248,14 @@ static const struct fsck_pass passes[] = {
  static int fsck_pass(const struct fsck_pass *p, struct gfs2_sbd *sdp)
  {
        int ret;
+       long hh, mm, ss, ms;
+       struct  timeval before, after, diff;
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);
@@ -260,7 +264,18 @@ 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);
+       hh = diff.tv_sec / 3600;
+       mm = (diff.tv_sec / 60) - (hh * 60);
+       ss = diff.tv_sec - (hh * 3600) - (mm * 60);
+       ms = diff.tv_usec / 1000;
+       log_notice( _("%s completed in "), p->name);
+       if (hh)
+               log_notice("%ldh", hh);
+       if (mm)
+               log_notice("%ldm", mm);
+       log_notice("%ld.%03lds      \n", ss, ms);
        return 0;
  }

Reply via email to