1/* Taken from the Li18nux base test suite.  */
2
3#define _XOPEN_SOURCE 500
4#include <locale.h>
5#include <stdio.h>
6#include <stdlib.h>
7#include <unistd.h>
8#include <wchar.h>
9
10
11int
12main(void)
13{
14	FILE *fp;
15	const char *str = "abcdef";
16	wint_t ret, wc;
17	char fname[] = "/tmp/tst-ungetwc2.out.XXXXXX";
18	int fd;
19	long int pos;
20	int result = 0;
21
22	puts("This program runs on de_DE.UTF-8 locale.");
23	if (setlocale(LC_ALL, "de_DE.UTF-8") == NULL) {
24		fprintf(stderr, "Err: Cannot run on the de_DE.UTF-8 locale\n");
25		exit(EXIT_FAILURE);
26	}
27
28	/* Write some characters to `testfile'. */
29	fd = mkstemp(fname);
30	if (fd == -1) {
31		printf("cannot open temp file: %m\n");
32		exit(EXIT_FAILURE);
33	}
34	if ((fp = fdopen(fd, "w")) == NULL) {
35		fprintf(stderr, "Cannot open 'testfile'.\n");
36		exit(EXIT_FAILURE);
37	}
38	fputs(str, fp);
39	fclose(fp);
40
41	/* Open `testfile'. */
42	if ((fp = fopen(fname, "r")) == NULL) {
43		fprintf(stderr, "Cannot open 'testfile'.");
44		exit(EXIT_FAILURE);
45	}
46
47	/* Get a character. */
48	wc = getwc(fp);
49	pos = ftell(fp);
50	printf("After get a character: %ld\n", pos);
51	if (pos != 1)
52		result = 1;
53
54	/* Unget a character. */
55	ret = ungetwc(wc, fp);
56	if (ret == WEOF) {
57		fprintf(stderr, "ungetwc() returns NULL.");
58		exit(EXIT_FAILURE);
59	}
60	pos = ftell(fp);
61	printf("After unget a character: %ld\n", pos);
62	if (pos != 0)
63		result = 1;
64
65	/* Reget a character. */
66	wc = getwc(fp);
67	pos = ftell(fp);
68	printf("After reget a character: %ld\n", pos);
69	if (pos != 1)
70		result = 1;
71
72	fclose(fp);
73
74	unlink(fname);
75
76	return result;
77}
78