6 * Copyright (C) 1987 by the Massachusetts Institute of Technology
9 * Revision 1.3 1987-06-04 01:35:28 wesommer
10 * Added better logging routines.
12 * Revision 1.2 87/06/03 16:08:07 wesommer
15 * Revision 1.1 87/06/02 20:07:32 wesommer
21 static char *rcsid_sms_util_c = "$Header$";
24 #include "sms_private.h"
25 #include "sms_server.h"
33 * XXX WARNING! THIS DOES NO RANGE CHECKING!!!
34 * This is a temporary hack...
44 if (c == '\\' || c == '"') *buf++ = '\\';
45 if (isprint(c)) *buf++ = c;
47 sprintf(buf, "\\%03o", c);
48 buf = index(buf, '\0');
56 * XXX WARNING! THIS DOES NO RANGE CHECKING!!!
57 * This is a temporary hack...
65 register char *bp = buf;
67 for (i = 0; i < argc; i++) {
72 bp = requote(bp, argv[i]);
75 com_err(whoami, 0, buf);
78 void sms_com_err(whoami, code, message)
83 extern char *error_message();
84 extern client *cur_client;
86 struct iovec strings[7];
89 (void) sprintf(buf, "[#%d]", cur_client->id);
92 strings[1].iov_base = buf;
93 strings[1].iov_len = strlen(buf);
95 strings[0].iov_base = whoami;
97 strings[0].iov_len = strlen(whoami);
98 strings[2].iov_base = ": ";
99 strings[2].iov_len = 2;
101 strings[0].iov_len = 0;
102 strings[2].iov_base = " ";
103 strings[2].iov_len = 1;
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;
112 strings[3].iov_len = 0;
113 strings[4].iov_len = 0;
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);