ref: 1b3984634f0ac427443b30fccf58d8140e07af96
parent: 9b80a7c137720bc21d4be4152aeb6ab9e1810f61
author: Arnold D. Robbins <arnold@skeeve.com>
date: Tue Aug 4 06:02:26 EDT 2020
Fix Issue #92; see FIXES.
--- a/FIXES
+++ b/FIXES
@@ -25,6 +25,11 @@
This file lists all bug fixes, changes, etc., made since the AWK book
was sent to the printers in August, 1987.
+August 4, 2020:
+ In run.c, use non-restartable multibyte routines to attain
+ portability to DJGPP. Should fix Issue 92. Thanks to Albert Wik
+ for the report and to Todd Miller for the suggested fix.
+
July 30, 2020:
Merge PRs 88-91 which fix small bugs. Thanks to Todd Miller and
Tim van der Molen for the fixes.
--- a/main.c
+++ b/main.c
@@ -22,7 +22,7 @@
THIS SOFTWARE.
****************************************************************/
-const char *version = "version 20200730";
+const char *version = "version 20200804";
#define DEBUG
#include <stdio.h>
--- a/run.c
+++ b/run.c
@@ -1521,7 +1521,6 @@
char *pbuf = NULL;
const char *ps = NULL;
size_t n = 0;
- mbstate_t mbs, mbs2;
wchar_t wc;
size_t sz = MB_CUR_MAX;
@@ -1536,17 +1535,24 @@
/* upper/lower character may be shorter/longer */
buf = tostringN(s, strlen(s) * sz + 1);
- memset(&mbs, 0, sizeof(mbs));
- memset(&mbs2, 0, sizeof(mbs2));
+ (void) mbtowc(NULL, NULL, 0); /* reset internal state */
+ /*
+ * Reset internal state here too.
+ * Assign result to avoid a compiler warning. (Casting to void
+ * doesn't work.)
+ * Increment said variable to avoid a different warning.
+ */
+ int unused = wctomb(NULL, L'\0');
+ unused++;
ps = s;
pbuf = buf;
- while (n = mbrtowc(&wc, ps, sz, &mbs),
+ while (n = mbtowc(&wc, ps, sz),
n > 0 && n != (size_t)-1 && n != (size_t)-2)
{ps += n;
- n = wcrtomb(pbuf, fun_wc(wc), &mbs2);
+ n = wctomb(pbuf, fun_wc(wc));
if (n == (size_t)-1)
FATAL("illegal wide character %s", s);--
⑨