]>
Commit | Line | Data |
---|---|---|
3384a8d6 UD |
1 | #define _XOPEN_SOURCE 500 |
2 | #include <stdio.h> | |
3 | #include <stdlib.h> | |
4 | #include <locale.h> | |
5 | #include <wchar.h> | |
6 | ||
7 | const char write_chars[] = "ABC"; /* Characters on testfile. */ | |
8 | const wint_t unget_wchar = L'A'; /* Ungotten wide character. */ | |
9 | ||
10 | char *fname; | |
11 | ||
12 | ||
13 | static int do_test (void); | |
14 | #define TEST_FUNCTION do_test () | |
15 | ||
16 | #include "../test-skeleton.c" | |
17 | ||
18 | ||
19 | static int | |
20 | do_test (void) | |
21 | { | |
22 | wint_t wc; | |
23 | FILE *fp; | |
24 | int fd; | |
25 | ||
26 | fname = (char *) malloc (strlen (test_dir) + sizeof "/bug-ungetwc1.XXXXXX"); | |
27 | if (fname == NULL) | |
28 | { | |
29 | puts ("no memory"); | |
30 | return 1; | |
31 | } | |
32 | strcpy (stpcpy (fname, test_dir), "/bug-ungetwc1.XXXXXX"); | |
33 | fd = mkstemp (fname); | |
34 | if (fd == -1) | |
35 | { | |
36 | printf ("cannot open temporary file: %m\n"); | |
37 | return 1; | |
38 | } | |
737fa90d | 39 | add_temp_file (fname); |
3384a8d6 UD |
40 | |
41 | setlocale(LC_ALL, ""); | |
42 | ||
43 | /* Output to the file. */ | |
44 | if ((fp = fdopen (fd, "w")) == NULL) | |
45 | { | |
46 | fprintf (stderr, "Cannot make `%s' file\n", fname); | |
47 | exit (EXIT_FAILURE); | |
48 | } | |
3384a8d6 UD |
49 | |
50 | fprintf (fp, "%s", write_chars); | |
51 | fclose (fp); | |
52 | ||
53 | /* Read from the file. */ | |
54 | fp = fopen (fname, "r"); | |
55 | ||
49051f8e | 56 | size_t i = 0; |
3384a8d6 | 57 | while (!feof (fp)) |
49051f8e JM |
58 | { |
59 | wc = getwc (fp); | |
60 | if (i >= sizeof (write_chars)) | |
61 | { | |
62 | printf ("Did not get end-of-file when expected.\n"); | |
63 | return 1; | |
64 | } | |
65 | else if (wc != (write_chars[i] ? write_chars[i] : WEOF)) | |
66 | { | |
67 | printf ("Unexpected %lu from getwc.\n", (unsigned long int) wc); | |
68 | return 1; | |
69 | } | |
70 | i++; | |
71 | } | |
3384a8d6 UD |
72 | printf ("\nThe end-of-file indicator is set.\n"); |
73 | ||
74 | /* Unget a wide character. */ | |
75 | ungetwc (unget_wchar, fp); | |
76 | printf ("< `%lc' is ungotten.\n", unget_wchar); | |
77 | ||
78 | /* Check the end-of-file indicator. */ | |
79 | if (feof (fp)) | |
49051f8e JM |
80 | { |
81 | printf ("The end-of-file indicator is still set.\n"); | |
82 | return 1; | |
83 | } | |
3384a8d6 UD |
84 | else |
85 | printf ("The end-of-file flag is cleared.\n"); | |
86 | ||
87 | fflush (stdout); | |
88 | fclose (fp); | |
89 | ||
90 | return 0; | |
91 | } |