From: Tomasz Pala Date: Sat, 18 Apr 2009 15:45:01 +0000 (+0200) Subject: irq plugin: Parse interrupt counters as unsigned long long. X-Git-Tag: collectd-4.5.4~17 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=ac1aa530ff9c875068e69991f6cfa7f46ea10aaf 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 --- 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;