]> andersk Git - moira.git/blob - server/mr_util.c
Added better logging routines.
[moira.git] / server / mr_util.c
1 /*
2  *      $Source$
3  *      $Author$
4  *      $Header$
5  *
6  *      Copyright (C) 1987 by the Massachusetts Institute of Technology
7  *
8  *      $Log$
9  *      Revision 1.3  1987-06-04 01:35:28  wesommer
10  *      Added better logging routines.
11  *
12  * Revision 1.2  87/06/03  16:08:07  wesommer
13  * Fixes for lint.
14  * 
15  * Revision 1.1  87/06/02  20:07:32  wesommer
16  * Initial revision
17  * 
18  */
19
20 #ifndef lint
21 static char *rcsid_sms_util_c = "$Header$";
22 #endif lint
23
24 #include "sms_private.h"
25 #include "sms_server.h"
26
27 #include <ctype.h>
28 #include <strings.h>
29
30 extern char *whoami;
31
32 /*
33  * XXX WARNING! THIS DOES NO RANGE CHECKING!!!
34  * This is a temporary hack...
35  */
36 char *
37 requote(buf, cp)
38         char *buf;
39         register char *cp;
40 {
41         register char c;
42         *buf++ = '"';
43         for( ; c= *cp; cp++){
44                 if (c == '\\' || c == '"') *buf++ = '\\';
45                 if (isprint(c)) *buf++ = c;
46                 else {
47                         sprintf(buf, "\\%03o", c);
48                         buf = index(buf, '\0');
49                 }
50         }
51         *buf++ = '"';
52         *buf = '\0';
53         return buf;
54 }
55 /*
56  * XXX WARNING! THIS DOES NO RANGE CHECKING!!!
57  * This is a temporary hack...
58  */
59 log_args(argc, argv)
60         int argc;
61         char **argv;
62 {
63         char buf[BUFSIZ];
64         register int i;
65         register char *bp = buf;
66         
67         for (i = 0; i < argc; i++) {
68                 if (i != 0) {
69                         *bp++ = ',';
70                         *bp++ = ' '; 
71                 }
72                 bp = requote(bp, argv[i]);
73         }
74         *bp = '\0';
75         com_err(whoami, 0, buf);
76 }
77         
78 void sms_com_err(whoami, code, message)
79         char *whoami;
80         int code;
81         char *message;
82 {
83         extern char *error_message();
84         extern client *cur_client;
85         
86         struct iovec strings[7];
87         char buf[32];
88         if (cur_client)
89                 (void) sprintf(buf, "[#%d]", cur_client->id);
90         else buf[0]='\0';
91         
92         strings[1].iov_base = buf;
93         strings[1].iov_len = strlen(buf);
94         
95         strings[0].iov_base = whoami;
96         if (whoami) {
97                 strings[0].iov_len = strlen(whoami);
98                 strings[2].iov_base = ": ";
99                 strings[2].iov_len = 2;
100         } else {
101                 strings[0].iov_len = 0;
102                 strings[2].iov_base = " ";
103                 strings[2].iov_len = 1;
104         }
105         if (code) {
106                 register char *errmsg = error_message(code);
107                 strings[3].iov_base = errmsg;
108                 strings[3].iov_len = strlen(errmsg);
109                 strings[4].iov_base = " ";
110                 strings[4].iov_len = 1;
111         } else {
112                 strings[3].iov_len = 0;
113                 strings[4].iov_len = 0;
114         }
115         strings[5].iov_base = message;
116         strings[5].iov_len = strlen(message);
117         strings[6].iov_base = "\n";
118         strings[6].iov_len = 1;
119         (void) writev(2, strings, 7);
120 }
This page took 0.043428 seconds and 5 git commands to generate.