[Python-Dev] release for 2.1.2, plus 2.2.1... (original) (raw)
Martin v. Loewis martin@v.loewis.de
Fri, 4 Jan 2002 11:38:28 +0100
- Previous message: [Python-Dev] release for 2.1.2, plus 2.2.1...
- Next message: [Python-Dev] release for 2.1.2, plus 2.2.1...
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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 }
- Previous message: [Python-Dev] release for 2.1.2, plus 2.2.1...
- Next message: [Python-Dev] release for 2.1.2, plus 2.2.1...
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]