1570af302Sopenharmony_ci// decode across buffer boundary
2570af302Sopenharmony_ci#include <stdio.h>
3570af302Sopenharmony_ci#include <locale.h>
4570af302Sopenharmony_ci#include <wchar.h>
5570af302Sopenharmony_ci#include <unistd.h>
6570af302Sopenharmony_ci#include <errno.h>
7570af302Sopenharmony_ci#include <string.h>
8570af302Sopenharmony_ci#include "test.h"
9570af302Sopenharmony_ci
10570af302Sopenharmony_ci#define A(c) do { if (!(c)) t_error(#c" failed\n"); } while(0)
11570af302Sopenharmony_ci
12570af302Sopenharmony_ciint main()
13570af302Sopenharmony_ci{
14570af302Sopenharmony_ci	t_setutf8();
15570af302Sopenharmony_ci
16570af302Sopenharmony_ci	int p[2];
17570af302Sopenharmony_ci	A(pipe(p) == 0);
18570af302Sopenharmony_ci	A(write(p[1], "x\340\240", 3) == 3);
19570af302Sopenharmony_ci	A(dup2(p[0], 0) == 0);
20570af302Sopenharmony_ci	wint_t wc;
21570af302Sopenharmony_ci	wc = fgetwc(stdin);
22570af302Sopenharmony_ci	A(wc == 'x');
23570af302Sopenharmony_ci	A(write(p[1], "\200", 1) == 1);
24570af302Sopenharmony_ci	close(p[1]);
25570af302Sopenharmony_ci
26570af302Sopenharmony_ci	wc = fgetwc(stdin);
27570af302Sopenharmony_ci	if (wc != 0x800)
28570af302Sopenharmony_ci		t_error("wanted 0x800, got 0x%x\n", (unsigned)wc);
29570af302Sopenharmony_ci
30570af302Sopenharmony_ci	errno = 0;
31570af302Sopenharmony_ci	wc = fgetwc(stdin);
32570af302Sopenharmony_ci	if (wc != WEOF)
33570af302Sopenharmony_ci		t_error("wanted WEOF, got 0x%x\n", (unsigned)wc);
34570af302Sopenharmony_ci	if (errno != 0)
35570af302Sopenharmony_ci		t_error("wanted errno==0, got %d (%s)\n", errno, strerror(errno));
36570af302Sopenharmony_ci	A(feof(stdin)!=0);
37570af302Sopenharmony_ci	A(ferror(stdin)==0);
38570af302Sopenharmony_ci	return t_status;
39570af302Sopenharmony_ci}
40