Hi,
I don't know how important it is. I have a damanged partition under
Linux. There are some wild files under /lost+found. All of them are
device files with strange values in st_size and st_blocks. As the
result, du gives some wild numbers on them, something like "216T".
Here is a klude I use. I am not very sure if it is 100% correct.
Thanks.
H.J.
----
--- fileutils-4.0m/src/system.h.stat Thu Jan 27 09:26:01 2000
+++ fileutils-4.0m/src/system.h Thu Jan 27 10:02:16 2000
@@ -193,9 +193,15 @@ extern int errno;
#ifndef HAVE_STRUCT_STAT_ST_BLOCKS
# define ST_BLKSIZE(statbuf) DEV_BSIZE
# if defined(_POSIX_SOURCE) || !defined(BSIZE) /* fileblocks.c uses BSIZE. */
-# define ST_NBLOCKS(statbuf) ((statbuf).st_size / ST_NBLOCKSIZE + ((statbuf).st_size
% ST_NBLOCKSIZE != 0))
+# define ST_NBLOCKS(statbuf) \
+ (S_ISREG ((statbuf).st_mode) \
+ || S_ISDIR ((statbuf).st_mode) \
+ ? (statbuf).st_size / ST_NBLOCKSIZE + ((statbuf).st_size % ST_NBLOCKSIZE != 0) : 0)
# else /* !_POSIX_SOURCE && BSIZE */
-# define ST_NBLOCKS(statbuf) (st_blocks ((statbuf).st_size))
+# define ST_NBLOCKS(statbuf) \
+ (S_ISREG ((statbuf).st_mode) \
+ || S_ISDIR ((statbuf).st_mode) \
+ ? st_blocks ((statbuf).st_size) : 0)
# endif /* !_POSIX_SOURCE && BSIZE */
#else /* HAVE_STRUCT_STAT_ST_BLOCKS */
/* Some systems, like Sequents, return st_blksize of 0 on pipes. */
@@ -211,14 +217,20 @@ extern int errno;
# define ST_NBLOCKSIZE (4 * 1024)
# else /* not AIX PS/2 */
# if defined(_CRAY)
-# define ST_NBLOCKS(statbuf) ((statbuf).st_blocks *
ST_BLKSIZE(statbuf)/ST_NBLOCKSIZE)
+# define ST_NBLOCKS(statbuf) \
+ (S_ISREG ((statbuf).st_mode) \
+ || S_ISDIR ((statbuf).st_mode) \
+ ? (statbuf).st_blocks * ST_BLKSIZE(statbuf)/ST_NBLOCKSIZE : 0)
# endif /* _CRAY */
# endif /* not AIX PS/2 */
# endif /* !hpux */
#endif /* HAVE_STRUCT_STAT_ST_BLOCKS */
#ifndef ST_NBLOCKS
-# define ST_NBLOCKS(statbuf) ((statbuf).st_blocks)
+# define ST_NBLOCKS(statbuf) \
+ (S_ISREG ((statbuf).st_mode) \
+ || S_ISDIR ((statbuf).st_mode) \
+ ? (statbuf).st_blocks : 0)
#endif
#ifndef ST_NBLOCKSIZE