summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_io/fileio.c2
-rw-r--r--Modules/_io/iobase.c8
-rw-r--r--Modules/_testembed.c6
-rw-r--r--Modules/cjkcodecs/multibytecodec.c8
4 files changed, 20 insertions, 4 deletions
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c
index 1aa5ee9..141b6de 100644
--- a/Modules/_io/fileio.c
+++ b/Modules/_io/fileio.c
@@ -583,6 +583,8 @@ fileio_readall(fileio *self)
Py_ssize_t total = 0;
int n;
+ if (self->fd < 0)
+ return err_closed();
if (!_PyVerify_fd(self->fd))
return PyErr_SetFromErrno(PyExc_IOError);
diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c
index ec7a242..f06f562 100644
--- a/Modules/_io/iobase.c
+++ b/Modules/_io/iobase.c
@@ -815,6 +815,14 @@ rawiobase_readall(PyObject *self, PyObject *args)
Py_DECREF(chunks);
return NULL;
}
+ if (data == Py_None) {
+ if (PyList_GET_SIZE(chunks) == 0) {
+ Py_DECREF(chunks);
+ return data;
+ }
+ Py_DECREF(data);
+ break;
+ }
if (!PyBytes_Check(data)) {
Py_DECREF(chunks);
Py_DECREF(data);
diff --git a/Modules/_testembed.c b/Modules/_testembed.c
index 0df5ede..51b439f 100644
--- a/Modules/_testembed.c
+++ b/Modules/_testembed.c
@@ -17,7 +17,9 @@ void print_subinterp(void)
int main(int argc, char *argv[])
{
PyThreadState *mainstate, *substate;
+#ifdef WITH_THREAD
PyGILState_STATE gilstate;
+#endif
int i, j;
for (i=0; i<3; i++) {
@@ -28,10 +30,12 @@ int main(int argc, char *argv[])
Py_Initialize();
mainstate = PyThreadState_Get();
+#ifdef WITH_THREAD
PyEval_InitThreads();
PyEval_ReleaseThread(mainstate);
gilstate = PyGILState_Ensure();
+#endif
print_subinterp();
PyThreadState_Swap(NULL);
@@ -43,7 +47,9 @@ int main(int argc, char *argv[])
PyThreadState_Swap(mainstate);
print_subinterp();
+#ifdef WITH_THREAD
PyGILState_Release(gilstate);
+#endif
PyEval_RestoreThread(mainstate);
Py_Finalize();
diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c
index af7ea5b..7b04f020 100644
--- a/Modules/cjkcodecs/multibytecodec.c
+++ b/Modules/cjkcodecs/multibytecodec.c
@@ -479,7 +479,7 @@ multibytecodec_encode(MultibyteCodec *codec,
MultibyteEncodeBuffer buf;
Py_ssize_t finalsize, r = 0;
- if (datalen == 0)
+ if (datalen == 0 && !(flags & MBENC_RESET))
return PyBytes_FromStringAndSize(NULL, 0);
buf.excobj = NULL;
@@ -514,7 +514,7 @@ multibytecodec_encode(MultibyteCodec *codec,
break;
}
- if (codec->encreset != NULL)
+ if (codec->encreset != NULL && (flags & MBENC_RESET))
for (;;) {
Py_ssize_t outleft;
@@ -784,8 +784,8 @@ encoder_encode_stateful(MultibyteStatefulEncoderContext *ctx,
inbuf_end = inbuf + datalen;
r = multibytecodec_encode(ctx->codec, &ctx->state,
- (const Py_UNICODE **)&inbuf,
- datalen, ctx->errors, final ? MBENC_FLUSH : 0);
+ (const Py_UNICODE **)&inbuf, datalen,
+ ctx->errors, final ? MBENC_FLUSH | MBENC_RESET : 0);
if (r == NULL) {
/* recover the original pending buffer */
if (origpending > 0)