mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-31 22:10:34 +03:00 
			
		
		
		
	* stdio-common/tst-obprintf.c (main): Add another check to see obstack_printf handling all possible beginnings of the block inside an obstack chunk.
		
			
				
	
	
		
			43 lines
		
	
	
		
			817 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			817 B
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <mcheck.h>
 | |
| #include <obstack.h>
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| 
 | |
| 
 | |
| int
 | |
| main (void)
 | |
| {
 | |
|   struct obstack ob;
 | |
|   int n;
 | |
| 
 | |
|   mcheck_pedantic (NULL);
 | |
| 
 | |
| #define obstack_chunk_alloc malloc
 | |
| #define obstack_chunk_free free
 | |
| 
 | |
|   obstack_init (&ob);
 | |
| 
 | |
|   for (n = 0; n < 40000; ++n)
 | |
|     {
 | |
|       mcheck_check_all ();
 | |
|       obstack_printf (&ob, "%.*s%05d", 1 + n % 7, "foobarbaz", n);
 | |
|       if (n % 777 == 0)
 | |
| 	obstack_finish (&ob);
 | |
|     }
 | |
| 
 | |
|   /* Another loop where we finish all objects, each of size 1.  This will
 | |
|      manage to call `obstack_print' with all possible positions inside
 | |
|      an obstack chunk.  */
 | |
|   for (n = 0; n < 40000; ++n)
 | |
|     {
 | |
|       mcheck_check_all ();
 | |
|       obstack_printf (&ob, "%c", 'a' + n % 26);
 | |
|       obstack_finish (&ob);
 | |
|     }
 | |
| 
 | |
|   /* And a final check.  */
 | |
|   mcheck_check_all ();
 | |
| 
 | |
|   return 0;
 | |
| }
 |