Whamcloud - gitweb
ChangeLog, dumpe2fs.8.in, dumpe2fs.c, mke2fs.8.in, mke2fs.c, partinfo.c:
[tools/e2fsprogs.git] / lib / et / com_err.c
1 /*
2  * Copyright 1987, 1988 by MIT Student Information Processing Board.
3  *
4  * This file may be copied under the terms of the GNU Public License.
5  */
6
7 #include <stdio.h>
8 #include "com_err.h"
9 #include "error_table.h"
10 #include "internal.h"
11
12 #if !defined(__STDC__) && !defined(STDARG_PROTOTYPES)
13 #include <varargs.h>
14 #define VARARGS
15 #endif
16
17 static void
18 #ifdef __STDC__
19     default_com_err_proc (const char *whoami, errcode_t code, const
20                           char *fmt, va_list args)
21 #else
22     default_com_err_proc (whoami, code, fmt, args)
23     const char *whoami;
24     errcode_t code;
25     const char *fmt;
26     va_list args;
27 #endif
28 {
29     if (whoami) {
30         fputs(whoami, stderr);
31         fputs(": ", stderr);
32     }
33     if (code) {
34         fputs(error_message(code), stderr);
35         fputs(" ", stderr);
36     }
37     if (fmt) {
38         vfprintf (stderr, fmt, args);
39     }
40     /* should do this only on a tty in raw mode */
41     putc('\r', stderr);
42     putc('\n', stderr);
43     fflush(stderr);
44 }
45
46 #ifdef __STDC__
47 typedef void (*errf) (const char *, errcode_t, const char *, va_list);
48 #else
49 typedef void (*errf) ();
50 #endif
51
52 errf com_err_hook = default_com_err_proc;
53
54 #ifdef __STDC__
55 void com_err_va (const char *whoami, errcode_t code, const char *fmt,
56                  va_list args)
57 #else
58 void com_err_va (whoami, code, fmt, args)
59     const char *whoami;
60     errcode_t code;
61     const char *fmt;
62     va_list args;
63 #endif
64 {
65     (*com_err_hook) (whoami, code, fmt, args);
66 }
67
68 #ifndef VARARGS
69 void com_err (const char *whoami,
70               errcode_t code,
71               const char *fmt, ...)
72 {
73 #else
74 void com_err (va_alist)
75     va_dcl
76 {
77     const char *whoami, *fmt;
78     errcode_t code;
79 #endif
80     va_list pvar;
81
82     if (!com_err_hook)
83         com_err_hook = default_com_err_proc;
84 #ifdef VARARGS
85     va_start (pvar);
86     whoami = va_arg (pvar, const char *);
87     code = va_arg (pvar, errcode_t);
88     fmt = va_arg (pvar, const char *);
89 #else
90     va_start(pvar, fmt);
91 #endif
92     com_err_va (whoami, code, fmt, pvar);
93     va_end(pvar);
94 }
95
96 errf set_com_err_hook (new_proc)
97     errf new_proc;
98 {
99     errf x = com_err_hook;
100
101     if (new_proc)
102         com_err_hook = new_proc;
103     else
104         com_err_hook = default_com_err_proc;
105
106     return x;
107 }
108
109 errf reset_com_err_hook () {
110     errf x = com_err_hook;
111     com_err_hook = default_com_err_proc;
112     return x;
113 }