R. David Murray writes:
So it looks to my uneducated eye like file.tell() is broken. The actual on-disk size of the file, by the way, is indeed 2147718485, so it looks like somebody's not using the right size data structure somewhere.
Look at Objects/fileobject.c, at the implementation for tell(). (The Python source code is nicely organized; don't be afraid to dive into it.) #if defined(HAVE_FTELLO) && defined(HAVE_LARGEFILE_SUPPORT) offset = ftello(f->f_fp); #elif defined(HAVE_FTELL64) && defined(HAVE_LARGEFILE_SUPPORT) offset = ftell64(f->f_fp); #else offset = ftell(f->f_fp); #endif So, presumably neither HAVE_FTELLO nor HAVE_FTELL64 are defined, so it uses the old ftell(). What's the right system call for FreeBSD? Looking at the man pages for 4.0 at freebsd.org, it's ftello(). So, is HAVE_FTELLO defined? If it isn't, then find out why; if it is, then there's some other bug in Python's tell() code. -- A.M. Kuchling http://starship.python.net/crew/amk/
From gotos to the evolution of life in 10 posts; that's comp.lang.python for you! -- A.M. Kuchling, 4 Apr 1998