Update.
[platform/upstream/glibc.git] / libio / tst_putwc.c
1 /* Simple test of putwc in the C locale.
2    Copyright (C) 2000 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4    Contributed by Ulrich Drepper <drepper@cygnus.com>, 2000.
5
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Library General Public License as
8    published by the Free Software Foundation; either version 2 of the
9    License, or (at your option) any later version.
10
11    The GNU C Library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Library General Public License for more details.
15
16    You should have received a copy of the GNU Library General Public
17    License along with the GNU C Library; see the file COPYING.LIB.  If not,
18    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19    Boston, MA 02111-1307, USA.  */
20
21 #include <errno.h>
22 #include <error.h>
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <wchar.h>
26
27 static const char outname[] = OBJPFX "tst_putwc.temp";
28
29 /* Prototype for our test function.  */
30 int do_test (void);
31 #define TEST_FUNCTION do_test ()
32
33 /* This defines the `main' function and some more.  */
34 #include <test-skeleton.c>
35
36 int
37 do_test (void)
38 {
39   const wchar_t str[] = L"This is a test of putwc\n";
40   wchar_t buf[100];
41   size_t n = 0;
42   FILE *fp;
43   int res = 0;
44
45   add_temp_file (outname);
46
47   fp = fopen (outname, "w+");
48   if (fp == NULL)
49     error (EXIT_FAILURE, errno, "cannot open temporary file");
50
51   for (n = 0; str[n] != L'\0'; ++n)
52     putwc (str[n], fp);
53
54   /* First try reading after rewinding.  */
55   rewind (fp);
56
57   wmemset (buf, L'\0', sizeof (buf) / sizeof (buf[0]));
58   n = 0;
59   while (! feof (fp) && n < sizeof (buf) - 1)
60     {
61       buf[n] = getwc (fp);
62       if (buf[n] == WEOF)
63         break;
64       ++n;
65     }
66   buf[n] = L'\0';
67
68   if (wcscmp (buf, L"This is a test of putwc\n") != 0)
69     {
70       puts ("first comparison failed");
71       res = 1;
72     }
73
74   /* Now close the file, open it again, and read again.  */
75   if (fclose (fp) != 0)
76     {
77       printf ("failure during fclose(): %m");
78       res = 1;
79     }
80
81   fp = fopen (outname, "r");
82   if (fp == NULL)
83     error (EXIT_FAILURE, errno, "cannot reopen file");
84
85   /* We can remove the file now.  */
86   remove (outname);
87
88   wmemset (buf, L'\0', sizeof (buf) / sizeof (buf[0]));
89   n = 0;
90   while (! feof (fp) && n < sizeof (buf) - 1)
91     {
92       buf[n] = getwc (fp);
93       if (buf[n] == WEOF)
94         break;
95       ++n;
96     }
97   buf[n] = L'\0';
98
99   if (wcscmp (buf, L"This is a test of putwc\n") != 0)
100     {
101       puts ("second comparison failed");
102       res = 1;
103     }
104
105   if (fclose (fp) != 0)
106     {
107       puts ("failure during fclose()");
108       res = 1;
109     }
110
111   /* Next test: write a bit more than a few bytes.  */
112   fp = fopen (outname, "w");
113   if (fp == NULL)
114     error (EXIT_FAILURE, errno, "cannot open temporary file");
115
116   for (n = 0; n < 4098; ++n)
117     putwc (n & 255, fp);
118
119   fclose (fp);
120
121   return res;
122 }