mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	New types printf_arginfo_size_function, printf_va_arg_function. Declare register_printf_specifier, register_printf_modifier, register_printf_type. * stdio-common/printf-parse.h (struct printf_spec): Add size element. (union printf_arg): Add pa_user element. Adjust __printf_arginfo_table type. Add __printf_va_arg_table, __printf_modifier_table, __handle_registered_modifier_mb, and __handle_registered_modifier_wc declarations. * stdio-common/printf-parsemb.c: Recognize registered modifiers. If registered arginfo call failed try normal specifier. * stdio-common/printf-prs.c: Pass additional parameter to arginfo function. * stdio-common/Makefile (routines): Add reg-modifier and reg-type. * stdio-common/Versions: Export register_printf_modifier, register_printf_type, and register_printf_specifier for GLIBC_2.10. * stdio-common/reg-modifier.c: New file. * stdio-common/reg-type.c: New file. * stdio-common/reg-printf.c (__register_printf_specifier): New function. Mostly the old __register_printf_function function but uses locking and type of third parameter changed. (__register_printf_function): Implement using __register_printf_specifier. * stdio-common/vfprintf.c (vfprintf): Collect argument sizes in calls to arginfo functions. Allocate enough memory for user-defined types. Call new va_arg functions to get user-defined types. Try installed handlers even for existing format specifiers first.
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| libc {
 | |
|   GLIBC_2.0 {
 | |
|     # global variables
 | |
|     _sys_errlist; _sys_nerr; _sys_siglist;
 | |
| 
 | |
|     # functions used in other libraries
 | |
|     __printf_fp; __vfscanf;
 | |
| 
 | |
|     # variables in normal name space
 | |
|     sys_errlist; sys_nerr; sys_sigabbrev; sys_siglist;
 | |
| 
 | |
|     # a*
 | |
|     asprintf;
 | |
| 
 | |
|     # c*
 | |
|     ctermid; cuserid;
 | |
| 
 | |
|     # d*
 | |
|     dprintf;
 | |
| 
 | |
|     # f*
 | |
|     flockfile; fprintf; fscanf; ftrylockfile; funlockfile;
 | |
| 
 | |
|     # g*
 | |
|     getline; getw;
 | |
| 
 | |
|     # p*
 | |
|     parse_printf_format; perror; printf; putw;
 | |
| 
 | |
|     # r*
 | |
|     register_printf_function; remove; rename;
 | |
| 
 | |
|     # s*
 | |
|     scanf; snprintf; sprintf; sscanf;
 | |
| 
 | |
|     # t*
 | |
|     tempnam; tmpfile; tmpnam; tmpnam_r;
 | |
| 
 | |
|     # v*
 | |
|     vfprintf; vfscanf; vprintf;
 | |
|   }
 | |
|   GLIBC_2.1 {
 | |
|     # p*
 | |
|     printf_size; printf_size_info;
 | |
| 
 | |
|     # t*
 | |
|     tmpfile; tmpfile64;
 | |
|   }
 | |
|   GLIBC_2.4 {
 | |
|     renameat;
 | |
|   }
 | |
|   GLIBC_2.7 {
 | |
|     __isoc99_scanf; __isoc99_vscanf; __isoc99_fscanf; __isoc99_vfscanf;
 | |
|     __isoc99_sscanf; __isoc99_vsscanf;
 | |
|   }
 | |
|   GLIBC_2.10 {
 | |
|     psiginfo;
 | |
|     register_printf_modifier; register_printf_type; register_printf_specifier;
 | |
|   }
 | |
|   GLIBC_PRIVATE {
 | |
|     # global variables
 | |
|     _itoa_lower_digits;
 | |
| }
 |