]> andersk Git - moira.git/blob - server/mr_util.c
Changed messages.
[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.10  1987-08-04 01:54:47  wesommer
10  *      Changed messages.
11  *
12  * Revision 1.9  87/08/04  01:50:13  wesommer
13  * Rearranged messages.
14  * 
15  * Revision 1.8  87/07/29  16:02:48  wesommer
16  * Use unsigned char rather than char to prevent sign extension
17  * problem.
18  * 
19  * Revision 1.7  87/07/14  00:39:47  wesommer
20  * Changed interface to log_args.
21  * 
22  * Revision 1.6  87/07/06  16:09:07  wesommer
23  * Only print ... if the string is too long..
24  * 
25  * Revision 1.5  87/06/30  20:05:52  wesommer
26  * Added range checking.
27  * 
28  * Revision 1.4  87/06/21  16:42:19  wesommer
29  * Performance work, rearrangement of include files.
30  * 
31  * Revision 1.3  87/06/04  01:35:28  wesommer
32  * Added better logging routines.
33  * 
34  * Revision 1.2  87/06/03  16:08:07  wesommer
35  * Fixes for lint.
36  * 
37  * Revision 1.1  87/06/02  20:07:32  wesommer
38  * Initial revision
39  * 
40  */
41
42 #ifndef lint
43 static char *rcsid_sms_util_c = "$Header$";
44 #endif lint
45
46 #include "sms_server.h"
47
48 #include <ctype.h>
49 #include <strings.h>
50
51 extern char *whoami;
52
53 char *
54 requote(buf, cp, len)
55         char *buf;
56         register char *cp;
57 {
58         register int count = 0;
59         register unsigned char c;
60         if (len <= 2) return buf;
61         *buf++ = '"'; count++; len--;
62         for(; (count < 40) && (len > 1) && (c = *cp);
63             cp++, --len, ++count) {
64                 if (c == '\\' || c == '"') *buf++ = '\\';
65                 if (isprint(c)) *buf++ = c;
66                 else {
67                         sprintf(buf, "\\%03o", c);
68                         buf = index(buf, '\0');
69                 }
70         }
71         if (len > 1) { *buf++ = '"'; count++; len--; }
72         if (len > 3 && count >= 40) {
73                 *buf++ = '.'; count++; len--;
74                 *buf++ = '.'; count++; len--;
75                 *buf++ = '.'; count++; len--;
76         }
77         if (len > 1) *buf = '\0';
78         return buf;
79 }
80
81 log_args(tag, argc, argv)
82         char *tag;
83         int argc;
84         char **argv;
85 {
86         char buf[BUFSIZ];
87         register int i;
88         register char *bp = buf;
89         
90         i = strlen(tag);
91         bcopy(tag, bp, i+1);
92         bp += i;
93         *bp++ =':';
94         *bp++ =' ';
95        
96         for (i = 0; i < argc && ((buf - bp) + 1024) > 2; i++) {
97                 if (i != 0) {
98                         *bp++ = ',';
99                         *bp++ = ' '; 
100                 }
101                 bp = requote(bp, argv[i], (buf - bp) + 1024);
102         }
103         *bp = '\0';
104         com_err(whoami, 0, "%s", buf);
105 }
106         
107 void sms_com_err(whoami, code, fmt, pvar)
108         char *whoami;
109         int code;
110         char *fmt;
111         caddr_t pvar;
112 {
113         extern char *error_message();
114         extern client *cur_client;
115         
116         struct iovec strings[7];
117
118         if (whoami) {
119                 fputs(whoami, stderr);
120                 if (cur_client) fprintf(stderr, "[#%d]", cur_client->id);
121                 fputs(": ", stderr);
122         }
123         if (code) {
124                 fputs(error_message(code), stderr);
125         }
126         if (fmt) {
127                 _doprnt(fmt, pvar, stderr);
128         }
129         putc('\n', stderr);
130 }
This page took 0.05836 seconds and 5 git commands to generate.