home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / s / slurp103.zip / MISC.C < prev    next >
C/C++ Source or Header  |  1992-12-20  |  2KB  |  101 lines

  1. /*
  2.  * misc - general miscellaneous routines
  3.  *
  4.  * Copyright (C) 1992 Stephen Hebditch. All rights reserved.
  5.  * TQM Communications, BCM Box 225, London, WC1N 3XX.
  6.  * steveh@orbital.demon.co.uk  +44 836 825962
  7.  *
  8.  * See README for more information and disclaimers
  9.  *
  10.  * Assorted miscellaneous routines.
  11.  *
  12.  * 1.00  27 Nov 92  SH  Initial coding.
  13.  *
  14.  */
  15.  
  16. #include "slurp.h"
  17. #include <errno.h>
  18. #include <stdarg.h>
  19.  
  20.  
  21. static void log_doit (int sysflag, const char *fmt, va_list ap);
  22.  
  23.  
  24. /*
  25.  * log_ret - Log a message to stderr or syslog related to a system call
  26.  * containing the appropriate system error message and return.
  27.  */
  28.  
  29.     void
  30. log_ret (const char *fmt, ...)
  31.     {
  32.     va_list ap;
  33.  
  34.     va_start (ap, fmt);
  35.     log_doit (TRUE, fmt, ap);
  36.     va_end (ap);
  37.     return;
  38.     }
  39.  
  40.  
  41. /*
  42.  * log_sys - Log a message to stderr or syslog related to a system call.
  43.  * containing the appropriate system error message and exit program.
  44.  */
  45.  
  46.     void
  47. log_sys (const char *fmt, ...)
  48.     {
  49.     va_list ap;
  50.  
  51.     va_start (ap, fmt);
  52.     log_doit (TRUE, fmt, ap);
  53.     va_end (ap);
  54.     exit (1);
  55.     }
  56.  
  57.  
  58. /*
  59.  * log_msg - Log a message to stderr or syslog unrelated to a system call.
  60.  */
  61.  
  62.     void
  63. log_msg (const char *fmt, ...)
  64.     {
  65.     va_list ap;
  66.  
  67.     va_start (ap, fmt);
  68.     log_doit (FALSE, fmt, ap);
  69.     va_end (ap);
  70.     return;
  71.     }
  72.  
  73.  
  74. /*
  75.  * log_doit - Write an error message to stderr if debug_flag is set or
  76.  * syslog if not set. If sysflag is true then the last system error
  77.  * message is appended.
  78.  */
  79.  
  80.     static void
  81. log_doit (int sysflag, const char *fmt, va_list ap)
  82.     {
  83.     int errnosave;
  84.     char buf [BUFSIZ];
  85.  
  86.     errnosave = errno;
  87.     (void) vsprintf (buf, fmt, ap);
  88.     if (sysflag)
  89.         (void) sprintf (buf + strlen (buf), ": %s", strerror (errnosave));
  90.     (void) strcat (buf, "\n");
  91. #ifdef SYSLOG
  92.         if (!debug_flag)
  93.             syslog (LOG_ERR, buf);
  94.         else
  95. #endif
  96.             (void) fprintf (stderr, "%s: %s", pname, buf);
  97.     }
  98.  
  99.  
  100. /* END-OF-FILE */
  101.