mirror of
https://github.com/coreutils/coreutils.git
synced 2024-12-03 15:03:30 +08:00
(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.
This commit is contained in:
parent
ce43e130bb
commit
f633782aa1
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user