From b3d083b0561cc4ab475abfc4ce4dec9d3b8d6dab Mon Sep 17 00:00:00 2001 From: Not Zed Date: Tue, 23 Mar 2004 08:48:50 +0000 Subject: use camel debug to add some debug here. 2004-03-23 Not Zed * camel-exception.c (camel_exception_setv): use camel debug to add some debug here. * camel.c (camel_init): call camel_debug_init(). * camel-debug.c (camel_debug_init, camel_debug): new util stuff for extended debug options. * providers/imap/camel-imap-folder.c (imap_get_message): if we're supposed to be online, check we are online before proceeding. Actually major restructure so we re-try the fetch a couple of times first before failing. i.e. silent reconnect. See #55381. svn path=/trunk/; revision=25153 --- camel/camel-debug.c | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 camel/camel-debug.c (limited to 'camel/camel-debug.c') diff --git a/camel/camel-debug.c b/camel/camel-debug.c new file mode 100644 index 0000000000..7c16c9a614 --- /dev/null +++ b/camel/camel-debug.c @@ -0,0 +1,115 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- * + * + * Author: Michael Zucchi + * + * Copyright 2004 Novell Inc. (www.novell.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + * USA + */ + +#include +#include + +#include "camel-debug.h" + +int camel_verbose_debug; + +static GHashTable *debug_table = NULL; + +/** + * camel_debug_init: + * @void: + * + * Init camel debug. Maintain legacy CAMEL_VERBOSE_DEBUG as well as the + * new CAMEL_DEBUG based environment variable interfaces. + * + * CAMEL_VERBOSE_DEBUG is set to a number to turn debug on. + * + * CAMEL_DEBUG is set to a comma separated list of modules to debug. + * The modules can contain module-specific specifiers after a ':', or + * just act as a wildcard for the module or even specifier. e.g. 'imap' + * for imap debug, or 'imap:folder' for imap folder debug. Additionaly, + * ':folder' can be used for a wildcard for any folder operations. + **/ +void camel_debug_init(void) +{ + char *d; + + d = getenv("CAMEL_VERBOSE_DEBUG"); + if (d) + camel_verbose_debug = atoi(d); + + d = g_strdup(getenv("CAMEL_DEBUG")); + if (d) { + char *p; + + debug_table = g_hash_table_new(g_str_hash, g_str_equal); + p = d; + while (*p) { + while (*p && *p != ',') + p++; + if (*p) + *p++ = 0; + g_hash_table_insert(debug_table, d, d); + d = p; + } + + if (g_hash_table_lookup(debug_table, "all")) + camel_verbose_debug = 1; + } +} + +/** + * camel_debug: + * @mode: + * + * Check to see if a debug mode is activated. @mode takes one of two forms, + * a fully qualified 'module:target', or a wildcard 'module' name. It + * returns a boolean to indicate if the module or module and target is + * currently activated for debug output. + * + * Return value: + **/ +gboolean camel_debug(const char *mode) +{ + if (camel_verbose_debug) + return TRUE; + + if (debug_table) { + char *colon; + char *fallback; + + if (g_hash_table_lookup(debug_table, mode)) + return TRUE; + + /* Check for fully qualified debug */ + colon = strchr(mode, ':'); + if (colon) { + fallback = g_alloca(strlen(mode)+1); + strcpy(fallback, mode); + colon = (colon-mode) + fallback; + /* Now check 'module[:*]' */ + *colon = 0; + if (g_hash_table_lookup(debug_table, fallback)) + return TRUE; + /* Now check ':subsystem' */ + *colon = ':'; + if (g_hash_table_lookup(debug_table, colon)) + return TRUE; + } + } + + return FALSE; +} -- cgit v1.2.3