CPC_SETERRHNDLR(3CPC) | CPU Performance Counters Library Functions | CPC_SETERRHNDLR(3CPC) |
cpc_seterrhndlr - control libcpc error reporting
cc [ flag... ] file... -lcpc [ library... ] #include <libcpc.h> typedef void(cpc_errhndlr_t)(cpc_t *cpc, const char *fn, int subcode,
const char *fmt, va_list ap);
void cpc_seterrhndlr(cpc_t *cpc, cpc_errhndlr_t *errfn);
For the convenience of programmers instrumenting their code, several libcpc(3LIB) functions automatically emit to stderr error messages that attempt to provide a more detailed explanation of their error return values. While this can be useful for simple programs, some applications might want to report their errors differently, for example, to a window or to a log file.
The cpc_seterrhndlr() function allows the caller to provide an alternate function for reporting errors. The type signature is shown in the SYNOPSIS. The fn argument is passed the library function name that detected the error, an integer subcode indicating the specific error condition that has occurred, and the format string fmt that contains a textual description of the integer subcode. The format string fmt and argument pointer ap can be passed directly to vsnprintf(3C) or similar varargs-based function for formatting.
The integer subcodes are provided to allow programs to recognize error conditions while using libcpc. The fmt string is provided as a convenience for easy printing. The error subcodes are:
CPC_INVALID_EVENT
CPC_INVALID_PICNUM
CPC_INVALID_ATTRIBUTE
CPC_ATTRIBUTE_OUT_OF_RANGE
CPC_RESOURCE_UNAVAIL
CPC_PIC_NOT_CAPABLE
CPC_REQ_INVALID_FLAGS
CPC_CONFLICTING_REQS
CPC_ATTR_REQUIRES_PRIVILEGE
The default printing routine can be restored by calling the routine with an errfn argument of NULL.
Example 1 Debugging example.
The following example produces error messages only when debugging the program containing it, or when the cpc_bind_curlwp(), cpc_bind_cpu(), or cpc_bind_pctx() functions are reporting an error when binding a cpc_set_t.
int debugging; void myapp_errfn(const char *fn, int subcode, const char *fmt, va_list ap) {
if (strncmp(fn, "cpc_bind", 8) != 0 && !debugging)
return;
(void) fprintf(stderr, "myapp: cpc_%s(): ", fn);
(void) vfprintf(stderr, fmt, ap); }
See attributes(7) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
Interface Stability | Evolving |
MT-Level | Safe |
vsnprintf(3C), cpc_bind_curlwp(3CPC), libcpc(3LIB), attributes(7)
March 10, 2023 | OmniOS |