diff options
Diffstat (limited to 'sanei/sanei_init_debug.c')
-rw-r--r-- | sanei/sanei_init_debug.c | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/sanei/sanei_init_debug.c b/sanei/sanei_init_debug.c index 0abb891..3cde74e 100644 --- a/sanei/sanei_init_debug.c +++ b/sanei/sanei_init_debug.c @@ -58,6 +58,8 @@ #include <sys/socket.h> #endif #include <sys/stat.h> +#include <time.h> +#include <sys/time.h> #ifdef HAVE_OS2_H # define INCL_DOS @@ -107,16 +109,31 @@ sanei_init_debug (const char * backend, int * var) DBG (0, "Setting debug level of %s to %d.\n", backend, *var); } +static int +is_socket (int fd) +{ + struct stat sbuf; + + if (fstat(fd, &sbuf) == -1) return 0; + +#if defined(S_ISSOCK) + return S_ISSOCK(sbuf.st_mode); +#elif defined (S_IFMT) && defined(S_IFMT) + return (sbuf.st_mode & S_IFMT) == S_IFSOCK; +#else + return 0; +#endif +} + void sanei_debug_msg (int level, int max_level, const char *be, const char *fmt, va_list ap) { char *msg; - + if (max_level >= level) { -#ifdef S_IFSOCK - if ( 1 == isfdtype(fileno(stderr), S_IFSOCK) ) + if (is_socket(fileno(stderr))) { msg = (char *)malloc (sizeof(char) * (strlen(be) + strlen(fmt) + 4)); if (msg == NULL) @@ -132,12 +149,17 @@ sanei_debug_msg } } else -#endif { - fprintf (stderr, "[%s] ", be); + struct timeval tv; + struct tm *t; + + gettimeofday (&tv, NULL); + t = localtime (&tv.tv_sec); + + fprintf (stderr, "[%02d:%02d:%02d.%06ld] [%s] ", t->tm_hour, t->tm_min, t->tm_sec, tv.tv_usec, be); vfprintf (stderr, fmt, ap); } - + } } |