Index: Modules/bz2module.c =================================================================== --- Modules/bz2module.c (revision 57479) +++ Modules/bz2module.c (working copy) @@ -249,24 +249,20 @@ for (;;) { Py_BEGIN_ALLOW_THREADS - if (univ_newline) { - while (1) { - BZ2_bzRead(&bzerror, f->fp, &c, 1); - f->pos++; - if (bzerror != BZ_OK || buf == end) - break; + while (buf != end) { + BZ2_bzRead(&bzerror, f->fp, &c, 1); + if (bzerror != BZ_OK) break; + f->pos++; + if (univ_newline) { if (skipnextlf) { skipnextlf = 0; if (c == '\n') { - /* Seeing a \n here with - * skipnextlf true means we + /* Seeing a \n here with skipnextlf true means we * saw a \r before. */ newlinetypes |= NEWLINE_CRLF; - BZ2_bzRead(&bzerror, f->fp, - &c, 1); - if (bzerror != BZ_OK) - break; + BZ2_bzRead(&bzerror, f->fp, &c, 1); + if (bzerror != BZ_OK) break; } else { newlinetypes |= NEWLINE_CR; } @@ -276,17 +272,12 @@ c = '\n'; } else if ( c == '\n') newlinetypes |= NEWLINE_LF; - *buf++ = c; - if (c == '\n') break; } - if (bzerror == BZ_STREAM_END && skipnextlf) - newlinetypes |= NEWLINE_CR; - } else /* If not universal newlines use the normal loop */ - do { - BZ2_bzRead(&bzerror, f->fp, &c, 1); - f->pos++; - *buf++ = c; - } while (bzerror == BZ_OK && c != '\n' && buf != end); + *buf++ = c; + if (c == '\n') break; + } + if (univ_newline && bzerror == BZ_STREAM_END && skipnextlf) + newlinetypes |= NEWLINE_CR; Py_END_ALLOW_THREADS f->f_newlinetypes = newlinetypes; f->f_skipnextlf = skipnextlf;