source: trunk/third/openafs/src/package/messages.c @ 16970

Revision 16970, 4.4 KB checked in by zacheiss, 22 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r16969, which included commits to RCS files with non-trunk default branches.
Line 
1/*
2 * (C) Copyright Transarc Corporation 1989
3 * Licensed Materials - Property of Transarc
4 * All Rights Reserved.
5 */
6
7/*------------------------------------------------------------------------
8 * messages.c
9 *
10 * Description:
11 *      Getting messages printed to the outside world.
12 *
13 * Author:
14 *      Transarc Corporation & Carnegie Mellon University
15 *------------------------------------------------------------------------*/
16
17#ifdef  lint
18/* VARARGS1 */fatal(cp) char *cp; /*ARGSUSED*/ {}
19/* VARARGS1 */message(cp) char *cp; /*ARGSUSED*/ {}
20/* VARARGS1 */loudonly_message(cp) char *cp; /*ARGSUSED*/ {}
21/* VARARGS1 */verbose_message(cp) char *cp; /*ARGSUSED*/ {}
22#else /* lint */
23
24#include <afs/param.h>
25#include <sys/types.h>
26#ifdef  AFS_SUN5_ENV
27/* XXX Hack for the va_arg decl below XXX */
28#define lint
29#endif
30#include <varargs.h>
31#include "package.h"
32
33static char *putnum(dp, n, b)
34    register char *dp;
35    register unsigned n;
36    register int b;
37
38{ /*putnum*/
39    register int s;
40
41    for (s = b; n / s; s *= b)
42      continue;
43    s /= b;
44    while (s > 0) {
45      *dp++ = '0' + (n / s);
46      n %= s;
47      s /= b;
48    }
49
50    return(dp);
51
52} /*putnum*/
53
54static char *putstr(dp, s)
55    register char *dp;
56    register char *s;
57
58{ /*putstr*/
59
60    while (*s)
61      *dp++ = *s++;
62
63    return(dp);
64
65} /*putstr*/
66
67static char *putformat(dp, fp, ap)
68    register char *dp;
69    register char *fp;
70    register va_list ap;
71
72{ /*putformat*/
73
74    while (*fp) {
75      if (*fp == '%') {
76        switch (*++fp) {
77        case 'c':
78          {
79            char c;
80
81            c = va_arg(ap,int);
82            *dp++ = c;
83            fp++;
84            break;
85          }
86        case 'd':
87          {
88            int d;
89
90            d = va_arg(ap,int);
91            if (d < 0) {
92              *dp++ = '-';
93              d = -d;
94            }
95            dp = putnum(dp,(unsigned)d,10);
96            fp++;
97            break;
98          }
99        case 'm':
100          {
101            extern int errno;
102            extern int sys_nerr;
103            extern char *sys_errlist[];
104
105            if (errno >= 0 && errno < sys_nerr)
106              dp = putstr(dp,sys_errlist[errno]);
107            else {
108              dp = putstr(dp,"Unknown error (errorno =");
109              dp = putnum(dp,(unsigned)errno,10);
110              dp = putstr(dp,")");
111            }
112            fp++;
113            break;
114          }
115        case 'o':
116          {
117            unsigned o;
118
119            o = va_arg(ap,int);
120            dp = putnum(dp,o,8);
121            fp++;
122            break;
123          }
124        case 's':
125          {
126            char *s;
127
128            s = va_arg(ap,char *);
129            dp = putstr(dp,s);
130            fp++;
131            break;
132          }
133        case 'u':
134          {
135            unsigned u;
136
137            u = va_arg(ap,int);
138            dp = putnum(dp,u,10);
139            fp++;
140            break;
141          }
142        case 'x':
143          {
144            unsigned x;
145
146            x = va_arg(ap,int);
147            dp = putnum(dp,x,16);
148            fp++;
149            break;
150          }
151        }
152        continue;
153      }
154      if (*fp == '\\')
155        {
156          switch (*++fp) {
157          case '\\':
158            *dp++ = '\\';
159            fp++;
160            break;
161
162          case 'f':
163            *dp++ = '\f';
164            fp++;
165            break;
166
167          case 'n':
168            *dp++ = '\n';
169            fp++;
170            break;
171
172          case 'r':
173            *dp++ = '\r';
174            fp++;
175            break;
176
177          case 't':
178            *dp++ = '\t';
179            fp++;
180            break;
181
182          }
183          continue;
184        }
185      *dp++ = *fp++;
186    }
187
188    return(dp);
189
190} /*putformat*/
191
192#define maxline 256
193
194fatal(va_alist)
195    va_dcl
196
197{ /*fatal*/
198
199    va_list ap;
200    char *dp, *fp;
201    char line[maxline];
202
203    va_start(ap);
204    fp = va_arg(ap,char *);
205    dp = putformat(line,fp,ap);
206    *dp++ = '\n';
207    (void)write(2,line,dp-line);
208    exit(status_error);
209
210} /*fatal*/
211
212message(va_alist)
213    va_dcl
214
215{ /*message*/
216
217    va_list ap;
218    char *dp, *fp;
219    char line[maxline];
220
221    va_start(ap);
222    fp = va_arg(ap,char *);
223    dp = putformat(line,fp,ap);
224    *dp++ = '\n';
225    (void)write(1,line,dp-line);
226
227} /*message*/
228
229loudonly_message(va_alist)
230    va_dcl
231
232{ /*loudonly_message*/
233
234    va_list ap;
235    char *dp, *fp;
236    char line[maxline];
237
238    if (!opt_silent) {
239      va_start(ap);
240      fp = va_arg(ap,char *);
241      dp = putformat(line,fp,ap);
242      *dp++ = '\n';
243      (void)write(1,line,dp-line);
244    }
245
246} /*loudonly_message*/
247
248verbose_message(va_alist)
249    va_dcl
250
251{ /*verbose_message*/
252
253    va_list ap;
254    char *dp, *fp;
255    char line[maxline];
256
257    if (opt_verbose) {
258      va_start(ap);
259      fp = va_arg(ap,char *);
260      dp = putformat(line,fp,ap);
261      *dp++ = '\n';
262      (void)write(1,line,dp-line);
263    }
264
265}  /*verbose_message*/
266
267debug_message(va_alist)
268    va_dcl
269
270{ /*debug_message*/
271
272    va_list ap;
273    char *dp, *fp;
274    char line[maxline];
275
276    if (opt_debug) {
277      va_start(ap);
278      fp = va_arg(ap,char *);
279      dp = putformat(line,fp,ap);
280      *dp++ = '\n';
281      (void)write(1,line,dp-line);
282    }
283
284}  /*debug_message*/
285
286#endif /* lint */
Note: See TracBrowser for help on using the repository browser.