mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +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;
 | 
						|
}
 |