From 779941095064efa0be8eca339f866311e19d9c0d Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Sun, 18 Oct 2015 15:37:19 +0300
Subject: [PATCH] py/stream: Allow to reuse is_nonblocking_error().

---
 py/stream.c | 20 ++++++--------------
 py/stream.h |  8 ++++++++
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/py/stream.c b/py/stream.c
index ba672ce2c..6be2c4f3e 100644
--- a/py/stream.c
+++ b/py/stream.c
@@ -47,14 +47,6 @@
 
 STATIC mp_obj_t stream_readall(mp_obj_t self_in);
 
-#if MICROPY_STREAMS_NON_BLOCK
-// TODO: This is POSIX-specific (but then POSIX is the only real thing,
-// and anything else just emulates it, right?)
-#define is_nonblocking_error(errno) ((errno) == EAGAIN || (errno) == EWOULDBLOCK)
-#else
-#define is_nonblocking_error(errno) (0)
-#endif
-
 #define STREAM_CONTENT_TYPE(stream) (((stream)->is_text) ? &mp_type_str : &mp_type_bytes)
 
 STATIC mp_obj_t stream_read(mp_uint_t n_args, const mp_obj_t *args) {
@@ -96,7 +88,7 @@ STATIC mp_obj_t stream_read(mp_uint_t n_args, const mp_obj_t *args) {
             mp_uint_t out_sz = o->type->stream_p->read(o, p, more_bytes, &error);
             if (out_sz == MP_STREAM_ERROR) {
                 vstr_cut_tail_bytes(&vstr, more_bytes);
-                if (is_nonblocking_error(error)) {
+                if (mp_is_nonblocking_error(error)) {
                     // With non-blocking streams, we read as much as we can.
                     // If we read nothing, return None, just like read().
                     // Otherwise, return data read so far.
@@ -167,7 +159,7 @@ STATIC mp_obj_t stream_read(mp_uint_t n_args, const mp_obj_t *args) {
     mp_uint_t out_sz = o->type->stream_p->read(o, vstr.buf, sz, &error);
     if (out_sz == MP_STREAM_ERROR) {
         vstr_clear(&vstr);
-        if (is_nonblocking_error(error)) {
+        if (mp_is_nonblocking_error(error)) {
             // https://docs.python.org/3.4/library/io.html#io.RawIOBase.read
             // "If the object is in non-blocking mode and no bytes are available,
             // None is returned."
@@ -192,7 +184,7 @@ mp_obj_t mp_stream_write(mp_obj_t self_in, const void *buf, mp_uint_t len) {
     int error;
     mp_uint_t out_sz = o->type->stream_p->write(self_in, buf, len, &error);
     if (out_sz == MP_STREAM_ERROR) {
-        if (is_nonblocking_error(error)) {
+        if (mp_is_nonblocking_error(error)) {
             // http://docs.python.org/3/library/io.html#io.RawIOBase.write
             // "None is returned if the raw stream is set not to block and
             // no single byte could be readily written to it."
@@ -235,7 +227,7 @@ STATIC mp_obj_t stream_readinto(mp_uint_t n_args, const mp_obj_t *args) {
     int error;
     mp_uint_t out_sz = o->type->stream_p->read(o, bufinfo.buf, len, &error);
     if (out_sz == MP_STREAM_ERROR) {
-        if (is_nonblocking_error(error)) {
+        if (mp_is_nonblocking_error(error)) {
             return mp_const_none;
         }
         nlr_raise(mp_obj_new_exception_arg1(&mp_type_OSError, MP_OBJ_NEW_SMALL_INT(error)));
@@ -260,7 +252,7 @@ STATIC mp_obj_t stream_readall(mp_obj_t self_in) {
         int error;
         mp_uint_t out_sz = o->type->stream_p->read(self_in, p, current_read, &error);
         if (out_sz == MP_STREAM_ERROR) {
-            if (is_nonblocking_error(error)) {
+            if (mp_is_nonblocking_error(error)) {
                 // With non-blocking streams, we read as much as we can.
                 // If we read nothing, return None, just like read().
                 // Otherwise, return data read so far.
@@ -321,7 +313,7 @@ STATIC mp_obj_t stream_unbuffered_readline(mp_uint_t n_args, const mp_obj_t *arg
         int error;
         mp_uint_t out_sz = o->type->stream_p->read(o, p, 1, &error);
         if (out_sz == MP_STREAM_ERROR) {
-            if (is_nonblocking_error(error)) {
+            if (mp_is_nonblocking_error(error)) {
                 if (vstr.len == 1) {
                     // We just incremented it, but otherwise we read nothing
                     // and immediately got EAGAIN. This is case is not well
diff --git a/py/stream.h b/py/stream.h
index f9ba3387a..5eace916f 100644
--- a/py/stream.h
+++ b/py/stream.h
@@ -42,4 +42,12 @@ mp_obj_t mp_stream_unbuffered_iter(mp_obj_t self);
 
 mp_obj_t mp_stream_write(mp_obj_t self_in, const void *buf, mp_uint_t len);
 
+#if MICROPY_STREAMS_NON_BLOCK
+// TODO: This is POSIX-specific (but then POSIX is the only real thing,
+// and anything else just emulates it, right?)
+#define mp_is_nonblocking_error(errno) ((errno) == EAGAIN || (errno) == EWOULDBLOCK)
+#else
+#define mp_is_nonblocking_error(errno) (0)
+#endif
+
 #endif // __MICROPY_INCLUDED_PY_STREAM_H__
-- 
GitLab