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