]> andersk Git - moira.git/blobdiff - server/mr_util.c
Added "now" variable.
[moira.git] / server / mr_util.c
index e78b8fbe269f42e495be06c08aabf3f364be0554..7ce0ff9f48645cf4abd44561643f482bf5112855 100644 (file)
@@ -6,9 +6,22 @@
  *     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.
  * 
@@ -31,18 +44,17 @@ static char *rcsid_sms_util_c = "$Header$";
 
 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 {
@@ -50,15 +62,18 @@ requote(buf, cp)
                        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;
 {
@@ -66,12 +81,18 @@ log_args(argc, 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);
This page took 0.03446 seconds and 4 git commands to generate.