From 7d2612bde86ee1096ff0b7fbb3da87a4c654f2de Mon Sep 17 00:00:00 2001 From: marschap Date: Sun, 3 Jul 2005 16:14:45 +0000 Subject: [PATCH] fix potential division by zero issues --- clients/lcdproc/cpu.c | 31 +++++++++++++++++++++---------- clients/lcdproc/cpu_smp.c | 17 ++++++++--------- 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/clients/lcdproc/cpu.c b/clients/lcdproc/cpu.c index 00235bc..3648ea9 100644 --- a/clients/lcdproc/cpu.c +++ b/clients/lcdproc/cpu.c @@ -34,12 +34,12 @@ cpu_screen(int rep, int display) #undef CPU_BUF_SIZE #define CPU_BUF_SIZE 4 static int first = TRUE; - static float cpu[CPU_BUF_SIZE + 1][5]; // last buffer is scratch + static double cpu[CPU_BUF_SIZE + 1][5]; // last buffer is scratch static int gauge_wid = 0; static int usni_wid = 0; int i, j, n; - float value; + double value; load_type load; if (first) { @@ -104,11 +104,20 @@ cpu_screen(int rep, int display) cpu[i][j] = cpu[i + 1][j]; // Read new data - cpu[CPU_BUF_SIZE - 1][0] = ((float) load.user / (float) load.total) * 100.0; - cpu[CPU_BUF_SIZE - 1][1] = ((float) load.system / (float) load.total) * 100.0; - cpu[CPU_BUF_SIZE - 1][2] = ((float) load.nice / (float) load.total) * 100.0; - cpu[CPU_BUF_SIZE - 1][3] = ((float) load.idle / (float) load.total) * 100.0; - cpu[CPU_BUF_SIZE - 1][4] = (((float) load.user + (float) load.system + (float) load.nice) / (float) load.total) * 100.0; + if (load.total > 0L) { + cpu[CPU_BUF_SIZE - 1][0] = 100.0 * ((double) load.user / (double) load.total); + cpu[CPU_BUF_SIZE - 1][1] = 100.0 * ((double) load.system / (double) load.total); + cpu[CPU_BUF_SIZE - 1][2] = 100.0 * ((double) load.nice / (double) load.total); + cpu[CPU_BUF_SIZE - 1][3] = 100.0 * ((double) load.idle / (double) load.total); + cpu[CPU_BUF_SIZE - 1][4] = 100.0 * (((double) load.user + (double) load.system + (double) load.nice) / (double) load.total); + } + else { + cpu[CPU_BUF_SIZE - 1][0] = 0.0; + cpu[CPU_BUF_SIZE - 1][1] = 0.0; + cpu[CPU_BUF_SIZE - 1][2] = 0.0; + cpu[CPU_BUF_SIZE - 1][3] = 0.0; + cpu[CPU_BUF_SIZE - 1][4] = 0.0; + } /* // Only clear on first display... @@ -204,12 +213,12 @@ cpu_graph_screen(int rep, int display) #undef CPU_BUF_SIZE #define CPU_BUF_SIZE 2 static int first = TRUE; - static float cpu[CPU_BUF_SIZE]; + static double cpu[CPU_BUF_SIZE]; static int cpu_past[LCD_MAX_WIDTH]; static int gauge_hgt = 0; int i, n = 0; - float value ; + double value ; load_type load; if (first) { @@ -248,7 +257,9 @@ cpu_graph_screen(int rep, int display) // Read and save new data machine_get_load(&load); - cpu[CPU_BUF_SIZE-1] = ((float) load.user + (float) load.system + (float) load.nice) / (float) load.total; + cpu[CPU_BUF_SIZE-1] = (load.total > 0L) + ? ((double) load.user + (double) load.system + (double) load.nice) / (double) load.total + : 0; // Average values for final result value = 0.0; diff --git a/clients/lcdproc/cpu_smp.c b/clients/lcdproc/cpu_smp.c index cb673d4..6b73b9c 100644 --- a/clients/lcdproc/cpu_smp.c +++ b/clients/lcdproc/cpu_smp.c @@ -132,21 +132,20 @@ cpu_smp_screen (int rep, int display) for (j = 4; j < 5; j++) cpu[z][i][j] = cpu[z][i + 1][j]; - if (load[z].total == 0) { - continue; - } // Read new data #if 0 // we're only using 4 right now - cpu[z][CPU_BUF_SIZE - 1][0] = ((float) load[z].user / (float) load[z].total) * 100.0; - cpu[z][CPU_BUF_SIZE - 1][1] = ((float) load[z].system / (float) load[z].total) * 100.0; - cpu[z][CPU_BUF_SIZE - 1][2] = ((float) load[z].nice / (float) load[z].total) * 100.0; - cpu[z][CPU_BUF_SIZE - 1][3] = ((float) load[z].idle / (float) load[z].total) * 100.0; + cpu[z][CPU_BUF_SIZE-1][0] = ((float) load[z].user / (float) load[z].total) * 100.0; + cpu[z][CPU_BUF_SIZE-1][1] = ((float) load[z].system / (float) load[z].total) * 100.0; + cpu[z][CPU_BUF_SIZE-1][2] = ((float) load[z].nice / (float) load[z].total) * 100.0; + cpu[z][CPU_BUF_SIZE-1][3] = ((float) load[z].idle / (float) load[z].total) * 100.0; #endif - cpu[z][CPU_BUF_SIZE - 1][4] = (((float) load[z].user + (float) load[z].system + (float) load[z].nice) / (float) load[z].total) * 100.0; + cpu[z][CPU_BUF_SIZE-1][4] = (load[z].total > 0L) + ? (((float) load[z].user + (float) load[z].system + (float) load[z].nice) / (float) load[z].total) * 100.0 + : 0.0; // Average values for final result for (i = 4; i < 5; i++) { - value = 0; + value = 0.0; for (j = 0; j < CPU_BUF_SIZE; j++) { value += cpu[z][j][i]; }