Changeset 3611:e33c2cfeb17e in roaraudio


Ignore:
Timestamp:
03/01/10 03:08:04 (14 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added support for syslog, wrote additional interface roar_debug_msg()

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/debug.h

    r3607 r3611  
    4343#define ROAR_WARNING_ALWAYS      2 
    4444 
     45#define ROAR_DEBUG_TYPE_ERROR    1 
     46#define ROAR_DEBUG_TYPE_WARNING  2 
     47#define ROAR_DEBUG_TYPE_INFO     3 
     48#define ROAR_DEBUG_TYPE_DEBUG    4 
     49 
     50#define ROAR_DEBUG_MODE_SYSIO    0 
     51#define ROAR_DEBUG_MODE_VIO      1 
     52#define ROAR_DEBUG_MODE_SYSLOG   2 
     53 
    4554#if 1 
    4655#define roar_debug_warn_sysio(f,n,i) roar_debug_warn_sysio_real((f),(n),(i)) 
     
    5564 
    5665void   roar_debug_set_stderr_fh(int fh); 
     66void   roar_debug_set_stderr_mode(int mode); 
    5767 
    5868struct roar_vio_calls * roar_debug_get_stderr(void); 
     
    6070void roar_debug_msg_simple(const char *format, ...); 
    6171 
     72void roar_debug_msg(int type, unsigned long int line, char * file, char * prefix, char * format, ...); 
     73 
    6274#endif 
    6375 
  • include/libroar/libroar.h

    r3567 r3611  
    5353#ifdef ROAR_HAVE_H_SIGNAL 
    5454#include <signal.h> 
     55#endif 
     56 
     57#ifdef ROAR_HAVE_SYSLOG 
     58#include <syslog.h> 
    5559#endif 
    5660 
  • libroar/debug.c

    r3607 r3611  
    3636#include "libroar.h" 
    3737 
    38 static int roar_debug_stderr_fh = ROAR_STDERR; 
     38static int roar_debug_stderr_mode = ROAR_DEBUG_MODE_SYSIO; 
     39static int roar_debug_stderr_fh   = ROAR_STDERR; 
    3940 
    4041void roar_debug_warn_sysio_real(char * func, char * newfunc, char * info) { 
     
    5455} 
    5556 
     57void   roar_debug_set_stderr_mode(int mode) { 
     58 roar_debug_stderr_mode = mode; 
     59} 
     60 
    5661struct roar_vio_calls * roar_debug_get_stderr(void) { 
    5762 static struct roar_vio_calls STDERR; 
    5863 
    59  if ( roar_debug_stderr_fh == -1 ) 
    60   return NULL; 
     64 switch (roar_debug_stderr_mode) { 
     65  case ROAR_DEBUG_MODE_SYSIO: 
     66    if ( roar_debug_stderr_fh == -1 ) 
     67     return NULL; 
    6168 
    62  roar_vio_open_fh(&STDERR, roar_debug_stderr_fh); 
     69    roar_vio_open_fh(&STDERR, roar_debug_stderr_fh); 
    6370 
    64  return &STDERR; 
     71    return &STDERR; 
     72   break; 
     73  default: 
     74    return NULL; 
     75   break; 
     76 } 
    6577} 
    6678 
     
    7082 int ret; 
    7183 char buf[8192]; 
     84 size_t len; 
    7285 
    73  if ( (vio = roar_debug_get_stderr()) == NULL ) 
    74   return; 
     86 vio = roar_debug_get_stderr(); 
    7587 
    7688 va_start(ap, format); 
     
    7890 va_end(ap); 
    7991 
    80  roar_vio_write(vio, buf, ret); 
     92 if ( vio != NULL ) { 
     93  roar_vio_write(vio, buf, ret); 
     94 } else { 
     95  switch (roar_debug_stderr_mode) { 
     96#ifdef ROAR_HAVE_SYSLOG 
     97   case ROAR_DEBUG_MODE_SYSLOG: 
     98     // strip \n if needed for syslog: 
     99     len = strlen(buf); 
     100     if ( buf[len-1] == '\n' ) 
     101      buf[len-1] = 0; 
     102 
     103     syslog(LOG_ERR, "%s", buf); // bad to use some defaults 
     104    break; 
     105#endif 
     106   default: 
     107     return; 
     108    break; 
     109  } 
     110 } 
    81111} 
    82112 
     113void roar_debug_msg(int type, unsigned long int line, char * file, char * prefix, char * format, ...) { 
     114 struct roar_vio_calls * vio; 
     115 va_list ap; 
     116 char    buf[8192]; 
     117 char  * bufp = buf; 
     118 char  * typename; 
     119 int     ret; 
     120 int     priority; 
     121 size_t  len; 
     122 
     123 switch (type) { 
     124  case ROAR_DEBUG_TYPE_ERROR:   typename = "Error";   break; 
     125  case ROAR_DEBUG_TYPE_WARNING: typename = "Warning"; break; 
     126  case ROAR_DEBUG_TYPE_INFO:    typename = "Info";    break; 
     127  case ROAR_DEBUG_TYPE_DEBUG:   typename = "Debug";   break; 
     128  default: typename = "Unknown Type"; break; 
     129 } 
     130 
     131 ret = snprintf(buf, sizeof(buf), "(%s: %s:%lu): %s: ", prefix, file, line, typename); 
     132 
     133 if ( ret > 0 && ret < sizeof(buf) ) { 
     134  bufp += ret; 
     135 } else { 
     136  ret = 0; 
     137 } 
     138 
     139 len = ret; 
     140 
     141 va_start(ap, format); 
     142 ret = vsnprintf(bufp, sizeof(buf)-ret, format, ap); 
     143 va_end(ap); 
     144 
     145 len += ret; 
     146 
     147 switch (roar_debug_stderr_mode) { 
     148  case ROAR_DEBUG_MODE_SYSIO: 
     149  case ROAR_DEBUG_MODE_VIO: 
     150    if ( (vio = roar_debug_get_stderr()) == NULL ) 
     151     return; 
     152    roar_vio_write(vio, buf, len); 
     153    roar_vio_write(vio, "\n", 1); 
     154   break; 
     155#ifdef ROAR_HAVE_SYSLOG 
     156  case ROAR_DEBUG_MODE_SYSLOG: 
     157    switch (type) { 
     158     case ROAR_DEBUG_TYPE_ERROR:   priority = LOG_ERR;     break; 
     159     case ROAR_DEBUG_TYPE_WARNING: priority = LOG_WARNING; break; 
     160     case ROAR_DEBUG_TYPE_INFO:    priority = LOG_INFO;    break; 
     161     case ROAR_DEBUG_TYPE_DEBUG:   priority = LOG_DEBUG;   break; 
     162     default: priority = LOG_ERR; break; 
     163    } 
     164    syslog(priority, "%s", buf); 
     165   break; 
     166#endif 
     167 } 
     168} 
    83169//ll 
Note: See TracChangeset for help on using the changeset viewer.