From: Brett Gordon Date: Thu, 15 Sep 2016 13:50:53 +0000 (-0400) Subject: net_native: udata.u_count will be mangled by ringbop() X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=a0b6c013100b538eaf88bd377d430aff5efd028b;p=FUZIX.git net_native: udata.u_count will be mangled by ringbop() --- diff --git a/Kernel/dev/net/net_native.c b/Kernel/dev/net/net_native.c index 8a175bd4..067ebea1 100644 --- a/Kernel/dev/net/net_native.c +++ b/Kernel/dev/net/net_native.c @@ -543,6 +543,7 @@ arg_t net_read(struct socket *s, uint8_t flag) arg_t net_write(struct socket * s, uint8_t flag) { uint16_t n = 0, t = 0; + uint16_t l = udata.u_count; struct sockdata *sd = s->s_priv; if (sd->err) { @@ -551,7 +552,8 @@ arg_t net_write(struct socket * s, uint8_t flag) return -1; } - while (t < udata.u_count) { + while (t < l) { + udata.u_count = l - t; if (s->s_state == SS_CLOSED || (s->s_iflag & SI_SHUTW)) { udata.u_error = EPIPE; ssig(udata.u_ptab, SIGPIPE); @@ -563,7 +565,7 @@ arg_t net_write(struct socket * s, uint8_t flag) n = netn_queuebytes(s); /* FIXME: buffer the error in this case */ if (n == 0xFFFFU) - return udata.u_count ? (arg_t)udata.u_count : -1; + return l ? (arg_t)l : -1; t += n; @@ -572,7 +574,7 @@ arg_t net_write(struct socket * s, uint8_t flag) return -1; } } - return udata.u_count; + return l; } arg_t net_shutdown(struct socket *s, uint8_t flag)