| From: Matthieu Baerts <matthieu.baerts@tessares.net> |
| Subject: [PATCH] ifstat: v1.1-8.1 from Debian |
| |
| Extracted from: |
| |
| http://deb.debian.org/debian/pool/main/i/ifstat/ifstat_1.1-8.1.diff.gz |
| |
| Author: |
| - Goswin von Brederlow <goswin-v-b@web.de> |
| |
| ChangeLog: |
| |
| * snmp.c: fix 2 pointer targets differ in signedness warnings |
| * Adding upport for 64bit /proc/net/dev counters. |
| * Clean up compiler warnings. |
| |
| Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net> |
| --- |
| data.c | 4 +- |
| drivers.c | 36 ++++++++-------- |
| ifstat.c | 5 ++- |
| ifstat.h | 6 +-- |
| snmp.c | 12 +++--- |
| |
| --- a/data.c |
| +++ b/data.c |
| @@ -103,8 +103,8 @@ void ifstat_free_interface(struct ifstat |
| } |
| |
| void ifstat_set_interface_stats(struct ifstat_data *data, |
| - unsigned long bytesin, |
| - unsigned long bytesout) { |
| + unsigned long long bytesin, |
| + unsigned long long bytesout) { |
| if (data->bout > bytesout || data->bin > bytesin) { |
| if (!ifstat_quiet) |
| ifstat_error("warning: rollover for interface %s, reinitialising.", data->name); |
| --- a/drivers.c |
| +++ b/drivers.c |
| @@ -140,6 +140,7 @@ char *strchr (), *strrchr (); |
| |
| static void examine_interface(struct ifstat_list *ifs, char *name, |
| int ifflags, int iftype) { |
| + (void)iftype; |
| #ifdef IFF_LOOPBACK |
| if ((ifflags & IFF_LOOPBACK) && !(ifs->flags & IFSTAT_LOOPBACK)) |
| return; |
| @@ -242,6 +243,7 @@ static int ioctl_map_scan(int sd, struct |
| static int ioctl_scan_interfaces(struct ifstat_driver *driver, |
| struct ifstat_list *ifs) { |
| int sd; |
| + (void)driver; |
| |
| if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { |
| ifstat_perror("socket"); |
| @@ -256,7 +258,7 @@ static int ioctl_scan_interfaces(struct |
| #endif |
| |
| #ifdef USE_KSTAT |
| -static int get_kstat_long(kstat_t *ksp, char *name, unsigned long *value) { |
| +static int get_kstat_long(kstat_t *ksp, char *name, unsigned long long *value) { |
| kstat_named_t *data; |
| |
| if ((data = kstat_data_lookup(ksp, name)) == NULL) |
| @@ -277,7 +279,7 @@ static int get_kstat_long(kstat_t *ksp, |
| *value = data->value.ui64; |
| break; |
| #else |
| - case KSTAT_DATA_LONGLONG: |
| + case KSTAT_DATA_LONG LONGLONG: |
| *value = data->value.ll; |
| break; |
| case KSTAT_DATA_ULONGLONG: |
| @@ -311,7 +313,7 @@ static int kstat_open_driver(struct ifst |
| |
| static int kstat_get_stats(struct ifstat_driver *driver, |
| struct ifstat_list *ifs) { |
| - unsigned long bytesin, bytesout; |
| + unsigned long long bytesin, bytesout; |
| struct ifstat_data *cur; |
| kstat_ctl_t *kc = driver->data; |
| kstat_t *ksp; |
| @@ -802,7 +804,7 @@ static int proc_get_stats(struct ifstat_ |
| char buf[1024]; |
| FILE *f; |
| char *iface, *stats; |
| - unsigned long bytesin, bytesout; |
| + unsigned long long bytesin, bytesout; |
| struct ifstat_data *cur; |
| struct proc_driver_data *data = driver->data; |
| char *file; |
| @@ -839,7 +841,7 @@ static int proc_get_stats(struct ifstat_ |
| iface++; |
| if (*iface == '\0') |
| continue; |
| - if (sscanf(stats, "%lu %*u %*u %*u %*u %*u %*u %*u %lu %*u", &bytesin, &bytesout) != 2) |
| + if (sscanf(stats, "%llu %*u %*u %*u %*u %*u %*u %*u %llu %*u", &bytesin, &bytesout) != 2) |
| continue; |
| |
| if ((cur = ifstat_get_interface(ifs, iface)) != NULL) |
| @@ -1326,9 +1328,9 @@ static int win32_get_stats(struct ifstat |
| for (i = 0; i < iftable->dwNumEntries; i++) { |
| if ((cur = ifstat_get_interface(ifs, iftable->table[i].bDescr)) != NULL) |
| ifstat_set_interface_stats(cur, |
| - (unsigned long) |
| + (unsigned long long) |
| iftable->table[i].dwInOctets, |
| - (unsigned long) |
| + (unsigned long long) |
| iftable->table[i].dwOutOctets); |
| } |
| return 1; |
| @@ -1346,40 +1348,40 @@ void win32_close_driver(struct ifstat_dr |
| static struct ifstat_driver drivers[] = { |
| #ifdef USE_KSTAT |
| { "kstat", &kstat_open_driver, &ioctl_scan_interfaces, &kstat_get_stats, |
| - &kstat_close_driver }, |
| + &kstat_close_driver, NULL }, |
| #endif |
| #ifdef USE_IFMIB |
| - { "ifmib", NULL, &ifmib_scan_interfaces, &ifmib_get_stats, NULL }, |
| + { "ifmib", NULL, &ifmib_scan_interfaces, &ifmib_get_stats, NULL, NULL }, |
| #endif |
| #ifdef USE_IFDATA |
| { "ifdata", &ifdata_open_driver, &ifdata_scan_interfaces, |
| - &ifdata_get_stats, &ifdata_close_driver }, |
| + &ifdata_get_stats, &ifdata_close_driver, NULL }, |
| #endif |
| #ifdef USE_ROUTE |
| { "route", &route_open_driver, &route_scan_interfaces, |
| - &route_get_stats, &route_close_driver }, |
| + &route_get_stats, &route_close_driver, NULL }, |
| #endif |
| #ifdef USE_KVM |
| { "kvm", &kvm_open_driver, &kvm_scan_interfaces, &kvm_get_stats, |
| - &kvm_close_driver }, |
| + &kvm_close_driver, NULL }, |
| #endif |
| #ifdef USE_PROC |
| { "proc", &proc_open_driver, &ioctl_scan_interfaces, &proc_get_stats, |
| - &proc_close_driver }, |
| + &proc_close_driver, NULL }, |
| #endif |
| #ifdef USE_DLPI |
| { "dlpi", &dlpi_open_driver, &dlpi_scan_interfaces, &dlpi_get_stats, |
| - &dlpi_close_driver }, |
| + &dlpi_close_driver, NULL }, |
| #endif |
| #ifdef USE_WIN32 |
| { "win32", &win32_open_driver, &win32_scan_interfaces, |
| - &win32_get_stats, &win32_close_driver }, |
| + &win32_get_stats, &win32_close_driver, NULL }, |
| #endif |
| #ifdef USE_SNMP |
| { "snmp", &snmp_open_driver, &snmp_scan_interfaces, &snmp_get_stats, |
| - &snmp_close_driver }, |
| + &snmp_close_driver, NULL }, |
| #endif |
| - { NULL } }; |
| + { NULL, NULL, NULL, NULL, NULL, NULL } }; |
| |
| int ifstat_get_driver(char *name, struct ifstat_driver *driver) { |
| int num = 0; |
| --- a/ifstat.c |
| +++ b/ifstat.c |
| @@ -215,7 +215,8 @@ static RETSIGTYPE update_termsize(int si |
| int _sigcont = 0; |
| #ifdef SIGCONT |
| static RETSIGTYPE sigcont(int sig) { |
| - _sigcont = 1; |
| + (void)sig; |
| + _sigcont = 1; |
| RESIGNAL(SIGCONT, &sigcont); |
| } |
| #endif |
| @@ -234,7 +235,7 @@ static RETSIGTYPE sigcont(int sig) { |
| |
| #define NUM "12345.12" |
| #define NA " n/a" |
| -#define WIDTH (sizeof(NUM) - 1) * 2 + (sizeof(SPACE) - 1) |
| +#define WIDTH ((ssize_t)sizeof(NUM) - 1) * 2 + ((ssize_t)sizeof(SPACE) - 1) |
| |
| #define LEN(options, namelen) (((options) & OPT_FIXEDWIDTH || (namelen) < WIDTH) ? WIDTH : (namelen)) |
| #define FMT(n) (((n) < 1e+5) ? "%8.2f" : (((n) < 1e+6) ? "%.1f" : "%.2e")) |
| --- a/ifstat.h |
| +++ b/ifstat.h |
| @@ -35,7 +35,7 @@ |
| struct ifstat_data { |
| char *name; |
| int namelen; |
| - unsigned long obout, obin, bout, bin; |
| + unsigned long long obout, obin, bout, bin; |
| int flags, index; |
| struct ifstat_data *next; |
| }; |
| @@ -72,8 +72,8 @@ void ifstat_add_interface(struct ifstat_ |
| void ifstat_free_interface(struct ifstat_data *data); |
| |
| void ifstat_set_interface_stats(struct ifstat_data *data, |
| - unsigned long bytesin, |
| - unsigned long bytesout); |
| + unsigned long long bytesin, |
| + unsigned long long bytesout); |
| |
| void ifstat_set_interface_index(struct ifstat_data *data, |
| int index); |
| --- a/snmp.c |
| +++ b/snmp.c |
| @@ -91,7 +91,7 @@ static int snmp_get_ifcount(struct snmp_ |
| |
| static int snmp_get_nextif(struct snmp_session *ss, int index) { |
| oid ifindex[] = { 1, 3, 6, 1, 2, 1, 2, 2, 1, 1, 0 }; |
| - int len = sizeof(ifindex) / sizeof(oid); |
| + unsigned int len = sizeof(ifindex) / sizeof(oid); |
| struct snmp_pdu *pdu; |
| struct snmp_pdu *response = NULL; |
| struct variable_list *vars; |
| @@ -139,7 +139,7 @@ static int snmp_get_nextif(struct snmp_s |
| |
| struct ifsnmp { |
| char name[S_IFNAMEMAX]; |
| - unsigned long bout, bin; |
| + unsigned long long bout, bin; |
| int flags, index; |
| }; |
| |
| @@ -248,7 +248,7 @@ static int snmp_get_ifinfos(struct snmp_ |
| if (memcmp(ifinfo, vars->name, sizeof(ifinfo) - 2 * sizeof(oid)) != 0) |
| continue; |
| for(i = 0; i < nifaces; i++) { |
| - if (ifsnmp[i].index == vars->name[10]) |
| + if ((signed long long)ifsnmp[i].index == (signed long long)vars->name[10]) |
| break; |
| } |
| |
| @@ -258,11 +258,11 @@ static int snmp_get_ifinfos(struct snmp_ |
| switch (vars->name[9]) { |
| case ifDescr: |
| if (vars->type == ASN_OCTET_STR) { |
| - int count = vars->val_len; |
| + unsigned int count = vars->val_len; |
| |
| if (count >= sizeof(ifsnmp[i].name)) |
| count = sizeof(ifsnmp[i].name) - 1; |
| - strncpy(ifsnmp[i].name, vars->val.string, count); |
| + strncpy(ifsnmp[i].name, (char *)vars->val.string, count); |
| ifsnmp[i].name[count] = '\0'; |
| } |
| break; |
| @@ -361,7 +361,7 @@ int snmp_open_driver(struct ifstat_drive |
| snmp_sess_init(&session); |
| session.peername = host; |
| session.version = SNMP_VERSION_1; |
| - session.community = community; |
| + session.community = (unsigned char *)community; |
| session.community_len = strlen(community); |
| |
| if ((data->session = snmp_open(&session)) == NULL) { |