INN commit: trunk/contrib (expirectl.c)

INN Commit rra at isc.org
Sun Sep 21 12:24:38 UTC 2014


    Date: Sunday, September 21, 2014 @ 05:24:38
  Author: iulius
Revision: 9704

Fix build of contrib/expirectl.c

Add correct include header files, and fix a few warnings in printf() calls.

Add portability code for statfs/statvfs support.

Modified:
  trunk/contrib/expirectl.c

-------------+
 expirectl.c |   72 ++++++++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 55 insertions(+), 17 deletions(-)

Modified: expirectl.c
===================================================================
--- expirectl.c	2014-09-21 12:22:33 UTC (rev 9703)
+++ expirectl.c	2014-09-21 12:24:38 UTC (rev 9704)
@@ -31,14 +31,52 @@
  *     will not really exercise the program for another 14 days or so :-).
  */
 
-
-#include <sys/types.h>
-#include <sys/mount.h>
+#include "config.h"
+#include "clibrary.h"
 #include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include <time.h>
 
+/* Following portability code lifted from inndf.c */
+#if HAVE_STATVFS
+# include <sys/statvfs.h>
+# define df_stat(p, s)  (statvfs((p), (s)) == 0)
+# define df_declare(s)  struct statvfs s
+# define df_total(s)    ((s).f_blocks)
+# define df_avail(s)    ((s).f_bavail)
+# define df_scale(s)    ((s).f_frsize == 0 ? (s).f_bsize : (s).f_frsize)
+# define df_files(s)    ((s).f_files)
+# define df_favail(s)   ((s).f_favail)
+#elif HAVE_STATFS
+# if HAVE_SYS_VFS_H
+#  include <sys/vfs.h>
+# endif
+# if HAVE_SYS_PARAM_H
+#  include <sys/param.h>
+# endif
+# if HAVE_SYS_MOUNT_H
+#  include <sys/mount.h>
+# endif
+# ifdef __ultrix__
+#  define df_stat(p, s) (statfs((p), (s)) >= 1)
+#  define df_declare(s) struct fs_data s
+#  define df_total(s)   ((s).fd_btot)
+#  define df_avail(s)   ((s).fd_bfreen)
+#  define df_scale(s)   1024
+#  define df_files(s)   ((s).fd_gtot)
+#  define df_favail(s)  ((s).fd_gfree)
+# else
+#  define df_stat(p, s) (statfs((p), (s)) == 0)
+#  define df_declare(s) struct statfs s
+#  define df_total(s)   ((s).f_blocks)
+#  define df_avail(s)   ((s).f_bavail)
+#  define df_scale(s)   ((s).f_bsize)
+#  define df_files(s)   ((s).f_files)
+#  define df_favail(s)  ((s).f_ffree)
+# endif
+#else
+# error "Platform not supported.  Neither statvfs nor statfs available."
+#endif
+
 #define EXPIRE_CTL_DIR	"/home/news"
 #define NEWS_SPOOL	"/home/news/spool/news/."
 
@@ -49,7 +87,7 @@
 int
 main(int ac, char **av)
 {
-    struct statfs sfs;
+    df_declare(sfs);
     long minFree = 100 * 1024 * 1024;
     long minIFree = 20 * 1024;
     long expireDays = 2;
@@ -104,7 +142,7 @@
 	}
     }
 
-    if (statfs("/home/news/spool/news/.", &sfs) != 0) {
+    if (!df_stat("/home/news/spool/news/.", &sfs)) {
 	fprintf(stderr, "expirectl: couldn't fsstat /home/news/spool/news/.\n");
 	exit(1);
     }
@@ -139,8 +177,8 @@
 
     if (verbose) {
 	printf("spool: %4.2lfM / %3.2lfKinode free\n",
-	    (double)sfs.f_fsize * (double)sfs.f_bavail / (1024.0 * 1024.0),
-	    (double)sfs.f_ffree / 1024.0
+	    (double)df_scale(sfs) * (double)df_avail(sfs) / (1024.0 * 1024.0),
+	    (double)df_favail(sfs) / 1024.0
 	);
 	printf("decrs: %4.2lfM / %3.2lfKinode\n",
 	    (double)(minFree) / (double)(1024*1024),
@@ -160,8 +198,8 @@
 	double bytes;
 	long inodes;
 
-	bytes = (double)sfs.f_fsize * (double)sfs.f_bavail;
-	inodes = sfs.f_ffree;
+	bytes = (double)df_scale(sfs) * (double)df_avail(sfs);
+	inodes = df_favail(sfs);
 
 	if (bytes < (double)minFree || inodes < minIFree) {
 	    if (--expireDays <= 0) {
@@ -170,7 +208,7 @@
 	    }
 	    if (modified >= 0)
 		modified = 1;
-	    printf("decrement expiration to %d days\n", expireDays);
+	    printf("decrement expiration to %ld days\n", expireDays);
 	} else if (bytes >= (double)minFree * 2.0 && inodes >= minIFree * 2) {
 	    long dt = (long)(time(NULL) - expireIncTime);
 
@@ -179,12 +217,12 @@
 		expireIncTime = time(NULL);
 		if (modified >= 0)
 		    modified = 1;
-		printf("increment expiration to %d days\n", expireDays);
+		printf("increment expiration to %ld days\n", expireDays);
 	    } else {
 		printf("will increment expiration later\n");
 	    }
 	} else if (verbose) {
-	    printf("expiration unchanged: %d\n", expireDays);
+	    printf("expiration unchanged: %ld\n", expireDays);
 	}
     }
 
@@ -223,7 +261,7 @@
 				v = 1;
 			    if (v < m)
 				v = m;
-			    sprintf(dptr, "%d", v);
+			    sprintf(dptr, "%ld", v);
 			    dptr += strlen(dptr);
 			    ++sptr;
 			}
@@ -254,7 +292,7 @@
 
 	if ((fo = fopen(EXPIRE_DAYS, "w")) != NULL) {
 	    fprintf(fo, "time 0x%08lx\n", expireIncTime);
-	    fprintf(fo, "days %d\n", expireDays);
+	    fprintf(fo, "days %ld\n", expireDays);
 	    fclose(fo);
 	} else {
 	    fprintf(stderr, "unable to create %s\n", EXPIRE_DAYS);



More information about the inn-committers mailing list