--- handler.c +++ handler.c @@ -778,7 +778,7 @@ static void enriched_set_flags (const wchar_t *tag, struct enriched_state *stte) static int text_enriched_handler (BODY *a, STATE *s) { enum { - TEXT, LANGLE, TAG, BOGUS_TAG, NEWLINE, ST_EOF, DONE + TEXT, TEXT_GOTWC, LANGLE, TAG, BOGUS_TAG, NEWLINE, ST_EOF, DONE } state = TEXT; long bytes = a->length; @@ -807,7 +807,7 @@ static int text_enriched_handler (BODY *a, STATE *s) { if (state != ST_EOF) { - if (!bytes || (wc = fgetwc (s->fpin)) == WEOF) + if (state != TEXT_GOTWC && (!bytes || (fscanf (s->fpin, "%lc", &wc)) == EOF)) state = ST_EOF; else bytes--; @@ -815,6 +815,8 @@ static int text_enriched_handler (BODY *a, STATE *s) switch (state) { + case TEXT_GOTWC: + state = TEXT; case TEXT : switch (wc) { @@ -875,9 +877,8 @@ static int text_enriched_handler (BODY *a, STATE *s) enriched_flush (&stte, 1); else { - ungetwc (wc, s->fpin); bytes++; - state = TEXT; + state = TEXT_GOTWC; } break;