mirror of git://sourceware.org/git/glibc.git
				
				
				
			2002-07-24 Roland McGrath <roland@frob.com>
* libio/Makefile (tests): Add bug-ungetc. * libio/bug-ungetc.c: New file.
This commit is contained in:
		
							parent
							
								
									29f6bb6381
								
							
						
					
					
						commit
						0e94c2176b
					
				|  | @ -50,7 +50,7 @@ tests = tst_swprintf tst_wprintf tst_swscanf tst_wscanf tst_getwc tst_putwc   \ | |||
| 	tst_wprintf2 tst-widetext test-fmemopen tst-ext tst-fopenloc	      \
 | ||||
| 	tst-fgetws tst-ungetwc1 tst-ungetwc2 tst-swscanf tst-sscanf	      \
 | ||||
| 	tst-mmap-setvbuf bug-ungetwc1 bug-ungetwc2 tst-atime tst-eof          \
 | ||||
| 	tst-freopen bug-rewind | ||||
| 	tst-freopen bug-rewind bug-ungetc | ||||
| test-srcs = test-freopen | ||||
| 
 | ||||
| all: # Make this the default target; it will be defined in Rules.
 | ||||
|  |  | |||
|  | @ -0,0 +1,61 @@ | |||
| /* Test program for ungetc/ftell interaction bug.  */ | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| 
 | ||||
| static void do_prepare (void); | ||||
| #define PREPARE(argc, argv) do_prepare () | ||||
| static int do_test (void); | ||||
| #define TEST_FUNCTION do_test () | ||||
| #include <test-skeleton.c> | ||||
| 
 | ||||
| static const char pattern[] = "12345"; | ||||
| static char *temp_file; | ||||
| 
 | ||||
| static void | ||||
| do_prepare (void) | ||||
| { | ||||
|   int fd = create_temp_file ("bug-ungetc.", &temp_file); | ||||
|   if (fd == -1) | ||||
|     { | ||||
|       printf ("cannot create temporary file: %m\n"); | ||||
|       exit (1); | ||||
|     } | ||||
|   write (fd, pattern, sizeof (pattern)); | ||||
|   close (fd); | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| do_test (void) | ||||
| { | ||||
|   int i; | ||||
|   FILE *f; | ||||
|   char buf[10]; | ||||
|   long offset, diff; | ||||
|   int result = 0; | ||||
| 
 | ||||
|   f = fopen (temp_file, "rw"); | ||||
| 
 | ||||
|   rewind (f); | ||||
|   for (i = 0; i < 3; i++) | ||||
|     printf ("%c\n", getc (f)); | ||||
|   offset = ftell (f); | ||||
|   printf ("offset = %ld\n", offset); | ||||
|   if (ungetc ('4', f) != '4') | ||||
|     { | ||||
|       printf ("ungetc failed\n"); | ||||
|       abort (); | ||||
|     } | ||||
|   printf ("offset after ungetc = %ld\n", ftell (f)); | ||||
| 
 | ||||
|   i = fread ((void *) buf, 4, (size_t) 1, f); | ||||
|   printf ("read %d (%c), offset = %ld\n", i, buf[0], ftell (f)); | ||||
|   diff = ftell (f) - offset; | ||||
|   if (diff != 3) | ||||
|     { | ||||
|       printf ("ftell did not update properly.  got %ld, expected 3\n", diff); | ||||
|       result = 1; | ||||
|     } | ||||
|   fclose (f); | ||||
| 
 | ||||
|   return result; | ||||
| } | ||||
		Loading…
	
		Reference in New Issue