changeset 1134:b2ed35578119

(st_blocks): long -> off_t. Avoid arithmetic overflow when size is near max. Depend on _POSIX_SOURCE and BSIZE, not _POSIX_VERSION, for compatibility with system.h. (BSIZE): Remove definition, since if BSIZE is not defined we're never invoked.
author Jim Meyering <jim@meyering.net>
date Sun, 30 Nov 1997 10:24:20 +0000
parents 22b88cd9178f
children 5306f6a320de
files lib/fileblocks.c
diffstat 1 files changed, 6 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/lib/fileblocks.c
+++ b/lib/fileblocks.c
@@ -21,7 +21,7 @@
 # include <config.h>
 #endif
 
-#if !defined (HAVE_ST_BLOCKS) && !defined(_POSIX_VERSION)
+#if !HAVE_ST_BLOCKS && !defined _POSIX_SOURCE && defined BSIZE
 # include <sys/types.h>
 # include <sys/param.h>
 
@@ -30,12 +30,7 @@
 # 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
-#  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))
 # endif /* !NINDIR */
@@ -45,12 +40,12 @@
 
 /* Return the number of 512-byte blocks in a file of SIZE bytes. */
 
-long
+off_t
 st_blocks (size)
-     long size;
+     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)
     {