--- ucd-snmp-4.2.6/agent/mibgroup/ucd-snmp/disk.c	Tue Apr  2 17:57:57 2002
+++ v42-patches/agent/mibgroup/ucd-snmp/disk.c	Fri Jun  4 01:58:58 2004
@@ -340,9 +346,6 @@
   double totalblks, free, used, avail, availblks;
 #else
   static long avail;
-#ifdef STRUCT_STATVFS_HAS_F_FILES
-  int percent_inode;
-#endif
 #endif
   static long long_ret;
   static char errmsg[300];
@@ -419,11 +422,6 @@
   iserror = (disks[disknum].minimumspace >= 0 ?
              avail < disks[disknum].minimumspace :
              100-percent <= disks[disknum].minpercent) ? 1 : 0;
-#ifdef STRUCT_STATVFS_HAS_F_FILES
-  percent_inode = vfs.f_favail <= 0 ? 100 :
-    (int) ((double) (vfs.f_files - vfs.f_ffree) /
-           (double) (vfs.f_files - (vfs.f_ffree - vfs.f_favail)) * 100.0 + 0.5);
-#endif
   switch (vp->magic) {
     case DISKTOTAL:
       long_ret = vfs.f_blocks * (vfs.f_bsize / 1024);
@@ -444,9 +442,20 @@
     case DISKPERCENT:
       long_ret = percent;
       return ((u_char *) (&long_ret));
-#ifdef STRUCT_STATVFS_HAS_F_FILES
+#if defined(STRUCT_STATVFS_HAS_F_FILES) || defined(STRUCT_STATFS_HAS_F_FILES)
     case DISKPERCENTNODE:
-      long_ret = percent_inode;
+      long_ret = 100;
+#if defined(STRUCT_STATFS_HAS_F_AVAIL)
+      if (vfs.f_favail > 0 )
+          long_ret = (long) ((double) (vfs.f_files - vfs.f_ffree) /
+           (double) (vfs.f_files - (vfs.f_ffree - vfs.f_favail)) * 100.0 + 0.5);
+#else
+#if defined(STRUCT_STATFS_HAS_F_FREE)
+      if (vfs.f_ffiles > 0)
+          long_ret = (long) ((double) (vfs.f_files - vfs.f_ffree) /
+           (double) (vfs.f_files) * 100.0 + 0.5);
+#endif
+#endif
       return ((u_char *) (&long_ret));
 #endif
     case ERRORFLAG:
