From: Jim Meyering Date: Sun, 30 Nov 1997 10:24:20 +0000 (+0000) Subject: (st_blocks): long -> off_t. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1cc4ba44c23782d32d4d2986b355e336f5e21335;p=pspp (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. --- diff --git a/lib/fileblocks.c b/lib/fileblocks.c index 7f696ab2f2..6a421cf51a 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) {