6 * Copyright (C) 1987 by the Massachusetts Institute of Technology
9 * Revision 1.5 1987-06-30 20:05:52 wesommer
10 * Added range checking.
12 * Revision 1.4 87/06/21 16:42:19 wesommer
13 * Performance work, rearrangement of include files.
15 * Revision 1.3 87/06/04 01:35:28 wesommer
16 * Added better logging routines.
18 * Revision 1.2 87/06/03 16:08:07 wesommer
21 * Revision 1.1 87/06/02 20:07:32 wesommer
27 static char *rcsid_sms_util_c = "$Header$";
30 #include "sms_server.h"
42 register int count = 0;
44 if (len <= 2) return buf;
45 *buf++ = '"'; count++; len--;
46 for(; (count < 40) && (len > 1) && (c = *cp);
47 cp++, --len, ++count) {
48 if (c == '\\' || c == '"') *buf++ = '\\';
49 if (isprint(c)) *buf++ = c;
51 sprintf(buf, "\\%03o", c);
52 buf = index(buf, '\0');
55 if (len > 1) { *buf++ = '"'; count++; len--; }
57 *buf++ = '.'; count++; len--;
58 *buf++ = '.'; count++; len--;
59 *buf++ = '.'; count++; len--;
61 if (len > 1) *buf = '\0';
71 register char *bp = buf;
73 for (i = 0; i < argc && ((buf - bp) + 1024) > 2; i++) {
78 bp = requote(bp, argv[i], (buf - bp) + 1024);
81 com_err(whoami, 0, buf);
84 void sms_com_err(whoami, code, message)
89 extern char *error_message();
90 extern client *cur_client;
92 struct iovec strings[7];
95 (void) sprintf(buf, "[#%d]", cur_client->id);
98 strings[1].iov_base = buf;
99 strings[1].iov_len = strlen(buf);
101 strings[0].iov_base = whoami;
103 strings[0].iov_len = strlen(whoami);
104 strings[2].iov_base = ": ";
105 strings[2].iov_len = 2;
107 strings[0].iov_len = 0;
108 strings[2].iov_base = " ";
109 strings[2].iov_len = 1;
112 register char *errmsg = error_message(code);
113 strings[3].iov_base = errmsg;
114 strings[3].iov_len = strlen(errmsg);
115 strings[4].iov_base = " ";
116 strings[4].iov_len = 1;
118 strings[3].iov_len = 0;
119 strings[4].iov_len = 0;
121 strings[5].iov_base = message;
122 strings[5].iov_len = strlen(message);
123 strings[6].iov_base = "\n";
124 strings[6].iov_len = 1;
125 (void) writev(2, strings, 7);