
At 11:25 AM 2/1/2004, Momchil Velikov wrote:
Beman> Hum... Perhaps mistakenly, I assumed stat() was a macro that expanded Beman> to call stat64() if _FILE_OFFSET_BITS=64 was defined.
Indeed, probably is is "redirected" in some way to the appropriate syscall/function name. E.g. glibc on GNU/Linux can do something like:
a) #define stat stat64, or
b) extern int stat (struct stat *) asm ("stat64"), or
c) extern int stat (struct stat *) __attribute__ ((weak, alias("stat64")));
And of course there is always (d) "compiler magic" :-)
Beman> Put another way, Beman> is a program linking these two files OK?
Beman> file_a.cpp Beman> #define _FILE_OFFSET_BITS=64 Beman> #include <sty/stat.h> Beman> long long func_a() Beman> { Beman> struct stat s; Beman> if ( stat( "foo", &s ) != 0 ) { throw ... } Beman> return s.st_size; Beman> }
Beman> file_b.cpp Beman> #include <sty/stat.h> Beman> long func_b() Beman> { Beman> struct stat s; Beman> if ( stat( "bar", &s ) != 0 ) { throw ... } Beman> return s.st_size; Beman> }
Yes, this is probably ok. The problem is if parts of the program attempt to communicate ``struct stat'' values.
OK, thanks for the clarification. I'll be careful not to do that. A trial implementation should be in CVS in few days - that will allow months of testing before the next release. --Beman