home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume11 / syslog / syslog.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-08-27  |  2.3 KB  |  158 lines

  1. /*
  2.  * syslog.c
  3.  *
  4.  * Dummy version of syslog routines that use stdio to stderr.
  5.  * Designed for debugging during development.
  6.  *
  7.  * Arnold Robbins
  8.  * Emory University Computing Center
  9.  * 7/87
  10.  */
  11.  
  12. extern int errno;
  13. extern int sys_nerr;
  14. extern char *sys_errlist[];
  15.  
  16. /*
  17.  * Surround each header with an ifdef so that
  18.  * the whole file may be included if desired.
  19.  */
  20.  
  21. #ifndef NULL    
  22. #include <stdio.h>
  23. #endif
  24.  
  25. #ifndef LOG_EMERG
  26. #include <syslog.h>
  27. #endif
  28.  
  29. #ifndef va_dcl
  30. #include <varargs.h>
  31. #endif
  32.  
  33. static char *str;
  34.  
  35. int openlog (s, i, j)
  36. char *s;
  37. int i, j;
  38. {
  39.     str = s;
  40. #ifdef lint
  41.     i = i;
  42.     j = j;
  43. #endif
  44.     return(0);
  45. }
  46.  
  47. closelog () { }
  48.  
  49. setlogmask (mask)
  50. int mask;
  51. {
  52. #ifdef lint
  53.     mask = mask;
  54. #endif
  55. }
  56.  
  57. syslog (va_alist)
  58. va_dcl
  59. {
  60.     va_list ap;
  61.     char *format, c, form[30];
  62.     int i, j;
  63.     double d;
  64.     char *cp, *x;
  65.     int err = errno, pri;
  66.     static char *level[] = {
  67.         "emergency",
  68.         "alert",
  69.         "critical",
  70.         "error",
  71.         "warning",
  72.         "notice",
  73.         "info",
  74.         "debug"
  75.     };
  76.  
  77.     va_start(ap);
  78.     pri = va_arg(ap, int);
  79.  
  80.     x = "unknown";
  81.     if (pri >= LOG_EMERG && pri <= LOG_DEBUG)
  82.         x = level[pri];
  83.  
  84.     fprintf (stderr, "%s: %s: ", str, x);
  85.  
  86.     format = va_arg(ap, char *);
  87.     while (c = *format++)
  88.     {
  89.         int done;
  90.  
  91.         if (c != '%')
  92.         {
  93.             putc (c, stderr);
  94.             continue;
  95.         }
  96.         j = 0;
  97.         form[j++] = c;
  98.         done = 0;
  99.         while (! done)
  100.         {
  101.             c = *format++;
  102.             switch (c) {
  103.             default:    /* XXX */
  104.             case 'o': case 'c': case 'd': case 's': case 'u':
  105.             case 'e': case 'E': case 'f': case 'g': case 'G':
  106.             case 'x': case 'X':
  107.                 done++;
  108.                 /* fall thru */
  109.             case ' ': case '+': case '-': case '.': case '#':
  110.             case '0': case '1': case '2': case '3': case '4':
  111.             case '5': case '6': case '7': case '8': case '9':
  112.             case 'l':
  113.                 form[j++] = c;
  114.                 break;
  115.             case 'm':
  116.                 errno = err;
  117.                 if (errno < sys_nerr)
  118.                     fputs (sys_errlist[errno], stderr);
  119.                 else
  120.                     fprintf (stderr, "error %d", errno);
  121.                 goto out;
  122.             case '%':
  123.                 putc ('%', stderr);
  124.                 goto out;
  125.             }
  126.         }
  127.         form[j] = '\0';
  128.         switch (form[j-1]) {
  129.         case 'x':
  130.         case 'X':
  131.         case 'o':
  132.         case 'c':
  133.         case 'd':
  134.         case 'u':
  135.             i = va_arg(ap, int);
  136.             fprintf (stderr, form, i);
  137.             break;
  138.         case 'e':
  139.         case 'E':
  140.         case 'f':
  141.         case 'g':
  142.         case 'G':
  143.             d = va_arg(ap, double);
  144.             fprintf (stderr, form, d);
  145.             break;
  146.         case 's':
  147.             cp = va_arg(ap, char *);
  148.             fprintf (stderr, form, cp);
  149.             break;
  150.         }
  151.     out: ;
  152.     }
  153.     if (format[-1] != '\n')
  154.         putc ('\n', stderr);
  155.  
  156.     va_end(ap);
  157. }
  158.