6 * Copyright (C) 1987 by the Massachusetts Institute of Technology
9 * Revision 1.8 1987-07-29 16:02:48 wesommer
10 * Use unsigned char rather than char to prevent sign extension
13 * Revision 1.7 87/07/14 00:39:47 wesommer
14 * Changed interface to log_args.
16 * Revision 1.6 87/07/06 16:09:07 wesommer
17 * Only print ... if the string is too long..
19 * Revision 1.5 87/06/30 20:05:52 wesommer
20 * Added range checking.
22 * Revision 1.4 87/06/21 16:42:19 wesommer
23 * Performance work, rearrangement of include files.
25 * Revision 1.3 87/06/04 01:35:28 wesommer
26 * Added better logging routines.
28 * Revision 1.2 87/06/03 16:08:07 wesommer
31 * Revision 1.1 87/06/02 20:07:32 wesommer
37 static char *rcsid_sms_util_c = "$Header$";
40 #include "sms_server.h"
52 register int count = 0;
53 register unsigned char c;
54 if (len <= 2) return buf;
55 *buf++ = '"'; count++; len--;
56 for(; (count < 40) && (len > 1) && (c = *cp);
57 cp++, --len, ++count) {
58 if (c == '\\' || c == '"') *buf++ = '\\';
59 if (isprint(c)) *buf++ = c;
61 sprintf(buf, "\\%03o", c);
62 buf = index(buf, '\0');
65 if (len > 1) { *buf++ = '"'; count++; len--; }
66 if (len > 3 && count >= 40) {
67 *buf++ = '.'; count++; len--;
68 *buf++ = '.'; count++; len--;
69 *buf++ = '.'; count++; len--;
71 if (len > 1) *buf = '\0';
75 log_args(tag, argc, argv)
82 register char *bp = buf;
90 for (i = 0; i < argc && ((buf - bp) + 1024) > 2; i++) {
95 bp = requote(bp, argv[i], (buf - bp) + 1024);
98 com_err(whoami, 0, buf);
101 void sms_com_err(whoami, code, message)
106 extern char *error_message();
107 extern client *cur_client;
109 struct iovec strings[7];
112 (void) sprintf(buf, "[#%d]", cur_client->id);
115 strings[1].iov_base = buf;
116 strings[1].iov_len = strlen(buf);
118 strings[0].iov_base = whoami;
120 strings[0].iov_len = strlen(whoami);
121 strings[2].iov_base = ": ";
122 strings[2].iov_len = 2;
124 strings[0].iov_len = 0;
125 strings[2].iov_base = " ";
126 strings[2].iov_len = 1;
129 register char *errmsg = error_message(code);
130 strings[3].iov_base = errmsg;
131 strings[3].iov_len = strlen(errmsg);
132 strings[4].iov_base = " ";
133 strings[4].iov_len = 1;
135 strings[3].iov_len = 0;
136 strings[4].iov_len = 0;
138 strings[5].iov_base = message;
139 strings[5].iov_len = strlen(message);
140 strings[6].iov_base = "\n";
141 strings[6].iov_len = 1;
142 (void) writev(2, strings, 7);