From f633782aa195bfffd88950f73135db26297bff2e Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Sun, 30 Nov 1997 10:24:20 +0000 Subject: [PATCH] (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. --- lib/fileblocks.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/fileblocks.c b/lib/fileblocks.c index 7f696ab2f..6a421cf51 100644 --- a/lib/fileblocks.c +++ b/lib/fileblocks.c @@ -21,7 +21,7 @@ # include #endif -#if !defined (HAVE_ST_BLOCKS) && !defined(_POSIX_VERSION) +#if !HAVE_ST_BLOCKS && !defined _POSIX_SOURCE && defined BSIZE # include # include @@ -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) {