|
|
1.1 root 1: /* advertise.c - the heart of adios */
2:
3: #include "../h/mh.h"
4: #include <stdio.h>
5: #ifdef BSD42
6: #include <sys/types.h>
7: #include <sys/uio.h>
8: #endif BSD42
9:
10: /* For 4.2BSD systems, use writev() for slightly better performance. Why?
11: Well, there are a couple of reasons. Primarily, it gives a smoother
12: output... More importantly though, it's a sexy syscall()...
13: */
14:
15: extern int errno;
16: extern int sys_nerr;
17: extern char *sys_errlist[];
18:
19: /* */
20:
21: /* VARARGS3 */
22:
23: void advertise (what, tail, fmt, a, b, c, d, e, f)
24: char *what,
25: *tail,
26: *fmt,
27: *a,
28: *b,
29: *c,
30: *d,
31: *e,
32: *f;
33: {
34: int eindex = errno;
35: #ifdef BSD42
36: char buffer[BUFSIZ],
37: err[BUFSIZ];
38: struct iovec iob[20];
39: register struct iovec *iov = iob;
40: #endif BSD42
41:
42: (void) fflush (stdout);
43:
44: #ifndef BSD42
45: fprintf (stderr, "%s: ", invo_name);
46: fprintf (stderr, fmt, a, b, c, d, e, f);
47: if (what) {
48: if (*what)
49: fprintf (stderr, " %s: ", what);
50: if (eindex > 0 && eindex < sys_nerr)
51: fprintf (stderr, "%s", sys_errlist[eindex]);
52: else
53: fprintf (stderr, "Error %d", eindex);
54: }
55: if (tail)
56: fprintf (stderr, ", %s", tail);
57: (void) fputc ('\n', stderr);
58: #else BSD42
59: (void) fflush (stderr);
60:
61: iov -> iov_len = strlen (iov -> iov_base = invo_name);
62: iov++;
63: iov -> iov_len = strlen (iov -> iov_base = ": ");
64: iov++;
65:
66: (void) sprintf (buffer, fmt, a, b, c, d, e, f);
67: iov -> iov_len = strlen (iov -> iov_base = buffer);
68: iov++;
69: if (what) {
70: if (*what) {
71: iov -> iov_len = strlen (iov -> iov_base = " ");
72: iov++;
73: iov -> iov_len = strlen (iov -> iov_base = what);
74: iov++;
75: iov -> iov_len = strlen (iov -> iov_base = ": ");
76: iov++;
77: }
78: if (eindex > 0 && eindex < sys_nerr)
79: iov -> iov_len = strlen (iov -> iov_base = sys_errlist[eindex]);
80: else {
81: (void) sprintf (err, "Error %d", eindex);
82: iov -> iov_len = strlen (iov -> iov_base = err);
83: }
84: iov++;
85: }
86: if (tail && *tail) {
87: iov -> iov_len = strlen (iov -> iov_base = ", ");
88: iov++;
89: iov -> iov_len = strlen (iov -> iov_base = tail);
90: iov++;
91: }
92: iov -> iov_len = strlen (iov -> iov_base = "\n");
93: iov++;
94: (void) writev (fileno (stderr), iob, iov - iob);
95: #endif BSD42
96: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.