Date: Tue, 23 Nov 1999 12:57:36 +0800 From: Peter Wemm <peter@netplex.com.au> To: Bjoern Fischer <bfischer@Techfak.Uni-Bielefeld.DE> Cc: freebsd-hackers@FreeBSD.ORG, freebsd-stable@FreeBSD.ORG Subject: Re: stat(2) weirdness Message-ID: <19991123045736.C76D71C6D@overcee.netplex.com.au> In-Reply-To: Message from Bjoern Fischer <bfischer@Techfak.Uni-Bielefeld.DE> of "Tue, 23 Nov 1999 05:20:09 %2B0100." <19991123051328.A292@frolic.no-support.loc>
next in thread | previous in thread | raw e-mail | index | archive | help
Bjoern Fischer wrote:
> Hello,
>
> recently while debugging a problem in wwwoffle-2.5b I realized,
> that stat(2) behaves at least extremely strange on 3.3-STABLE:
>
> This small example...
>
> #include <stdio.h>
> #include <sys/types.h>
> #include <sys/stat.h>
>
> int main(int argc, char *argv[]) {
>
> char *fname = argv[0];
> struct stat sb;
> int res = stat(argv[0], &sb);
>
> printf("filename : %s\n" \
> "st_size : %d\n" \
> "st_blocks : %d\n" \
> "st_blksize : %d\n",
> fname, sb.st_size, sb.st_blocks, sb.st_blksize);
>
> return res;
>
> }
>
> would emerge this when run:
>
> filename : ./a.out
> st_size : 3342
> st_blocks : 0
> st_blksize : 8
>
> Any idea why st_blocks is always zero? This can't be correct.
> st_blksize seems to be the number of blocks allocated for
> filename, although assuming a blocksize of 512 the object
> would fit into 7 blocks. Maybe that's the result of the
> underlying FFS's fsize (1024).
>
> Björn
>
> --
> -----BEGIN GEEK CODE BLOCK-----
> GCS d--(+) s++: a- C+++(-) UB++++OSI++++$ P+++(-) L---(++) !E W- N+ o>+
> K- !w !O !M !V PS++ PE- PGP++ t+++ !5 X++ tv- b+++ D++ G e+ h-- y+
> ------END GEEK CODE BLOCK------
>
>
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-hackers" in the body of the message
peter@overcee[12:55pm]/tmp-158> cc -Wall -o stat stat.c
stat.c: In function `main':
stat.c:15: warning: int format, different type arg (arg 3)
stat.c:15: warning: int format, different type arg (arg 4)
You are mixing int and 'long long' arg types.
If it's fixed, eg:
printf("filename : %s\n" \
"st_size : %lld\n" \
"st_blocks : %lld\n" \
"st_blksize : %d\n",
fname, sb.st_size, sb.st_blocks, sb.st_blksize);
Then:
peter@overcee[12:56pm]/tmp-162> cc -Wall -o xx xx.c
peter@overcee[12:56pm]/tmp-163> ./xx
filename : ./xx
st_size : 3522
st_blocks : 7
st_blksize : 4096
Cheers,
-Peter
--
Peter Wemm - peter@FreeBSD.org; peter@yahoo-inc.com; peter@netplex.com.au
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19991123045736.C76D71C6D>
