NAME
ffmmttcchheecckk - sanitizes user-supplied printf(3)-style format string
LLIIBBRRAARRYYStandard C Library (libc, -lc)
SYNOPSIS
##iinncclluuddee <
const char * ffmmttcchheecckk(const char *fmtsuspect, const char *fmtdefault);> DESCRIPTION
The ffmmttcchheecckk() scans fmtsuspect and fmtdefault to determine if fmtsuspect will consume the same argument types as fmtdefault and to ensure that fmtsuspect is a valid format string. The printf(3) family of functions cannot verify the types of argumentsthat 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 guaran-
tee that the format string matches the specified arguments. The ffmmttcchheecckk() was designed to be used in these cases, as in:printf(fmtcheck(userformat, standardformat), 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.RETURN VALUES
If fmtsuspect is a valid format and consumes the same argument types as fmtdefault, then the ffmmttcchheecckk() will return fmtsuspect. Otherwise, it will return fmtdefault. SSEECCUURRIITTYY CCOONNSSIIDDEERRAATTIIOONNSS Note that the formats may be quite different as long as they accept thesame arguments. For example, "%p %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.SEE ALSO
printf(3)BUGS
The ffmmttcchheecckk() function does not understand all of the conversions that printf(3) does. BSD October 16, 2002 BSD