--- projects/libstatgrab/src/libstatgrab/network_stats.c 2004/03/09 11:29:46 1.55 +++ projects/libstatgrab/src/libstatgrab/network_stats.c 2004/03/09 12:43:41 1.56 @@ -18,7 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA * - * $Id: network_stats.c,v 1.55 2004/03/09 11:29:46 ats Exp $ + * $Id: network_stats.c,v 1.56 2004/03/09 12:43:41 ats Exp $ */ #ifdef HAVE_CONFIG_H @@ -322,20 +322,18 @@ network_stat_t *get_network_stats(int *entries){ } long long transfer_diff(long long new, long long old){ -#if defined(SOL7) || defined(LINUX) || defined(FREEBSD) || defined(DFBSD) -#define MAXVAL 0xffffffffLL +#if defined(SOL7) || defined(LINUX) || defined(FREEBSD) || defined(DFBSD) || defined(OPENBSD) + /* 32-bit quantities, so we must explicitly deal with wraparound. */ +#define MAXVAL 0x100000000LL + if (new >= old) { + return new - old; + } else { + return MAXVAL + new - old; + } #else -#define MAXVAL 0xffffffffffffffffLL + /* 64-bit quantities, so plain subtraction works. */ + return new - old; #endif - long long result; - if(new>=old){ - result = (new-old); - }else{ - result = (MAXVAL+(new-old)); - } - - return result; - } network_stat_t *get_network_stats_diff(int *entries) {