> Do we expect that largefile support should work in Python 2.1.2? I'm > okay that autoconf detection fails as long as the instructions in the > posix module work: > > http://www.python.org/doc/current/lib/posix-large-files.html I don't think we can get autoconf detection to work on 2.1. The instructions are right. Unfortunately, the code is wrong: It prefers fgetpos in 2.1, but that returns not an integral type on some systems. I think the best approach is to copy the body of _portable_fseek and _portable_ftell from 2.2. With that, I get a setup that atleast looks right (patch attached) > I've had some failures on 2.4.7 kernels w/ ext3 filesystems. Were these compilation failures, or runtime failures? For the compilation failures, ext3 should be irrelevant, and 2.4.7 should be irrelevant as well - the glibc version would matter (which defines fpos_t to be a struct with an mbstate_t inside). Regards, Martin Index: fileobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/fileobject.c,v retrieving revision 2.110 diff -u -r2.110 fileobject.c --- fileobject.c 2001/04/14 17:49:40 2.110 +++ fileobject.c 2002/01/04 10:31:39 @@ -225,20 +225,28 @@ static int _portable_fseek(FILE *fp, Py_off_t offset, int whence) { -#if defined(HAVE_FSEEKO) +#if !defined(HAVE_LARGEFILE_SUPPORT) + return fseek(fp, offset, whence); +#elif defined(HAVE_FSEEKO) && SIZEOF_OFF_T >= 8 return fseeko(fp, offset, whence); #elif defined(HAVE_FSEEK64) return fseek64(fp, offset, whence); #elif defined(__BEOS__) return _fseek(fp, offset, whence); -#elif defined(HAVE_LARGEFILE_SUPPORT) && SIZEOF_FPOS_T >= 8 +#elif SIZEOF_FPOS_T >= 8 /* lacking a 64-bit capable fseek(), use a 64-bit capable fsetpos() and fgetpos() to implement fseek()*/ fpos_t pos; switch (whence) { case SEEK_END: +#ifdef MS_WINDOWS + fflush(fp); + if (_lseeki64(fileno(fp), 0, 2) == -1) + return -1; +#else if (fseek(fp, 0, SEEK_END) != 0) return -1; +#endif /* fall through */ case SEEK_CUR: if (fgetpos(fp, &pos) != 0) @@ -249,7 +257,7 @@ } return fsetpos(fp, &offset); #else - return fseek(fp, offset, whence); +#error "Large file support, but no way to fseek." #endif } @@ -260,17 +268,19 @@ static Py_off_t _portable_ftell(FILE* fp) { -#if SIZEOF_FPOS_T >= 8 && defined(HAVE_LARGEFILE_SUPPORT) +#if !defined(HAVE_LARGEFILE_SUPPORT) + return ftell(fp); +#elif defined(HAVE_FTELLO) && SIZEOF_OFF_T >= 8 + return ftello(fp); +#elif defined(HAVE_FTELL64) + return ftell64(fp); +#elif SIZEOF_FPOS_T >= 8 fpos_t pos; if (fgetpos(fp, &pos) != 0) return -1; return pos; -#elif defined(HAVE_FTELLO) && defined(HAVE_LARGEFILE_SUPPORT) - return ftello(fp); -#elif defined(HAVE_FTELL64) && defined(HAVE_LARGEFILE_SUPPORT) - return ftell64(fp); #else - return ftell(fp); +#error "Large file support, but no way to ftell." #endif }
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4