]> andersk Git - moira.git/blobdiff - server/mr_util.c
*** empty log message ***
[moira.git] / server / mr_util.c
index 261922eac2b13d7d060b3542fb78b1cf756b977c..6590666238dac14f19ee3bf8adbff54432cd0e42 100644 (file)
  *     Copyright (C) 1987 by the Massachusetts Institute of Technology
  *
  *     $Log$
- *     Revision 1.1  1987-06-02 20:07:32  wesommer
- *     Initial revision
+ *     Revision 1.10  1987-08-04 01:54:47  wesommer
+ *     Changed messages.
  *
+ * Revision 1.9  87/08/04  01:50:13  wesommer
+ * Rearranged messages.
+ * 
+ * Revision 1.8  87/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.
+ * 
+ * Revision 1.2  87/06/03  16:08:07  wesommer
+ * Fixes for lint.
+ * 
+ * Revision 1.1  87/06/02  20:07:32  wesommer
+ * Initial revision
+ * 
  */
 
 #ifndef lint
 static char *rcsid_sms_util_c = "$Header$";
 #endif lint
 
-#include "sms_private.h"
 #include "sms_server.h"
-#include <sys/uio.h>
 
 #include <ctype.h>
-#ifdef notdef
-frequote(f, cp)
-       FILE *f;
+#include <strings.h>
+
+extern char *whoami;
+
+char *
+requote(buf, cp, len)
+       char *buf;
        register char *cp;
 {
-       register char c;
-       putc('"', f);
-       for( ; c= *cp; *cp++){
-               if (c == '\\' || c == '"') putc('\\', f);
-               if (isprint(c)) putc(c, f);
-               else fprintf(f, "\\%03o", c);
+       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 {
+                       sprintf(buf, "\\%03o", c);
+                       buf = index(buf, '\0');
+               }
+       }
+       if (len > 1) { *buf++ = '"'; count++; len--; }
+       if (len > 3 && count >= 40) {
+               *buf++ = '.'; count++; len--;
+               *buf++ = '.'; count++; len--;
+               *buf++ = '.'; count++; len--;
        }
-       putc('"', f);
+       if (len > 1) *buf = '\0';
+       return buf;
 }
-#endif notdef
 
-void sms_com_err(whoami, code, message)
+log_args(tag, argc, argv)
+       char *tag;
+       int argc;
+       char **argv;
+{
+       char buf[BUFSIZ];
+       register int i;
+       register char *bp = buf;
+       
+       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], (buf - bp) + 1024);
+       }
+       *bp = '\0';
+       com_err(whoami, 0, "%s", buf);
+}
+       
+void sms_com_err(whoami, code, fmt, pvar)
        char *whoami;
        int code;
-       char *message;
+       char *fmt;
+       caddr_t pvar;
 {
        extern char *error_message();
        extern client *cur_client;
        
        struct iovec strings[7];
-       char buf[32];
-       if (cur_client)
-               (void) sprintf(buf, "[#%d]", cur_client->id);
-       else buf[0]='\0';
-       
-       strings[1].iov_base = buf;
-       strings[1].iov_len = strlen(buf);
-       
-       strings[0].iov_base = whoami;
+
        if (whoami) {
-               strings[0].iov_len = strlen(whoami);
-               strings[2].iov_base = ": ";
-               strings[2].iov_len = 2;
-       } else {
-               strings[0].iov_len = 0;
-               strings[2].iov_base = " ";
-               strings[2].iov_len = 1;
+               fputs(whoami, stderr);
+               if (cur_client) fprintf(stderr, "[#%d]", cur_client->id);
+               fputs(": ", stderr);
        }
        if (code) {
-               register char *errmsg = error_message(code);
-               strings[3].iov_base = errmsg;
-               strings[3].iov_len = strlen(errmsg);
-               strings[4].iov_base = " ";
-               strings[4].iov_len = 1;
-       } else {
-               strings[3].iov_len = 0;
-               strings[4].iov_len = 0;
+               fputs(error_message(code), stderr);
+       }
+       if (fmt) {
+               _doprnt(fmt, pvar, stderr);
        }
-       strings[5].iov_base = message;
-       strings[5].iov_len = strlen(message);
-       strings[6].iov_base = "\n";
-       strings[6].iov_len = 1;
-       (void) writev(2, strings, 7);
+       putc('\n', stderr);
 }
This page took 0.506639 seconds and 4 git commands to generate.