Import Upstream version 1.8.5
[hcoop/debian/openafs.git] / src / comerr / com_err.c
CommitLineData
805e021f
CE
1/*
2 * Copyright 1987, 1988 by MIT Student Information Processing Board.
3 *
4 * For copyright info, see mit-sipb-cr.h.
5 */
6
7#include <afsconfig.h>
8#include <afs/param.h>
9
10#include <roken.h>
11
12#include "internal.h"
13#include "error_table.h"
14#include "com_err.h"
15
16static void
17default_com_err_proc(const char *whoami, afs_int32 code, const char *fmt,
18 va_list args)
19{
20 if (whoami) {
21 fputs(whoami, stderr);
22 fputs(": ", stderr);
23 }
24 if (code) {
25 fputs(afs_error_message(code), stderr);
26 fputs(" ", stderr);
27 }
28 if (fmt) {
29 vfprintf(stderr, fmt, args);
30 }
31 putc('\n', stderr);
32 /* should do this only on a tty in raw mode */
33 putc('\r', stderr);
34 fflush(stderr);
35}
36
37typedef void (*errf) (const char *, afs_int32, const char *, va_list);
38
39static errf com_err_hook = default_com_err_proc;
40
41void
42afs_com_err_va(const char *whoami, afs_int32 code, const char *fmt, va_list args)
43{
44 (*com_err_hook) (whoami, code, fmt, args);
45}
46
47void
48afs_com_err(const char *whoami, afs_int32 code, const char *fmt, ...)
49{
50 va_list pvar;
51
52 if (!com_err_hook)
53 com_err_hook = default_com_err_proc;
54 va_start(pvar, fmt);
55 afs_com_err_va(whoami, code, fmt, pvar);
56 va_end(pvar);
57}
58
59errf
60afs_set_com_err_hook(errf new_proc)
61{
62 errf x = com_err_hook;
63 if (new_proc)
64 com_err_hook = new_proc;
65 else
66 com_err_hook = default_com_err_proc;
67 return x;
68}
69
70errf
71afs_reset_com_err_hook(void)
72{
73 errf x = com_err_hook;
74 com_err_hook = default_com_err_proc;
75 return x;
76}