summaryrefslogtreecommitdiffstats
path: root/debian/pilot-link/pilot-link-0.12.5-dfsg/libpisock/debug.c
diff options
context:
space:
mode:
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.c242
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: */