(read_utmp): Use the new definitions.
[gnulib.git] / lib / fileblocks.c
index 7f696ab..1a44516 100644 (file)
@@ -1,5 +1,5 @@
 /* Convert file size to number of blocks on System V-like machines.
-   Copyright (C) 1990, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1990, 1997, 1998 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
 /* Written by Brian L. Matthews, blm@6sceng.UUCP. */
 \f
-#ifdef HAVE_CONFIG_H
+#if HAVE_CONFIG_H
 # include <config.h>
 #endif
 
-#if !defined (HAVE_ST_BLOCKS) && !defined(_POSIX_VERSION)
-# include <sys/types.h>
+#include <sys/types.h>
+
+#if HAVE_SYS_PARAM_H
 # include <sys/param.h>
+#endif
+
+#if !HAVE_ST_BLOCKS && !defined _POSIX_SOURCE && defined BSIZE
 
 # if HAVE_UNISTD_H
 #  include <unistd.h>
 # endif
 
 # ifndef NINDIR
-/* Some SysV's, like Irix, seem to lack these.  Hope they're correct. */
-/* Size of a indirect block, in bytes. */
-#  ifndef BSIZE
-#   define BSIZE 1024
+
+#  if defined (__DJGPP__)
+typedef long daddr_t; /* for disk address */
 #  endif
 
+/* Some SysV's, like Irix, seem to lack this.  Hope it's correct. */
 /* Number of inode pointers per indirect block. */
-#  define NINDIR (BSIZE/sizeof(daddr_t))
+#  define NINDIR (BSIZE / sizeof (daddr_t))
 # endif /* !NINDIR */
 
 /* Number of direct block addresses in an inode. */
 
 /* Return the number of 512-byte blocks in a file of SIZE bytes. */
 
-long
-st_blocks (size)
-     long size;
+off_t
+st_blocks (off_t size)
 {
-  long datablks = (size + 512 - 1) / 512;
-  long indrblks = 0;
+  off_t datablks = size / 512 + (size % 512 != 0);
+  off_t indrblks = 0;
 
   if (datablks > NDIR)
     {