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