FMTCHECK

Section: Misc. Reference Manual Pages (3bsd)
Page Index

BSD mandoc
 

NAME

fmtcheck - sanitizes user-supplied printf(3)-style format string  

LIBRARY

Lb libbsd  

SYNOPSIS

In stdio.h (See libbsd(7) for include usage.) Ft const char * Fn fmtcheck const char *fmt_suspect const char *fmt_default  

DESCRIPTION

The function scans Fa fmt_suspect and Fa fmt_default to determine if Fa fmt_suspect will consume the same argument types as Fa fmt_default and to ensure that Fa fmt_suspect is a valid format string.

The printf(3) family of functions can not verify the types of arguments that they are passed at run-time. In some cases, like catgets(3), it is useful or necessary to use a user-supplied format string with no guarantee that the format string matches the specified parameters.

The function was designed to be used in these cases, as in:

printf(fmtcheck(user_format, standard_format), arg1, arg2);

In the check, field widths, fillers, precisions, etc. are ignored (unless the field width or precision is an asterisk `*' instead of a digit string). Also, any text other than the format specifiers is completely ignored.

Note that the formats may be quite different as long as they accept the same parameters. For example, "%ld %o %30s %#llx %-10.*e %n" is compatible with "This number %lu %d%% and string %s has %qd numbers and %.*g floats (%n)." However, "%o" is not equivalent to "%lx" because the first requires an integer and the second requires a long, and "%p" is not equivalent to "%lu" because the first requires a pointer and the second requires a long.  

RETURN VALUES

If Fa fmt_suspect is a valid format and consumes the same argument types as Fa fmt_default , then the function will return Fa fmt_suspect . Otherwise, it will return Fa fmt_default .  

SEE ALSO

printf(3)


 

Index

NAME
LIBRARY
SYNOPSIS
DESCRIPTION
RETURN VALUES
SEE ALSO