Back to index

glibc  2.9
bug-wfflush.c
Go to the documentation of this file.
00001 /* Test program for bug in wide streams.  */
00002 
00003 #include <stdio.h>
00004 #include <wchar.h>
00005 
00006 static void do_prepare (void);
00007 #define PREPARE(argc, argv) do_prepare ()
00008 static int do_test (void);
00009 #define TEST_FUNCTION do_test ()
00010 #include <test-skeleton.c>
00011 
00012 static char *temp_file;
00013 
00014 static void
00015 do_prepare (void)
00016 {
00017   int fd = create_temp_file ("bug-ungetc.", &temp_file);
00018   if (fd == -1)
00019     {
00020       printf ("cannot create temporary file: %m\n");
00021       exit (1);
00022     }
00023   write (fd, "1!", 2);
00024   close (fd);
00025 }
00026 
00027 static int
00028 do_test (void)
00029 {
00030   FILE *f = fopen (temp_file, "r+");
00031 
00032   if (f == NULL)
00033     {
00034       printf ("fopen: %m\n");
00035       return 1;
00036     }
00037 
00038 #define L_(s) L##s
00039   //#define fwscanf fscanf
00040   //#define fwprintf fprintf
00041 
00042   int i;
00043   if (fwscanf (f, L_("%d!"), &i) != 1)
00044     {
00045       printf ("fwscanf failed\n");
00046       return 1;
00047     }
00048 
00049   rewind (f);
00050   if (ferror (f))
00051     {
00052       printf ("rewind: %m\n");
00053       return 1;
00054     }
00055 
00056   if (fputws (L_("1!"), f) == EOF)
00057     {
00058       printf ("fputws: %m\n");
00059       return 1;
00060     }
00061 
00062   if (fflush (f) != 0)
00063     {
00064       printf ("fflush: %m\n");
00065       return 1;
00066     }
00067 
00068   if (fclose (f) != 0)
00069     {
00070       printf ("fclose: %m\n");
00071       return 1;
00072     }
00073 
00074   puts ("Test succeeded.");
00075   return 0;
00076 }