diff options
Diffstat (limited to 'debian/pilot-link/pilot-link-0.12.5-dfsg/libpisock/debug.c')
-rw-r--r-- | debian/pilot-link/pilot-link-0.12.5-dfsg/libpisock/debug.c | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/debian/pilot-link/pilot-link-0.12.5-dfsg/libpisock/debug.c b/debian/pilot-link/pilot-link-0.12.5-dfsg/libpisock/debug.c new file mode 100644 index 00000000..8f27c694 --- /dev/null +++ b/debian/pilot-link/pilot-link-0.12.5-dfsg/libpisock/debug.c @@ -0,0 +1,242 @@ +/* + * $Id: debug.c,v 1.16 2006/10/12 14:21:22 desrod Exp $ + * + * debug.c: Pilot-Link debug configuration and debug logging + * + * Copyright (c) 1996, Anonymous + * + * This library is free software; you can redistribute it and/or modify it + * under the terms of the GNU Library General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library + * General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include <stdio.h> +#include <stdarg.h> +#include <string.h> +#include <ctype.h> + +#include "pi-debug.h" +#include "pi-threadsafe.h" + +static int debug_types = PI_DBG_NONE; +static int debug_level = PI_DBG_LVL_NONE; +static FILE *debug_file = NULL; +static PI_MUTEX_DEFINE(logfile_mutex); + +/*********************************************************************** + * + * Function: pi_debug_get_types + * + * Summary: fetches the current debug types configuration + * + * Parameters: void + * + * Returns: debug_types + * + ***********************************************************************/ +int +pi_debug_get_types (void) +{ + return debug_types; +} + + +/*********************************************************************** + * + * Function: pi_debug_set_types + * + * Summary: sets the debug_types configuration + * + * Parameters: types + * + * Returns: void + * + ***********************************************************************/ +void +pi_debug_set_types (int types) +{ + debug_types = types; +} + + +/*********************************************************************** + * + * Function: pi_debug_get_types + * + * Summary: fetches the current debug level configuration + * + * Parameters: void + * + * Returns: debug_level + * + ***********************************************************************/ +int +pi_debug_get_level (void) +{ + return debug_level; +} + + +/*********************************************************************** + * + * Function: pi_debug_set_level + * + * Summary: sets the debug_level configuration + * + * Parameters: level + * + * Returns: void + * + ***********************************************************************/ +void +pi_debug_set_level (int level) +{ + pi_mutex_lock(&logfile_mutex); + debug_level = level; + pi_mutex_unlock(&logfile_mutex); +} + +/*********************************************************************** + * + * Function: pi_debug_set_file + * + * Summary: sets the debug log file configuration + * + * Parameters: char* to logfile name + * + * Returns: void + * + ***********************************************************************/ +void +pi_debug_set_file (const char *path) +{ + pi_mutex_lock(&logfile_mutex); + + if (debug_file != NULL && debug_file != stderr) + fclose (debug_file); + + debug_file = fopen (path, "a"); + if (debug_file == NULL) + debug_file = stderr; + + pi_mutex_unlock(&logfile_mutex); +} + + +/*********************************************************************** + * + * Function: pi_log + * + * Summary: logs a debug message + * + * Parameters: type, level, format, ... + * + * Returns: void + * + ***********************************************************************/ +void +pi_log (int type, int level, const char *format, ...) +{ + va_list ap; + + if (!(debug_types & type) && type != PI_DBG_ALL) + return; + + if (debug_level < level) + return; + + pi_mutex_lock(&logfile_mutex); + + if (debug_file == NULL) + debug_file = stderr; + +#if HAVE_PTHREAD + fprintf(debug_file, "[thread 0x%08lx] ", pi_thread_id()); +#endif + va_start(ap, format); + vfprintf(debug_file, format, ap); + va_end(ap); + + fflush(debug_file); + + pi_mutex_unlock(&logfile_mutex); +} + +void +pi_dumpline(const char *buf, size_t len, unsigned int addr) +{ + unsigned int i; + int offset; + char line[256]; + + offset = sprintf(line, " %.4x ", addr); + + for (i = 0; i < 16; i++) { + if (i < len) + offset += sprintf(line+offset, "%.2x ", + 0xff & (unsigned int) buf[i]); + else { + strcpy(line+offset, " "); + offset += 3; + } + } + + strcpy(line+offset, " "); + offset += 2; + + for (i = 0; i < len; i++) { + if (buf[i] == '%') { + /* since we're going through pi_log, we need to + * properly escape % characters + */ + line[offset++] = '%'; + line[offset++] = '%'; + } else if (isprint(buf[i]) && buf[i] >= 32 && buf[i] <= 126) + line[offset++] = buf[i]; + else + line[offset++] = '.'; + } + + strcpy(line+offset,"\n"); + LOG((PI_DBG_ALL, PI_DBG_LVL_NONE, line)); +} + +void +dumpline(const char *buf, size_t len, unsigned int addr) +{ + /* this function will be removed in 0.13. Use pi_dumpline() instead. */ + pi_dumpline(buf, len, addr); +} + +void +pi_dumpdata(const char *buf, size_t len) +{ + unsigned int i; + + for (i = 0; i < len; i += 16) + pi_dumpline(buf + i, ((len - i) > 16) ? 16 : len - i, i); +} + +void +dumpdata(const char *buf, size_t len) +{ + /* this function will be removed in 0.13. Use pi_dumpdata() instead */ + pi_dumpdata(buf, len); +} + +/* vi: set ts=8 sw=4 sts=4 noexpandtab: cin */ +/* ex: set tabstop=4 expandtab: */ +/* Local Variables: */ +/* indent-tabs-mode: t */ +/* c-basic-offset: 8 */ +/* End: */ |