File procinfo-float.dif of Package procinfo

Index: procinfo.c
===================================================================
--- procinfo.c.orig
+++ procinfo.c
@@ -219,7 +219,7 @@ first_page (long sl)
 	  the DIFF macro, so that we'll end up with nice multiples of
 	  4 when using the -d option.
 	*/
-#define rate (sl>1000000 ? sl/1000000 : 1)
+#define rate (sl>1000000 ? (float)(sl/1000000) : (float)1.0)
 	printf ("Mem:  %12ld%12ld%12ld%12ld%12ld",
 		DIFF (m_to), DIFF (m_us), DIFF (m_fr), DIFF (m_sh), DIFF (m_bu));
 	if (have_m_c)
@@ -1206,9 +1206,11 @@ main (int ac, char **av)
 
 	    then = now;
 	    gettimeofday (&now, 0);
-	    if (per_sec)
-		rate = (float) now.tv_sec + (float) now.tv_usec / 1.0e6 -
-		    (float) then.tv_sec - (float) then.tv_usec / 1.0e6;
+	    if (per_sec) {
+		struct timeval sub;
+		timersub(&now, &then, &sub);
+		rate = (float)sub.tv_sec+(float)sub.tv_usec/1.0e6;
+	    }
 
 	} else {
 	    putchar ('\n');
Index: routines.c
===================================================================
--- routines.c.orig
+++ routines.c
@@ -397,7 +397,7 @@ char *
 hms (unsigned long t)
 {
     unsigned int d, h, m, s;
-    static char buf[22];
+    static char buf[256];
 
     t = (t*100ULL) / usr_hz;
     d = (unsigned int) (t / 8640000);
@@ -409,9 +409,11 @@ hms (unsigned long t)
     s = (unsigned int) (t / 100);
     t = t - (unsigned long) (s * 100);
     if (d > 0)
-	sprintf (buf, "%3ud %2u:%02u:%02u.%02u", d, h, m, s, (unsigned int) t);
+	snprintf (buf, sizeof(buf)-1,
+		"%3ud %2u:%02u:%02u.%02u", d, h, m, s, (unsigned int) t);
     else
-	sprintf (buf, "     %2u:%02u:%02u.%02u", h, m, s, (unsigned int) t);
+	snprintf (buf, sizeof(buf)-1,
+		"     %2u:%02u:%02u.%02u",    h, m, s, (unsigned int) t);
     return buf;
 }
 
@@ -420,7 +422,7 @@ char *
 perc (unsigned long i, unsigned long t, int cpus)
 {
     unsigned int v;
-    static char buf[16];
+    static char buf[128];
 
     t = (t*100ULL) / usr_hz;
     if ((signed long) i == -1 || t == 0)
@@ -434,7 +436,7 @@ perc (unsigned long i, unsigned long t,
     /* if (v > 1000)
 	return "+++.+%";
     else */
-	sprintf (buf, "%3u.%u%%", v / 10, v % 10);
+	snprintf (buf, sizeof(buf)-1, "%3u.%u%%", v / 10, v % 10);
     return buf;
 }
 
openSUSE Build Service is sponsored by