From 6638ed3941de88f837ab4c78d00f5cfa4fbe0c86 Mon Sep 17 00:00:00 2001 From: midipix Date: Jun 27 2020 10:05:28 +0000 Subject: internals: toks_write(), toks_dprintf(): properly handle positive status codes. --- diff --git a/src/internal/toksvc_dprintf_impl.c b/src/internal/toksvc_dprintf_impl.c index f74ef35..b5833ef 100644 --- a/src/internal/toksvc_dprintf_impl.c +++ b/src/internal/toksvc_dprintf_impl.c @@ -51,7 +51,7 @@ int toks_dprintf(int fd, const char * fmt, ...) for (; cnt && ret>=0; ) { ret = toks_write(fd,ch,cnt); - while ((ret == NT_STATUS_ALERTED) || (ret == NT_STATUS_USER_APC)) + while ((ret == -NT_STATUS_ALERTED) || (ret == -NT_STATUS_USER_APC)) ret = toks_write(fd,ch,cnt); ch += ret; diff --git a/src/internal/toksvc_ntaio_impl.c b/src/internal/toksvc_ntaio_impl.c index b515494..ca9dc0f 100644 --- a/src/internal/toksvc_ntaio_impl.c +++ b/src/internal/toksvc_ntaio_impl.c @@ -103,6 +103,8 @@ int toks_write(int fd, const void * buf, size_t size) return status; /* iowrite */ + iosb.status = NT_STATUS_PENDING; + status = iofn( hio,hevent, 0,0,&iosb, @@ -110,20 +112,21 @@ int toks_write(int fd, const void * buf, size_t size) 0,0); /* wait */ - switch (status) { - case NT_STATUS_PENDING: - status = toks_ntapi->zw_wait_for_single_object( - hevent,0,0); - break; - - default: - iosb.status = status; - break; - } + if (status == NT_STATUS_PENDING) + toks_ntapi->zw_wait_for_single_object( + hevent,0,0); /* hevent */ toks_ntapi->zw_close(hevent); /* ret */ - return iosb.status ? iosb.status : iosb.info; + switch (iosb.status) { + case NT_STATUS_SUCCESS: + return iosb.info; + + default: + return (iosb.status < 0) + ? iosb.status + : -iosb.status; + } }