fixed a bug in skipping an incomplete sequence upon eof
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
2025-08-02 15:05:32 +09:00
parent 17b0dfcee3
commit 1d2e8f7f34

View File

@ -115,7 +115,7 @@ int hawk_tio_attachin (
if (hawk_tio_detachin(tio) <= -1) return -1; if (hawk_tio_detachin(tio) <= -1) return -1;
HAWK_ASSERT (tio->in.fun == HAWK_NULL); HAWK_ASSERT(tio->in.fun == HAWK_NULL);
xbufptr = bufptr; xbufptr = bufptr;
if (xbufptr == HAWK_NULL) if (xbufptr == HAWK_NULL)
@ -198,7 +198,7 @@ int hawk_tio_attachout (
if (hawk_tio_detachout(tio) == -1) return -1; if (hawk_tio_detachout(tio) == -1) return -1;
HAWK_ASSERT (tio->out.fun == HAWK_NULL); HAWK_ASSERT(tio->out.fun == HAWK_NULL);
xbufptr = bufptr; xbufptr = bufptr;
if (xbufptr == HAWK_NULL) if (xbufptr == HAWK_NULL)
@ -282,7 +282,7 @@ hawk_ooi_t hawk_tio_flush (hawk_tio_t* tio)
{ {
if (cur != tio->out.buf.ptr) if (cur != tio->out.buf.ptr)
{ {
HAWK_MEMCPY (tio->out.buf.ptr, cur, left); HAWK_MEMCPY(tio->out.buf.ptr, cur, left);
tio->outbuf_len = left; tio->outbuf_len = left;
} }
return -1; return -1;
@ -290,7 +290,7 @@ hawk_ooi_t hawk_tio_flush (hawk_tio_t* tio)
if (n == 0) if (n == 0)
{ {
if (cur != tio->out.buf.ptr) if (cur != tio->out.buf.ptr)
HAWK_MEMCPY (tio->out.buf.ptr, cur, left); HAWK_MEMCPY(tio->out.buf.ptr, cur, left);
break; break;
} }
@ -320,7 +320,7 @@ hawk_ooi_t hawk_tio_readbchars (hawk_tio_t* tio, hawk_bch_t* buf, hawk_oow_t siz
hawk_oow_t nread; hawk_oow_t nread;
hawk_ooi_t n; hawk_ooi_t n;
/*HAWK_ASSERT (tio->in.fun != HAWK_NULL);*/ /*HAWK_ASSERT(tio->in.fun != HAWK_NULL);*/
if (tio->in.fun == HAWK_NULL) if (tio->in.fun == HAWK_NULL)
{ {
/* no input function */ /* no input function */
@ -361,8 +361,7 @@ done:
return nread; return nread;
} }
static HAWK_INLINE hawk_ooi_t tio_read_uchars ( static HAWK_INLINE hawk_ooi_t tio_read_uchars (hawk_tio_t* tio, hawk_uch_t* buf, hawk_oow_t bufsize)
hawk_tio_t* tio, hawk_uch_t* buf, hawk_oow_t bufsize)
{ {
hawk_oow_t mlen, wlen; hawk_oow_t mlen, wlen;
hawk_ooi_t n; hawk_ooi_t n;
@ -389,6 +388,7 @@ static HAWK_INLINE hawk_ooi_t tio_read_uchars (
* but some incomplete bytes in the buffer. */ * but some incomplete bytes in the buffer. */
if (tio->flags & HAWK_TIO_IGNOREECERR) if (tio->flags & HAWK_TIO_IGNOREECERR)
{ {
wlen = 0;
goto ignore_illseq; goto ignore_illseq;
} }
else else
@ -421,9 +421,9 @@ static HAWK_INLINE hawk_ooi_t tio_read_uchars (
{ {
/* not even a single character was handled. /* not even a single character was handled.
* shift bytes in the buffer to the head. */ * shift bytes in the buffer to the head. */
HAWK_ASSERT (mlen <= 0); HAWK_ASSERT(mlen <= 0);
tio->inbuf_len = tio->inbuf_len - tio->inbuf_cur; tio->inbuf_len = tio->inbuf_len - tio->inbuf_cur;
HAWK_MEMCPY (&tio->in.buf.ptr[0], HAWK_MEMCPY(&tio->in.buf.ptr[0],
&tio->in.buf.ptr[tio->inbuf_cur], &tio->in.buf.ptr[tio->inbuf_cur],
tio->inbuf_len * HAWK_SIZEOF(tio->in.buf.ptr[0])); tio->inbuf_len * HAWK_SIZEOF(tio->in.buf.ptr[0]));
tio->inbuf_cur = 0; tio->inbuf_cur = 0;
@ -435,7 +435,7 @@ static HAWK_INLINE hawk_ooi_t tio_read_uchars (
else if (x == -2) else if (x == -2)
{ {
/* buffer not large enough */ /* buffer not large enough */
HAWK_ASSERT (wlen > 0); HAWK_ASSERT(wlen > 0);
/* the wide-character buffer is not just large enough to /* the wide-character buffer is not just large enough to
* hold the entire conversion result. lets's go on so long as * hold the entire conversion result. lets's go on so long as
@ -474,7 +474,7 @@ hawk_ooi_t hawk_tio_readuchars (hawk_tio_t* tio, hawk_uch_t* buf, hawk_oow_t siz
hawk_oow_t nread = 0; hawk_oow_t nread = 0;
hawk_ooi_t n; hawk_ooi_t n;
/*HAWK_ASSERT (tio->in.fun != HAWK_NULL);*/ /*HAWK_ASSERT(tio->in.fun != HAWK_NULL);*/
if (tio->in.fun == HAWK_NULL) if (tio->in.fun == HAWK_NULL)
{ {
/* no input handler function */ /* no input handler function */
@ -656,7 +656,7 @@ hawk_ooi_t hawk_tio_writeuchars (hawk_tio_t* tio, const hawk_uch_t* wptr, hawk_o
{ {
/* insert a question mark for an illegal /* insert a question mark for an illegal
* character. */ * character. */
HAWK_ASSERT (tio->outbuf_len < tio->out.buf.capa); HAWK_ASSERT(tio->outbuf_len < tio->out.buf.capa);
tio->out.buf.ptr[tio->outbuf_len++] = '?'; tio->out.buf.ptr[tio->outbuf_len++] = '?';
wcnt++; /* skip this illegal character */ wcnt++; /* skip this illegal character */
/* don't need to increment mcnt since /* don't need to increment mcnt since