Jack Jansen wrote: > > On 23-feb-04, at 18:15, Jean-François Piéronne wrote: > >> Hi all, >> >> I am one of the maintainer of Python on OpenVMS. >> >> Building from time to time Python 2.4 from CVS snapshot, I have just >> noticed that all the conditional compilation against >> WITH_UNIVERSAL_NEWLINES has been removed. >> >> This is a major problem on OpenVMS. > > > Ah, I was afraid this was going to happen when I saw the checkin message > about getting rid of the universal newlines conditional. > > The easiest solution (apart from putting WITH_UNIVERSAL_NEWLINES back > in) is to just leave all the universal newlines machinery in place, but > disable it. So, where the old situation was that there were ifdefs all > over the place the new situation would be that all the code always goes > through Py_UniversalNewlineFgets() and Py_UniversalNewlineFread(), but > on systems with record-based I/O these just call fgets() and fread(). > Then there's only one more ifdef to go: in open_the_file() don't set the > mode to "rb" but just plain "r". > > I assume that sockets and other places where WITH_UNIVERSAL_NEWLINES may > have been referred to aren't going to be a problem for you because > those aren't applicable to VMS anyway, right? > -- > Jack Jansen, <Jack.Jansen at cwi.nl>, http://www.cwi.nl/~jack > If I can't dance I don't want to be part of your revolution -- Emma Goldman > thanks for your help, Before I submit a patch, I have done the following update which seem to fix the problem, any comment are welcome. patch for include/fileobject.h @@ -54,3 +54,7 @@ */ +#ifdef __VMS +#define PY_STDIOTEXTMODE "" +#else #define PY_STDIOTEXTMODE "b" +#endif char *Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *); patch for objects/fileobject.c @@ -119,3 +124,7 @@ f->f_buf = NULL; +#ifdef __VMS + f->f_univ_newline = 0; +#else f->f_univ_newline = (strchr(mode, 'U') != NULL); +#endif f->f_newlinetypes = NEWLINE_UNKNOWN; @@ -164,3 +173,11 @@ if (strcmp(mode, "U") == 0 || strcmp(mode, "rU") == 0) +#ifdef __VMS + /* Compatibility: specifying U in a Python without universal + ** newlines is allowed, and the file is opened as a normal text + ** file. + */ + mode = "r"; +#else mode = "rb"; +#endif #ifdef MS_WINDOWS patch for modules/bz2modules.c @@ -1293,3 +1293,7 @@ case 'U': +#ifdef __VMS + self->f_univ_newline = 0; +#else self->f_univ_newline = 1; +#endif break; Cheers, Jean-François
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