Support negative nsecs when viewing seconds with hours and minutes.
authorStig Bjørlykke <stig@bjorlykke.org>
Fri, 2 Sep 2011 11:46:33 +0000 (11:46 -0000)
committerStig Bjørlykke <stig@bjorlykke.org>
Fri, 2 Sep 2011 11:46:33 +0000 (11:46 -0000)
svn path=/trunk/; revision=38862

epan/column-utils.c

index e3397aa9a498379930a05ba26355e94e7f5bab68..ae3bfb747cd2b1041ddabf4f5fa61cd4f9c7539e 100644 (file)
@@ -771,12 +771,17 @@ static gint
 set_time_hour_min_sec(const nstime_t *ts, gchar *buf)
 {
   time_t secs = ts->secs;
+  long nsecs = (long) ts->nsecs;
   gboolean negative = FALSE;
 
   if (secs < 0) {
     secs = -secs;
     negative = TRUE;
   }
+  if (nsecs < 0) {
+    nsecs = -nsecs;
+    negative = TRUE;
+  }
 
   switch(timestamp_get_precision()) {
   case TS_PREC_FIXED_SEC:
@@ -806,18 +811,18 @@ set_time_hour_min_sec(const nstime_t *ts, gchar *buf)
                 (gint32) secs / (60 * 60),
                 (gint32) (secs / 60) % 60,
                 (gint32) secs % 60,
-                (long)ts->nsecs / 100000000);
+                nsecs / 100000000);
     } else if (secs >= 60) {
       g_snprintf(buf, COL_MAX_LEN, "%s%dm %2d.%01lds",
                 negative ? "- " : "",
                 (gint32) secs / 60,
                 (gint32) secs % 60,
-                (long)ts->nsecs / 100000000);
+                nsecs / 100000000);
     } else {
       g_snprintf(buf, COL_MAX_LEN, "%s%d.%01lds",
                 negative ? "- " : "",
                 (gint32) secs,
-                (long)ts->nsecs / 100000000);
+                nsecs / 100000000);
     }
     break;
   case TS_PREC_FIXED_CSEC:
@@ -828,18 +833,18 @@ set_time_hour_min_sec(const nstime_t *ts, gchar *buf)
                 (gint32) secs / (60 * 60),
                 (gint32) (secs / 60) % 60,
                 (gint32) secs % 60,
-                (long)ts->nsecs / 10000000);
+                nsecs / 10000000);
     } else if (secs >= 60) {
       g_snprintf(buf, COL_MAX_LEN, "%s%dm %2d.%02lds",
                 negative ? "- " : "",
                 (gint32) secs / 60,
                 (gint32) secs % 60,
-                (long)ts->nsecs / 10000000);
+                nsecs / 10000000);
     } else {
       g_snprintf(buf, COL_MAX_LEN, "%s%d.%02lds",
                 negative ? "- " : "",
                 (gint32) secs,
-                (long)ts->nsecs / 10000000);
+                nsecs / 10000000);
     }
     break;
   case TS_PREC_FIXED_MSEC:
@@ -850,18 +855,18 @@ set_time_hour_min_sec(const nstime_t *ts, gchar *buf)
                 (gint32) secs / (60 * 60),
                 (gint32) (secs / 60) % 60,
                 (gint32) secs % 60,
-                (long)ts->nsecs / 1000000);
+                nsecs / 1000000);
     } else if (secs >= 60) {
       g_snprintf(buf, COL_MAX_LEN, "%s%dm %2d.%03lds",
                 negative ? "- " : "",
                 (gint32) secs / 60,
                 (gint32) secs % 60,
-                (long)ts->nsecs / 1000000);
+                nsecs / 1000000);
     } else {
       g_snprintf(buf, COL_MAX_LEN, "%s%d.%03lds",
                 negative ? "- " : "",
                 (gint32) secs,
-                (long)ts->nsecs / 1000000);
+                nsecs / 1000000);
     }
     break;
   case TS_PREC_FIXED_USEC:
@@ -872,18 +877,18 @@ set_time_hour_min_sec(const nstime_t *ts, gchar *buf)
                 (gint32) secs / (60 * 60),
                 (gint32) (secs / 60) % 60,
                 (gint32) secs % 60,
-                (long)ts->nsecs / 1000);
+                nsecs / 1000);
     } else if (secs >= 60) {
       g_snprintf(buf, COL_MAX_LEN, "%s%dm %2d.%06lds",
                 negative ? "- " : "",
                 (gint32) secs / 60,
                 (gint32) secs % 60,
-                (long)ts->nsecs / 1000);
+                nsecs / 1000);
     } else {
       g_snprintf(buf, COL_MAX_LEN, "%s%d.%06lds",
                 negative ? "- " : "",
                 (gint32) secs,
-                (long)ts->nsecs / 1000);
+                nsecs / 1000);
     }
     break;
   case TS_PREC_FIXED_NSEC:
@@ -894,18 +899,18 @@ set_time_hour_min_sec(const nstime_t *ts, gchar *buf)
                 (gint32) secs / (60 * 60),
                 (gint32) (secs / 60) % 60,
                 (gint32) secs % 60,
-                (long)ts->nsecs);
+                nsecs);
     } else if (secs >= 60) {
       g_snprintf(buf, COL_MAX_LEN, "%s%dm %2d.%09lds",
                 negative ? "- " : "",
                 (gint32) secs / 60,
                 (gint32) secs % 60,
-                (long)ts->nsecs);
+                nsecs);
     } else {
       g_snprintf(buf, COL_MAX_LEN, "%s%d.%09lds",
                 negative ? "- " : "",
                 (gint32) secs,
-                (long)ts->nsecs);
+                nsecs);
     }
     break;
   default: