VLFMT(3C) Standard C Library Functions VLFMT(3C)


NAME


vlfmt - display error message in standard format and pass to logging and
monitoring services

SYNOPSIS


#include <pfmt.h>
#include <stdarg.h>

int vlfmt(FILE *stream, long flag, const char *format, va_list ap);


DESCRIPTION


The vlfmt() function is identical to lfmt(3C), except that it is called
with an argument list as defined by <stdarg.h>.


The <stdarg.h> header defines the type va_list and a set of macros for
advancing through a list of arguments whose number and types may vary.
The ap argument is of type va_list. This argument is used with the
<stdarg.h> macros va_start(), va_arg(), and va_end(). See stdarg(3EXT).
The example in the EXAMPLES section below demonstrates their use with
vlfmt().

RETURN VALUES


Upon successful completion, vlfmt() returns the number of bytes
transmitted. Otherwise, -1 is returned if there was a write error to
stream, or -2 is returned if unable to log and/or display at console.

EXAMPLES


Example 1: Use of vlfmt() to write an errlog()routine.




The following example demonstrates how vlfmt() could be used to write an
errlog() routine. The va_alist() macro is used as the parameter list in a
function definition. The va_start(ap, ...) call, where ap is of type
va_list, must be invoked before any attempt to traverse and access
unnamed arguments. Calls to va_arg(ap, atype) traverse the argument list.
Each execution of va_arg() expands to an expression with the value and
type of the next argument in the list ap, which is the same object
initialized by va_start(). The atype argument is the type that the
returned argument is expected to be. The va_end(ap) macro must be invoked
when all desired arguments have been accessed. The argument list in ap
can be traversed again if va_start() is called again after va_end().) In
the example below, va_arg() is executed first to retrieve the format
string passed to errlog(). The remaining errlog() arguments (arg1, arg2,
...) are passed to vlfmt() in the argument ap.


#include <pfmt.h>
#include <stdarg.h>
/*
* errlog should be called like
* errlog(log_info, format, arg1, ...);
*/
void errlog(long log_info, ...)
{
va_list ap;
char *format;
va_start(ap, );
format = va_arg(ap, char *);
(void) vlfmt(stderr, log_info|MM_ERROR, format, ap);
va_end(ap);
(void) abort();
}


USAGE


Since vlfmt() uses gettxt(3C), it is recommended that vlfmt() not be
used.

ATTRIBUTES


See attributes(7) for descriptions of the following attributes:


+---------------+-----------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+-----------------+
|MT-Level | MT-Safe |
+---------------+-----------------+

SEE ALSO


gettxt(3C), lfmt(3C), stdarg(3EXT), attributes(7)


December 29, 1996 VLFMT(3C)