* Copyright (C) 1987 by the Massachusetts Institute of Technology
*
* $Log$
- * Revision 1.4 1987-06-21 16:42:19 wesommer
- * Performance work, rearrangement of include files.
+ * Revision 1.8 1987-07-29 16:02:48 wesommer
+ * Use unsigned char rather than char to prevent sign extension
+ * problem.
*
+ * Revision 1.7 87/07/14 00:39:47 wesommer
+ * Changed interface to log_args.
+ *
+ * Revision 1.6 87/07/06 16:09:07 wesommer
+ * Only print ... if the string is too long..
+ *
+ * Revision 1.5 87/06/30 20:05:52 wesommer
+ * Added range checking.
+ *
+ * Revision 1.4 87/06/21 16:42:19 wesommer
+ * Performance work, rearrangement of include files.
+ *
* Revision 1.3 87/06/04 01:35:28 wesommer
* Added better logging routines.
*
extern char *whoami;
-/*
- * XXX WARNING! THIS DOES NO RANGE CHECKING!!!
- * This is a temporary hack...
- */
char *
-requote(buf, cp)
+requote(buf, cp, len)
char *buf;
register char *cp;
{
- register char c;
- *buf++ = '"';
- for( ; c= *cp; cp++){
+ register int count = 0;
+ register unsigned char c;
+ if (len <= 2) return buf;
+ *buf++ = '"'; count++; len--;
+ for(; (count < 40) && (len > 1) && (c = *cp);
+ cp++, --len, ++count) {
if (c == '\\' || c == '"') *buf++ = '\\';
if (isprint(c)) *buf++ = c;
else {
buf = index(buf, '\0');
}
}
- *buf++ = '"';
- *buf = '\0';
+ if (len > 1) { *buf++ = '"'; count++; len--; }
+ if (len > 3 && count >= 40) {
+ *buf++ = '.'; count++; len--;
+ *buf++ = '.'; count++; len--;
+ *buf++ = '.'; count++; len--;
+ }
+ if (len > 1) *buf = '\0';
return buf;
}
-/*
- * XXX WARNING! THIS DOES NO RANGE CHECKING!!!
- * This is a temporary hack...
- */
-log_args(argc, argv)
+
+log_args(tag, argc, argv)
+ char *tag;
int argc;
char **argv;
{
register int i;
register char *bp = buf;
- for (i = 0; i < argc; i++) {
+ i = strlen(tag);
+ bcopy(tag, bp, i+1);
+ bp += i;
+ *bp++ =':';
+ *bp++ =' ';
+
+ for (i = 0; i < argc && ((buf - bp) + 1024) > 2; i++) {
if (i != 0) {
*bp++ = ',';
*bp++ = ' ';
}
- bp = requote(bp, argv[i]);
+ bp = requote(bp, argv[i], (buf - bp) + 1024);
}
*bp = '\0';
com_err(whoami, 0, buf);