Subject: Bug#4070: snmpd: hrStorageSize fix

From: Patrick Weemeeuw <[email-masked]>
Date: Wed, 7 Aug 1996 16:38:36 +0200

Package: snmp
Version: 2.1.2l4-1

The following patch fixes the problem of integer wrap around that
occurs for >=2Gb disks (i.e. sbuf.f_blocks * sbuf.f_bsize > 2^31).
This is accomplished by computing the intermediate values in floating
point.

Patrick.
----------------------------------------------------------------------
--- snmp-2.1.2l4/agent/snmp_vars.c      Sun Aug 20 23:02:21 1995
+++ snmp-2.1.2l4.patched/agent/snmp_vars.c      Wed Aug  7 13:17:24 1996
@@ -3514,11 +3525,11 @@
            break;
          case HRSTORAGESIZE:
            long_return = idx < 2 ? hr_getstor (idx, HRSTORAGESIZE, 1024) :
-               (sbuf.f_blocks * sbuf.f_bsize) / 1024;
+             (long)(((float)sbuf.f_blocks * (float)sbuf.f_bsize) / 1024.0 + 0.5
);
            break;
          case HRSTORAGEUSED:
            long_return = idx < 2 ? hr_getstor (idx, HRSTORAGEUSED, 1024) :
-                     ((sbuf.f_blocks-sbuf.f_bfree) * sbuf.f_bsize) / 1024;
+             (long)(((float)(sbuf.f_blocks-sbuf.f_bfree) * sbuf.f_bsize) / 1024
.0 + 0.5);
            break;
          case HRSTORAGEALLOCFAILURES:
            long_return = 0;                    /* XXX: dummy */