openalbridge/errlib.c
changeset 2444 ace11b7d8eab
parent 2443 fececcbc2189
child 2529 51e5df1c8462
equal deleted inserted replaced
2443:fececcbc2189 2444:ace11b7d8eab
     7  reference: Stevens, Unix network programming (2ed), p.922
     7  reference: Stevens, Unix network programming (2ed), p.922
     8  
     8  
     9  */
     9  */
    10 
    10 
    11 #include "errlib.h"
    11 #include "errlib.h"
    12 #include <stdarg.h>
       
    13 
    12 
    14 #define MAXLINE 4095
    13 #define MAXLINE 4095
    15 
    14 
    16 #ifdef __CPLUSPLUS
    15 int daemon_proc = 0; /* set to 0 if stdout/stderr available, else set to 1 */
    17 extern "C" {
    16 
    18 #endif 
    17 static void err_doit (int errnoflag, int level, const char *fmt, va_list ap)
       
    18 {
       
    19         int errno_save = errno, n;
       
    20         char buf[MAXLINE+1];
    19         
    21         
    20         int daemon_proc = 0; /* set to 0 if stdout/stderr available, else set to 1 */
    22         vsnprintf (buf, MAXLINE, fmt, ap);
       
    23         n = strlen(buf);
       
    24         if (errnoflag)
       
    25                 snprintf (buf+n, MAXLINE-n, ": %s", strerror(errno_save));
       
    26         strcat (buf, "\n");
    21         
    27         
    22         static void err_doit (int errnoflag, int level, const char *fmt, va_list ap)
    28         if (daemon_proc)
    23         {
    29                 syslog (level, buf);
    24                 int errno_save = errno, n;
    30         else {
    25                 char buf[MAXLINE+1];
    31                 fflush (stdout);
    26                 
    32                 fprintf (stderr, buf);
    27                 vsnprintf (buf, MAXLINE, fmt, ap);
    33                 fflush (stderr);
    28                 n = strlen(buf);
       
    29                 if (errnoflag)
       
    30                         snprintf (buf+n, MAXLINE-n, ": %s", strerror(errno_save));
       
    31                 strcat (buf, "\n");
       
    32                 
       
    33                 if (daemon_proc)
       
    34                         syslog (level, buf);
       
    35                 else {
       
    36                         fflush (stdout);
       
    37                         fprintf (stderr, buf);
       
    38                         fflush (stderr);
       
    39                 }
       
    40                 
       
    41                 return;
       
    42         }
    34         }
    43         
    35         
    44         void err_ret (const char *fmt, ...)
    36         return;
    45         {
    37 }
    46                 va_list ap;
    38 
    47                 
    39 void err_ret (const char *fmt, ...)
    48                 va_start (ap, fmt);
    40 {
    49                 err_doit (1, LOG_INFO, fmt, ap);
    41         va_list ap;
    50                 va_end (ap);
       
    51                 return;
       
    52         }
       
    53         
    42         
    54         void err_sys (const char *fmt, ...)
    43         va_start (ap, fmt);
    55         {
    44         err_doit (1, LOG_INFO, fmt, ap);
    56                 va_list ap;
    45         va_end (ap);
    57                 
    46         return;
    58                 va_start (ap, fmt);
    47 }
    59                 err_doit (1, LOG_ERR, fmt, ap);
    48 
    60                 va_end (ap);
    49 void err_sys (const char *fmt, ...)
    61                 exit (1);
    50 {
    62         }
    51         va_list ap;
    63         
    52         
    64         void err_msg (const char *fmt, ...)
    53         va_start (ap, fmt);
    65         {
    54         err_doit (1, LOG_ERR, fmt, ap);
    66                 va_list ap;
    55         va_end (ap);
    67                 
    56         exit (1);
    68                 va_start (ap, fmt);
    57 }
    69                 err_doit (0, LOG_INFO, fmt, ap);
    58 
    70                 va_end (ap);
    59 void err_msg (const char *fmt, ...)
    71                 return;
    60 {
    72         }
    61         va_list ap;
    73         
    62         
    74         void err_quit (const char *fmt, ...)
    63         va_start (ap, fmt);
    75         {
    64         err_doit (0, LOG_INFO, fmt, ap);
    76                 va_list ap;
    65         va_end (ap);
    77                 
    66         return;
    78                 va_start (ap, fmt);
    67 }
    79                 err_doit (0, LOG_ERR, fmt, ap);
    68 
    80                 va_end (ap);
    69 void err_quit (const char *fmt, ...)
    81                 exit (1);
    70 {
    82         }
    71         va_list ap;
    83         
    72         
    84         void err_dump (const char *fmt, ...)
    73         va_start (ap, fmt);
    85         {
    74         err_doit (0, LOG_ERR, fmt, ap);
    86                 va_list ap;
    75         va_end (ap);
    87                 
    76         exit (1);
    88                 va_start (ap, fmt);
    77 }
    89                 err_doit (1, LOG_ERR, fmt, ap);
    78 
    90                 va_end (ap);
    79 void err_dump (const char *fmt, ...)
    91                 abort();
    80 {
    92         }
    81         va_list ap;
    93         
    82         
    94 #ifdef __CPLUSPLUS
    83         va_start (ap, fmt);
       
    84         err_doit (1, LOG_ERR, fmt, ap);
       
    85         va_end (ap);
       
    86         abort();
    95 }
    87 }
    96 #endif
    88