Skip site navigation (1)Skip section navigation (2)
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-stable" 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>