| COM_ERR(3) | Library Functions Manual | COM_ERR(3) | 
com_err, com_err_va,
  error_message,
  error_table_name,
  init_error_table,
  set_com_err_hook,
  reset_com_err_hook,
  add_to_error_table,
  initialize_error_table_r
  free_error_table, com_right
  —
#include <stdio.h>
#include <stdarg.h>
#include <krb5/com_err.h>
#include "XXX_err.h"
typedef void (*errf)(const char *, long, const char *, ...);
  
  void
  
  com_err(const
    char *whoami, long
    code, const char
    *format, ...);
void
  
  com_err_va(const
    char *whoami, long
    code, const char
    *format, ...);
const char *
  
  error_message(long
    code);
const char *
  
  error_table_name(int
    num);
int
  
  init_error_table(const
    char **msgs, long
    base, int
  count);
errf
  
  set_com_err_hook(errf
    func);
errf
  
  reset_com_err_hook();
void
  
  add_to_error_table(struct
    et_list *new_table);
void
  
  initialize_error_table_r(struct
    et_list **et_list, const
    char **msgs, int
    base, long
  count);
void
  
  free_error_table(struct
    et_list *);
const char *
  
  com_right(struct
    et_list *list,
    long,
    code");
com_err library provides a common error-reporting
  mechanism for defining and accessing error codes and descriptions for
  application software packages. Error descriptions are defined in a table and
  error codes are used to index the table. The error table, the descriptions and
  the error codes are generated using
  compile_et(1).
The error table is registered with the
    com_err library by calling its initialisation
    function defined in its header file. The initialisation function is
    generally defined as
    initialize_<name>_error_table(), where
    name is the name of the error table.
If a thread-safe version of the library is needed
    initialize_<name>_error_table_r() that
    internally calls initialize_error_table_r() instead
    be used.
Any variable which is to contain an error code should be declared <name>_error_number where name is the name of the error table.
com_err(whoami,
    code, format,
    ...)com_err_va(whoami,
    code, format,
    va_list args)com_err(), which may be used by higher-level
      variadic functions (functions which accept variable numbers of
    arguments).error_message(code)Although this routine is available for use when needed, its
        use should be left to circumstances which render
        com_err() unusable.
com_right() returns the error string
        just like com_err but in a thread-safe way.
error_table_name(num)init_error_table(msgs,
    base, count)initialize_error_table_r() initialize
        the et_list in the same way as
        init_error_table(), but in a thread-safe
      way.
set_com_err_hook(func)com_err library to allow
      the routine func to be dynamically substituted for
      com_err(). After
      set_com_err_hook()
    com_err() will turn into
      calls to the new hook routine. This function is intended to be used in
      daemons to use a routine which calls
      syslog(3), or in a window
      system application to pop up a dialogue box.reset_com_err_hook()set_com_err_hook().add_to_error_table(new_table)
	#include <stdio.h>
	#include <stdarg.h>
	#include <syslog.h>
	#include "test_err.h"
	void
	hook(const char *whoami, long code,
		const char *format, va_list args)
	{
		char buffer[BUFSIZ];
		static int initialized = 0;
		if (!initialized) {
			openlog(whoami, LOG_NOWAIT, LOG_DAEMON);
			initialized = 1;
		}
		vsprintf(buffer, format, args);
		syslog(LOG_ERR, "%s %s", error_message(code), buffer);
	}
	int
	main(int argc, char *argv[])
	{
		char *whoami = argv[0];
		initialize_test_error_table();
		com_err(whoami, TEST_INVAL, "before hook");
		set_com_err_hook(hook);
		com_err(whoami, TEST_IO, "after hook");
		return (0);
	}
| July 7, 2005 | NetBSD 10.0 |