From ac1aa530ff9c875068e69991f6cfa7f46ea10aaf Mon Sep 17 00:00:00 2001 From: Tomasz Pala Date: Sat, 18 Apr 2009 17:45:01 +0200 Subject: [PATCH] irq plugin: Parse interrupt counters as unsigned long long. Hello, attached patch fixes accounting of most frequent interrupts (like NICs on routers). E.g. in my case: 213: 76266 76357 76250 76397 2408617852 2411844062 2411642538 2411814531 PCI-MSI-edge eth1 214: 2621368360 2621463385 2621343444 2621386931 2349184 28 35 32 PCI-MSI-edge eth0 Here LONG_MAX (2147483647L) overflows in 10 days uptime and strtol() returns the same value. As all the values (including counter_t) are unsigned long long int, the fix is trivial (for now there's no need to check for irq_value overflow;>). -- Tomasz Pala Signed-off-by: Florian Forster --- src/irq.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/irq.c b/src/irq.c index 9b7e6187..38304fca 100644 --- a/src/irq.c +++ b/src/irq.c @@ -152,8 +152,8 @@ static int irq_read (void) FILE *fh; char buffer[BUFSIZE]; unsigned int irq; - unsigned int irq_value; - long value; + unsigned long long irq_value; + unsigned long long value; char *endptr; int i; @@ -183,7 +183,7 @@ static int irq_read (void) for (i = 1; i < fields_num; i++) { errno = 0; - value = strtol (fields[i], &endptr, 10); + value = strtoull (fields[i], &endptr, 10); if ((*endptr != '\0') || (errno != 0)) break; -- 2.11.0