]>
Commit | Line | Data |
---|---|---|
737fa90d UD |
1 | #define _XOPEN_SOURCE 500 |
2 | #include <errno.h> | |
3 | #include <error.h> | |
4 | #include <stdio.h> | |
5 | #include <stdlib.h> | |
6 | #include <locale.h> | |
7 | #include <wchar.h> | |
8 | ||
0e15c4b6 | 9 | const char test_locale[] = "de_DE.UTF-8"; |
737fa90d UD |
10 | const wchar_t write_wchars[] = {L'A', 0x00C4, L'B', L'\0'}; |
11 | /* `0x00C4' is A with diaeresis. */ | |
12 | size_t last_pos = 2; /* Which character is last one to read. */ | |
13 | wint_t unget_wchar = L'C'; /* Ungotten ide characters. */ | |
14 | ||
15 | char *fname; | |
16 | ||
17 | ||
18 | static int do_test (void); | |
19 | #define TEST_FUNCTION do_test () | |
20 | ||
21 | #include "../test-skeleton.c" | |
22 | ||
23 | ||
24 | static int | |
25 | do_test (void) | |
26 | { | |
27 | size_t i; | |
28 | wint_t wc; | |
29 | FILE *fp; | |
30 | int fd; | |
31 | ||
32 | fname = (char *) malloc (strlen (test_dir) + sizeof "/bug-ungetwc2.XXXXXX"); | |
33 | if (fname == NULL) | |
34 | { | |
35 | puts ("no memory"); | |
36 | return 1; | |
37 | } | |
38 | strcpy (stpcpy (fname, test_dir), "/bug-ungetwc2.XXXXXX"); | |
39 | fd = mkstemp (fname); | |
40 | if (fd == -1) | |
41 | { | |
42 | printf ("cannot open temporary file: %m\n"); | |
43 | return 1; | |
44 | } | |
45 | add_temp_file (fname); | |
46 | ||
47 | printf ("\nNote: This program runs on %s locale.\n\n", test_locale); | |
48 | ||
49 | if (setlocale (LC_ALL, test_locale) == NULL) | |
50 | { | |
51 | fprintf (stderr, "Cannot use `%s' locale.\n", test_locale); | |
52 | exit (EXIT_FAILURE); | |
53 | } | |
54 | ||
55 | /* Output to the file. */ | |
56 | if ((fp = fdopen (fd, "w")) == NULL) | |
57 | { | |
0e15c4b6 | 58 | setlocale (LC_ALL, "C"); |
737fa90d UD |
59 | fprintf (stderr, "Cannot make `%s' file.\n", fname); |
60 | exit (EXIT_FAILURE); | |
61 | } | |
62 | fprintf (fp, "%ls", write_wchars); | |
63 | fclose (fp); | |
64 | ||
65 | /* Read from the file. */ | |
66 | fp = fopen (fname, "r"); | |
67 | if (fp == NULL) | |
0e15c4b6 UD |
68 | { |
69 | setlocale (LC_ALL, "C"); | |
70 | error (EXIT_FAILURE, errno, "cannot open %s", fname); | |
71 | } | |
737fa90d UD |
72 | |
73 | printf ("%s is opened.\n", fname); | |
74 | ||
75 | for (i = 0; i < last_pos; i++) | |
76 | { | |
77 | wc = getwc (fp); | |
78 | printf ("> `%lc' is gotten.\n", wc); | |
79 | } | |
80 | ||
81 | /* Unget a wide character. */ | |
82 | ungetwc (unget_wchar, fp); | |
83 | printf ("< `%lc' is ungotten.\n", unget_wchar); | |
84 | ||
85 | /* Reget the wide character. */ | |
86 | wc = getwc (fp); | |
87 | printf ("> `%lc' is regotten.\n", wc); | |
88 | ||
89 | fflush (stdout); | |
90 | fclose (fp); | |
91 | ||
92 | return 0; | |
93 | } |