[evolution-rss] improve debug info



commit 80164972d0bfd227607cd6f9b68c5467c34aa902
Author: Lucian Langa <lucilanga gnome org>
Date:   Sat Dec 26 17:38:47 2009 +0200

    improve debug info

 src/dbus.c               |   16 +++---
 src/dbus.h               |   10 ++--
 src/fetch.c              |    7 ++-
 src/file-gio.c           |    8 ++--
 src/file-gio.h           |    8 ++--
 src/gecko-utils.cpp      |   25 ++++------
 src/misc.c               |   10 ++--
 src/network-soup.c       |   21 ++++-----
 src/network.h            |    4 +-
 src/parser.c             |   24 +++++-----
 src/parser.h             |   10 ++--
 src/rss-config-factory.c |   41 +++++++++--------
 src/rss.c                |  110 ++++++++++++++++++++++++----------------------
 src/rss.h                |    1 +
 14 files changed, 150 insertions(+), 145 deletions(-)
---
diff --git a/src/dbus.c b/src/dbus.c
index c771ae1..95e2439 100644
--- a/src/dbus.c
+++ b/src/dbus.c
@@ -29,6 +29,8 @@
 #include <dbus/dbus-glib-lowlevel.h>
 #include <gtk/gtk.h>
 
+extern int rss_verbose_debug;
+
 #include "rss.h"
 #include "rss-config-factory.h"
 #include "misc.h"
@@ -38,8 +40,6 @@
 #define DBUS_INTERFACE "org.gnome.evolution.mail.rss.in"
 #define DBUS_REPLY_INTERFACE "org.gnome.evolution.mail.rss.out"
 
-#define d(x)
-
 static DBusConnection *bus = NULL;
 static gboolean enabled = FALSE;
 
@@ -111,15 +111,15 @@ filter_function (DBusConnection *connection, DBusMessage *message, void *user_da
 				gchar *text = feed->feed_url;
 				feed->feed_url = sanitize_url(feed->feed_url);
 				g_free(text);
-				d(g_print("sanitized feed URL: %s\n", feed->feed_url));
+				d("sanitized feed URL: %s\n", feed->feed_url);
 				if (g_hash_table_find(rf->hr,
                                         check_if_match,
 					feed->feed_url)) {
-                        	   rss_error(NULL, NULL, _("Error adding feed."),
-                        	                   _("Feed already exists!"));
-    				   return DBUS_HANDLER_RESULT_HANDLED;
-                		}
-                		if (setup_feed(feed)) {
+					rss_error(NULL, NULL, _("Error adding feed."),
+						_("Feed already exists!"));
+					return DBUS_HANDLER_RESULT_HANDLED;
+				}
+				if (setup_feed(feed)) {
 					gchar *msg = g_strdup_printf(_("New feed imported: %s"),
 							lookup_chn_name_by_url(feed->feed_url));
 					taskbar_push_message(msg);
diff --git a/src/dbus.h b/src/dbus.h
index 864bbf3..ec11d8e 100644
--- a/src/dbus.h
+++ b/src/dbus.h
@@ -1,17 +1,17 @@
 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
 /*  Evoution RSS Reader Plugin
- *  Copyright (C) 2007-2009  Lucian Langa <cooly gnome eu org> 
- *  
+ *  Copyright (C) 2007-2009  Lucian Langa <cooly gnome eu org>
+ *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or 
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *  
+ *
  *  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
diff --git a/src/fetch.c b/src/fetch.c
index c34ed22..6e0b65c 100644
--- a/src/fetch.c
+++ b/src/fetch.c
@@ -21,11 +21,14 @@
 #include <stdio.h>
 #include <string.h>
 #include <errno.h>
+
+extern int rss_verbose_debug;
+
 #include "network.h"
 #include "file-gio.h"
 #include "network-soup.h"
 #include "fetch.h"
-#define d(x)
+#include "debug.h"
 
 GString*
 fetch_blocking(gchar *url, GSList *headers, GString *post,
@@ -74,7 +77,7 @@ fetch_unblocking(gchar *url, NetStatusCallback cb, gpointer data,
 {
 	gchar *scheme = NULL;
 	scheme = g_uri_parse_scheme(g_strstrip(url));
-	d(g_print("scheme:%s=>url:%s\n", scheme, url));
+	d("scheme:%s=>url:%s\n", scheme, url);
 
 	if (!scheme)
 		return FALSE;
diff --git a/src/file-gio.c b/src/file-gio.c
index baae14b..ec1a0dc 100644
--- a/src/file-gio.c
+++ b/src/file-gio.c
@@ -1,16 +1,16 @@
 /*  Evolution RSS Reader Plugin
  *  Copyright (C) 2007-2009 Lucian Langa <cooly gnome eu org>
- *         
+ *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or 
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *                     
+ *
  *  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
diff --git a/src/file-gio.h b/src/file-gio.h
index 77f743d..d5c36c8 100644
--- a/src/file-gio.h
+++ b/src/file-gio.h
@@ -1,16 +1,16 @@
 /*  Evolution RSS Reader Plugin
  *  Copyright (C) 2007-2008 Lucian Langa <cooly gnome eu org>
- *         
+ *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or 
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *                     
+ *
  *  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
diff --git a/src/gecko-utils.cpp b/src/gecko-utils.cpp
index 25d3b36..27d8d76 100644
--- a/src/gecko-utils.cpp
+++ b/src/gecko-utils.cpp
@@ -27,13 +27,6 @@
 #include <glib.h>
 #include <gtk/gtk.h>
 
-extern "C" int rss_verbose_debug;
-#if rss_verbose_debug
-#define d(x) x
-#else
-#define d(x)
-#endif
-
 #include <nsStringAPI.h>
 
 #ifdef XPCOM_GLUE
@@ -62,6 +55,8 @@ extern "C" int rss_verbose_debug;
 #include <nsIMarkupDocumentViewer.h>
 #include <nspr.h>
 
+extern "C" int rss_verbose_debug;
+#include "debug.h"
 
 static nsIPrefBranch* gPrefBranch;
 
@@ -187,7 +182,7 @@ gecko_select_all (GtkMozEmbed *embed)
 extern "C" gboolean
 gecko_init (void)
 {
-	d(g_print("gecko_init()\n"));
+	d("gecko_init()\n");
 	nsresult rv;
 #ifdef HAVE_GECKO_1_9
 	NS_LogInit ();
@@ -199,9 +194,9 @@ gecko_init (void)
 	"2", PR_TRUE
 	};
 	char xpcomLocation[4096];
-	d(g_print("init XPCOM_GLUE\n"));
-       rv = GRE_GetGREPathWithProperties(&greVersion, 1, nsnull, 0, xpcomLocation, 4096);
-       if (NS_FAILED (rv))
+	d("init XPCOM_GLUE\n");
+	rv = GRE_GetGREPathWithProperties(&greVersion, 1, nsnull, 0, xpcomLocation, 4096);
+	if (NS_FAILED (rv))
        {
          g_warning ("Could not determine locale!\n");
          return FALSE;
@@ -241,10 +236,10 @@ gecko_init (void)
 #else
 	gtk_moz_embed_set_comp_path (GECKO_HOME);
 #endif
-	d(g_print("end gecko init()\n"));
+	d("end gecko init()\n");
 #endif /* XPCOM_GLUE */
 
-	d(g_print("load gecko prefs\n"));
+	d("load gecko prefs\n");
 	gchar *profile_dir = g_build_filename (g_get_home_dir (),
 					       ".evolution",
 					       "mail",
@@ -254,7 +249,7 @@ gecko_init (void)
 	gtk_moz_embed_set_profile_path (profile_dir, "mozembed-rss");
 	g_free (profile_dir);
 
-	d(g_print("embed push startup()\n"));
+	d("embed push startup()\n");
 	gtk_moz_embed_push_startup ();
 
 	nsCOMPtr<nsIPrefService> prefService (do_GetService (NS_PREFSERVICE_CONTRACTID, &rv));
@@ -262,7 +257,7 @@ gecko_init (void)
 
 	rv = CallQueryInterface (prefService, &gPrefBranch);
 	NS_ENSURE_SUCCESS (rv, FALSE);
-	d(g_print("finished all gecko init\n"));
+	d("finished all gecko init\n");
 
 	return TRUE;
 }
diff --git a/src/misc.c b/src/misc.c
index 7bd31cb..b985bcf 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -19,8 +19,6 @@
 #ifndef __MISC_C_
 #define __MISC_C_
 
-#define d(x)
-
 #define _GNU_SOURCE
 #include <stdint.h>
 #include <string.h>
@@ -28,6 +26,8 @@
 #include <libedataserver/md5-utils.h>
 #include <camel/camel-mime-utils.h>
 
+extern int rss_verbose_debug;
+
 #include "rss.h"
 #include "parser.h"
 #include "misc.h"
@@ -75,7 +75,7 @@ check_key_match (gpointer key, gpointer value, gpointer user_data)
         char *sf_href = (char *)key;
         char *int_uri = (char *)user_data;
 
-	d(g_print("checking hay:%s for neddle:%s\n", sf_href, int_uri));
+	d("checking hay:%s for neddle:%s\n", sf_href, int_uri);
 
         if (!strcmp (sf_href, int_uri))
                 return TRUE; /* Quit calling the callback */
@@ -89,7 +89,7 @@ check_if_match (gpointer key, gpointer value, gpointer user_data)
         char *sf_href = (char *)value;
         char *int_uri = (char *)user_data;
 
-	d(g_print("checking hay:%s for neddle:%s\n", sf_href, int_uri));
+	d("checking hay:%s for neddle:%s\n", sf_href, int_uri);
 
         if (!strcmp (sf_href, int_uri))
                 return TRUE; /* Quit calling the callback */
@@ -153,7 +153,7 @@ sanitize_url(gchar *text)
 	}
 
 	scheme = g_uri_parse_scheme(tmptext);
-	d(g_print("parsed scheme:%s\n", scheme));
+	d("parsed scheme:%s\n", scheme);
 	if (!scheme && !strstr (tmptext, "http://";)
 	&& !strstr (tmptext, "https://";)) {
 		out = g_filename_to_uri(tmptext, NULL, NULL);
diff --git a/src/network-soup.c b/src/network-soup.c
index 9e6695b..75643da 100644
--- a/src/network-soup.c
+++ b/src/network-soup.c
@@ -33,18 +33,17 @@
 #include <libedataserver/e-proxy.h>
 #endif
 
+extern int rss_verbose_debug;
+
 #include "network.h"
 #include "network-soup.h"
 #include "rss.h"
 #include "misc.h"
 
-
 #define USE_PROXY FALSE
 
 #define SS_TIMEOUT 30
 
-#define d(x)
-
 #if LIBSOUP_VERSION > 2024000
 SoupCookieJar *rss_soup_jar = NULL;
 #endif
@@ -159,8 +158,8 @@ recv_msg (SoupMessage *msg, gpointer user_data)
 #else
 	response = g_string_new_len(msg->response_body->data, msg->response_body->length);
 #endif
-	d(g_print("got it!\n"));
-	d(g_print("res:[%s]\n", response->str));
+	d("got it!\n");
+	d("res:[%s]\n", response->str);
 }
 
 static gboolean
@@ -186,7 +185,7 @@ construct_abort(gpointer key, gpointer value, gpointer user_data)
 static void
 unblock_free (gpointer user_data, GObject *ex_msg)
 {
-	d(g_print("weak ref - trying to free object\n"));
+	d("weak ref - trying to free object\n");
 	g_hash_table_remove(rf->session, user_data);
 	g_hash_table_destroy(rf->abort_session);
 	rf->abort_session = g_hash_table_new(g_direct_hash, g_direct_equal);
@@ -225,13 +224,13 @@ proxify_webkit_session(EProxy *proxy, gchar *uri)
 		if (e_proxy_require_proxy_for_uri (proxy, uri)) {
 #if (DATASERVER_VERSION >=2026000)
 			proxy_uri = e_proxy_peek_uri_for (proxy, uri);
-			d(g_print("webkit proxified %s with %s:%d\n", uri, proxy_uri->host, proxy_uri->port));
+			d("webkit proxified %s with %s:%d\n", uri, proxy_uri->host, proxy_uri->port);
 #else
 			g_print("WARN: e_proxy_peek_uri_for() requires evolution-data-server 2.26\n");
 			return;
 #endif
 		} else  {
-			d(g_print("webkit no PROXY-%s\n", uri));
+			d("webkit no PROXY-%s\n", uri);
 		}
 		break;
 		g_object_set (G_OBJECT (webkit_session), SOUP_SESSION_PROXY_URI, proxy_uri, NULL);
@@ -264,10 +263,10 @@ proxify_session(EProxy *proxy, SoupSession *session, gchar *uri)
 			return;
 #endif
 			if (proxy_uri) {
-				d(g_print("proxified %s with %s:%d\n", uri, proxy_uri->host, proxy_uri->port));
+				d("proxified %s with %s:%d\n", uri, proxy_uri->host, proxy_uri->port);
 			}
 		} else {
-			d(g_print("no PROXY-%s\n", uri));
+			d("no PROXY-%s\n", uri);
 		}
 		g_object_set (G_OBJECT (session), SOUP_SESSION_PROXY_URI, proxy_uri, NULL);
 		break;
@@ -656,7 +655,7 @@ net_post_blocking(gchar *url, GSList *headers, GString *post,
 				soup_status_get_phrase(2));			//invalid url
 		goto out;
 	}
-	d(g_print("request ok :%d\n", req->status_code));
+	d("request ok :%d\n", req->status_code);
 	g_signal_connect(G_OBJECT(req), "got-chunk",
 			G_CALLBACK(got_chunk_blocking_cb), &info);
 	for (; headers; headers = headers->next) {
diff --git a/src/network.h b/src/network.h
index 8fe876c..e34fb36 100644
--- a/src/network.h
+++ b/src/network.h
@@ -5,12 +5,12 @@
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
- *  
+ *
  * This program is distopen_ributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICUrLAR PURPOSE.  See the
  * GNU General Public License for more dentails.
- * 
+ *
  * 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.
diff --git a/src/parser.c b/src/parser.c
index 06eb4f1..cecacc6 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -26,13 +26,13 @@
 #include <libxml/debugXML.h>
 #include <camel/camel-url.h>
 
+extern int rss_verbose_debug;
+
 #include "fetch.h"
 #include "rss.h"
 #include "parser.h"
 #include "misc.h"
 
-#define d(x)
-
 /************ RDF Parser *******************/
 
 guint rsserror = FALSE;
@@ -102,7 +102,7 @@ html_set_base(xmlNode *doc, char *base, const char *tag, const char *prop, char
 				xmlSetProp(doc, (xmlChar *)prop, (xmlChar *)tmpurl);
 				g_free(tmpurl);
 			}
-			d(g_print("DEBUG: parsing: %s\n", url));
+			d("DEBUG: parsing: %s\n", url);
 			if (url[0] == '/' && url[1] != '/') {
 				gchar *server = get_server_from_uri(base);
 				gchar *tmp = g_strdup_printf("%s/%s", server, url);
@@ -277,7 +277,7 @@ parse_html(char *url, const char *html, int len)
 		return NULL;
 	doc = src;
 	newbase = (gchar *)xmlGetProp(html_find((xmlNode *)doc, (gchar *)"base"), (xmlChar *)"href");
-	d(g_print("newbase:|%s|\n", newbase));
+	d("newbase:|%s|\n", newbase);
 	tmpdoc = (xmlDoc *)html_find((xmlNode *)doc, (gchar *)"base");
 	xmlUnlinkNode((xmlNode *)tmpdoc);
 	html_set_base((xmlNode *)doc, url, "a", "href", newbase);
@@ -770,7 +770,7 @@ tree_walk (xmlNodePtr root, RDF *r)
 			}
 
 			/* This is the channel top level */
-			d(printf ("Top level '%s'.\n", walk->name));
+			d("Top level '%s'.\n", walk->name);
 			if (strcasecmp ((char *)walk->name, "channel") == 0) {
 				channel = walk;
 				rewalk = channel->children;
@@ -978,12 +978,12 @@ parse_channel_line(xmlNode *top, gchar *feed_name, char *main_date)
 				layer_find (top, (gchar *)"guid", NULL));		//RSS 2.0
 		feed = g_strdup_printf("%s\n", id ? id : link);
 		if (feed) g_strstrip(feed);
-		d(g_print("link:%s\n", link));
-		d(g_print("author:%s\n", q));
-		d(g_print("title:%s\n", p));
-		d(g_print("date:%s\n", d));
-		d(g_print("date:%s\n", d2));
-		d(g_print("body:%s\n", b));
+		d("link:%s\n", link);
+		d("author:%s\n", q);
+		d("title:%s\n", p);
+		d("date:%s\n", d);
+		d("date:%s\n", d2);
+		d("body:%s\n", b);
 
 		//not very nice but prevents unnecessary long body processing
 		if (!feed_is_new(feed_name, feed)) {
@@ -1126,7 +1126,7 @@ update_channel(RDF *r)
 				free_cf(CF);
 			}
 			farticle++;
-			d(g_print("put success()\n"));
+			d("put success()\n");
 			update_status_icon(chn_name, subj);
 			g_free(subj);
 		} else
diff --git a/src/parser.h b/src/parser.h
index 6f15946..fb6b96f 100644
--- a/src/parser.h
+++ b/src/parser.h
@@ -1,16 +1,16 @@
 /*  Evoution RSS Reader Plugin
- *  Copyright (C) 2007-2009 Lucian Langa <cooly gnome eu org> 
- *  
+ *  Copyright (C) 2007-2009 Lucian Langa <cooly gnome eu org>
+ *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or 
+ *  the Free Software Foundation; either version 2 of the License, or
  *  (at your option) any later version.
- *  
+ *
  *  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
diff --git a/src/rss-config-factory.c b/src/rss-config-factory.c
index 81d8483..d178177 100644
--- a/src/rss-config-factory.c
+++ b/src/rss-config-factory.c
@@ -52,14 +52,14 @@
 #include <libsoup/soup-gnome-features.h>
 #endif
 
+extern int rss_verbose_debug;
+
 #include "rss.h"
 #include "misc.h"
 #include "parser.h"
 #include "rss-config-factory.h"
 #include "network-soup.h"
 
-#define d(x)
-
 static guint feed_enabled = 0;
 static guint feed_validate = 0;
 static guint feed_html = 0;
@@ -797,7 +797,7 @@ rss_delete_rec (CamelStore *store, CamelFolderInfo *fi, CamelException *ex)
         while (fi) {
                 CamelFolder *folder;
 
-                d(printf ("deleting folder '%s'\n", fi->full_name));
+                d("deleting folder '%s'\n", fi->full_name);
 
                 if (!(folder = camel_store_get_folder (store, fi->full_name, 0, ex)))
                         return;
@@ -813,6 +813,8 @@ rss_delete_rec (CamelStore *store, CamelFolderInfo *fi, CamelException *ex)
                         camel_folder_sync (folder, TRUE, NULL);
                         camel_folder_thaw (folder);
 
+		d("do camel_store_delete_folder()\n");
+
                 camel_store_delete_folder (store, fi->full_name, ex);
                 if (camel_exception_is_set (ex))
                         return;
@@ -827,15 +829,16 @@ rss_delete_folders (CamelStore *store, const char *full_name, CamelException *ex
         guint32 flags = CAMEL_STORE_FOLDER_INFO_RECURSIVE
 		| CAMEL_STORE_FOLDER_INFO_FAST
 		| CAMEL_STORE_FOLDER_INFO_SUBSCRIBED;
-        CamelFolderInfo *fi;
-	d(g_print("rss_delete_folders() %s:%d\n", __FILE__, __LINE__));
+        CamelFolderInfo *fi = NULL;
 
+	d("camel_store_get_folder_info() %s\n", full_name);
         fi = camel_store_get_folder_info (store, full_name, flags, ex);
-        if (camel_exception_is_set (ex))
+        if (!fi || camel_exception_is_set (ex))
                 return;
 
-        rss_delete_rec (store, fi, ex);
-        camel_store_free_folder_info (store, fi);
+	d("call rss_delete_rec()\n");
+	rss_delete_rec (store, fi, ex);
+	camel_store_free_folder_info (store, fi);
 }
 
 void
@@ -1267,7 +1270,7 @@ import_one_feed(gchar *url, gchar *title, gchar *prefix)
                return FALSE;
         }
 	res = setup_feed(feed);
-        d(g_print("feed imported:%d\n", res));
+        d("feed imported:%d\n", res);
         g_free(feed->feed_url);
         g_free(feed->feed_name);
 	g_free(feed);
@@ -1375,7 +1378,7 @@ import_opml(gchar *file)
 				src=src->children;
 				src = src->next;
 				src = src->children;
-				d(g_print("group name:%s\n", layer_find(src, "name", NULL)));
+				d("group name:%s\n", layer_find(src, "name", NULL));
 				src = src->next;
 				while ((src = iterate_import_file(src, &url, &name, 1))) {
 					if (url) {
@@ -1384,7 +1387,7 @@ import_opml(gchar *file)
 					}
 					if (name) xmlFree(name);
 				}
-			d(g_print("total:%d\n", total));
+			d("total:%d\n", total);
 			type = 1;
 			}
 		}
@@ -1397,7 +1400,7 @@ import_opml(gchar *file)
 				if (name) xmlFree(name);
 			}
 			type = 0;
-			d(g_print("total:%d\n", total));
+			d("total:%d\n", total);
 		}
 	}
         src = doc;
@@ -1408,12 +1411,12 @@ import_opml(gchar *file)
                 gtk_main_iteration ();
 	if (type == 1) {
 		src=src->children;
-		d(g_print("my cont:%s\n", src->content));
+		d("my cont:%s\n", src->content);
 		src=src->children;
 		src = src->next;
-		d(g_print("found %s\n", src->name));
+		d("found %s\n", src->name);
 		src = src->children;
-		d(g_print("group name:%s\n", layer_find(src, "name", NULL)));
+		d("group name:%s\n", layer_find(src, "name", NULL));
 		src = src->next;
 	}
 
@@ -1504,7 +1507,7 @@ fail:					while (gtk_events_pending ())
 
 	while ((src = iterate_import_file(src, &url, &name, type))) {
                 if (url && strlen(url)) {
-			d(g_print("url:%s\n", url));
+			d("url:%s\n", url);
                         if (rf->cancel) {
                                 if (src) xmlFree(src);
                                 rf->cancel = 0;
@@ -1943,7 +1946,7 @@ import_cookies(gchar *file)
 	gchar header[16];
 
 	memset(header, 0, 16);
-	d(g_print("import cookies from %s\n", file));
+	d("import cookies from %s\n", file);
 	f = fopen(file, "r");
 	if (f) {
 		fgets(header, 16, f);
@@ -2394,7 +2397,7 @@ void rss_folder_factory_abort (EPlugin *epl, EConfigTarget *target);
 
 void rss_folder_factory_abort (EPlugin *epl, EConfigTarget *target)
 {
-	d(g_print("abort"));
+	d("abort");
 }
 
 void rss_folder_factory_commit (EPlugin *epl, EConfigTarget *target);
@@ -2621,7 +2624,7 @@ rss_config_control_new (void)
 	gdouble adj;
 	GError* error = NULL;
 
-	d(g_print("rf->%p\n", rf));
+	d("rf->%p\n", rf);
 	sf = g_new0(setupfeed, 1);
 
         gladefile = g_build_filename (EVOLUTION_GLADEDIR,
diff --git a/src/rss.c b/src/rss.c
index 035b352..0a91017 100644
--- a/src/rss.c
+++ b/src/rss.c
@@ -21,7 +21,6 @@
 #endif
 
 int rss_verbose_debug = 0;
-#define d(x) (rss_verbose_debug?(x):0)
 
 #define _GNU_SOURCE
 #include <string.h>
@@ -641,7 +640,7 @@ statuscb(NetStatusType status, gpointer statusdata, gpointer data)
 //	rssfeed *rf = data;
     NetStatusProgress *progress;
     float fraction = 0;
-    d(g_print("status:%d\n", status));
+    d("status:%d\n", status);
 
     switch (status) {
     case NET_STATUS_BEGIN:
@@ -1007,7 +1006,7 @@ proxy_auth_dialog(gchar *title, gchar *user, gchar *pass)
 gboolean
 timeout_soup(void)
 {
-	d(g_print("Network timeout occured. Cancel active operations.\n"));
+	d("Network timeout occured. Cancel active operations.\n");
 	abort_all_soup();
 	return FALSE;
 }
@@ -1034,7 +1033,7 @@ network_timeout(void)
 static void
 readrss_dialog_cb (GtkWidget *widget, gpointer data)
 {
-	d(g_print("\nCancel reading feeds\n"));
+	d("\nCancel reading feeds\n");
 	abort_all_soup();
 #ifndef EVOLUTION_2_12
 	gtk_widget_destroy(widget);
@@ -1157,9 +1156,11 @@ rss_select_folder(gchar *folder_name)
 	EMFolderTree *folder_tree = NULL;
 	gchar *uri;
 	CamelStore *store;
-	CamelFolder *fold;
+	CamelFolder *fold = NULL;
 	EShellSidebar *shell_sidebar;
 
+	d("rss_select_folder() %s:%d\n", __FILE__, __LINE__);
+
 	g_return_if_fail(folder_name != NULL);
 
 	shell_sidebar  = e_shell_view_get_shell_sidebar(rss_shell_view);
@@ -1598,7 +1599,7 @@ mycall (GtkWidget *widget, GtkAllocation *event, gpointer data)
 	if (GTK_IS_WIDGET(widget)) {
 		width = widget->allocation.width - 16 - 2;// - 16;
 		height = widget->allocation.height - 16 - k;
-		d(g_print("resize webkit :width:%d, height: %d\n", width, height));
+		d("resize webkit :width:%d, height: %d\n", width, height);
 		if (po->mozembedwindow && rf->mozembed)
 			if(GTK_IS_WIDGET(po->mozembedwindow)
 			&& GTK_WIDGET_REALIZED(rf->mozembed)
@@ -1623,7 +1624,7 @@ mycall (GtkWidget *widget, GtkAllocation *event, gpointer data)
 /*#if defined(HAVE_XULRUNNER)
 // || defined(HAVE_GECKO_1_9)
 if (2 == gconf_client_get_int(rss_gconf, GCONF_KEY_HTML_RENDER, NULL))
-	gtk_moz_embed_reload((GtkMozEmbed *)rf->mozembed, GTK_MOZ_EMBED_FLAG_RELOADNORMAL);
+	gtk_moz_embed_reload(GtkMozEmbed *)rf->mozembed, GTK_MOZ_EMBED_FLAG_RELOADNORMAL);
 #endif*/
 			}
 	}
@@ -1633,7 +1634,7 @@ if (2 == gconf_client_get_int(rss_gconf, GCONF_KEY_HTML_RENDER, NULL))
 void
 rss_mozilla_init(void)
 {
-	d(g_print("rss_mozilla_init() called in %s:%d\n", __FILE__, __LINE__));
+	d("rss_mozilla_init() called in %s:%d\n", __FILE__, __LINE__);
 	if (!gecko_ready) {
 		gecko_init();
 		gecko_ready = 1;
@@ -1991,7 +1992,7 @@ org_gnome_rss_browser (EMFormatHTML *efh, void *eb, EMFormatHTMLPObject *pobject
 	if (engine == 2) {
 		rss_mozilla_init();	//in case we fail this is a failover
 		rf->mozembed = gtk_moz_embed_new();
-		d(g_print("mozembed=%p at %s:%d\n", rf->mozembed, __FILE__, __LINE__));
+		d("mozembed=%p at %s:%d\n", rf->mozembed, __FILE__, __LINE__);
 		gecko_set_preferences();
 
 		/* FIXME add all those profile shits */
@@ -2008,7 +2009,7 @@ org_gnome_rss_browser (EMFormatHTML *efh, void *eb, EMFormatHTMLPObject *pobject
 
 #ifdef HAVE_WEBKIT
 	if (engine == 1) {
-		d(g_print("Render engine Webkit\n"));
+		d("Render engine Webkit\n");
 		if (rf->online) {
 //			webkit_web_view_open(WEBKIT_WEB_VIEW(rf->mozembed), po->website);
 		} else
@@ -2018,7 +2019,7 @@ org_gnome_rss_browser (EMFormatHTML *efh, void *eb, EMFormatHTMLPObject *pobject
 
 #ifdef HAVE_GECKO
 	if (engine == 2) {
-		d(g_print("Render engine Gecko\n"));
+		d("Render engine Gecko\n");
 		if (rf->online) {
 			//gtk_moz_embed_stop_load(GTK_MOZ_EMBED(rf->mozembed));
 			//gtk_moz_embed_load_url (GTK_MOZ_EMBED(rf->mozembed), po->website);
@@ -2192,7 +2193,7 @@ free_rss_browser(EMFormatHTMLPObject *o)
 	gpointer key = g_hash_table_lookup(rf->key_session, po->website);
 	guint engine;
 
-	d(g_print("key sess:%p\n", key));
+	d("key sess:%p\n", key);
 	if (key) {
 		g_hash_table_remove(rf->key_session, po->website);
 		soup_session_abort(key);
@@ -2282,7 +2283,7 @@ void org_gnome_cooly_format_rss(void *ep, EMFormatHookTarget *t)	//camelmimepart
 #endif
 
 	current_pobject = t->format;
-        d(g_print("Formatting...\n"));
+        d("Formatting...\n");
 
 	message = CAMEL_IS_MIME_MESSAGE(t->part) ?
 			t->part :
@@ -2417,7 +2418,7 @@ void org_gnome_cooly_format_rss(void *ep, EMFormatHookTarget *t)	//camelmimepart
 
 		if (src) {
 			htmlDocDumpMemory(src, &buff, &size);
-			d(g_print("htmlDocDumpMemory:%s\n", buff));
+			d("htmlDocDumpMemory:%s\n", buff);
 			xmlFree(src);
 		} else
 			goto out;
@@ -2449,7 +2450,7 @@ void org_gnome_cooly_format_rss(void *ep, EMFormatHookTarget *t)	//camelmimepart
 
 		g_string_free(content, 1);
 	} else {
-		d(g_print("normal html rendering\n"));
+		d("normal html rendering\n");
 		buffer = g_byte_array_new ();
 		camel_stream_mem_set_byte_array (stream, buffer);
 		mcontent = camel_medium_get_content_object(CAMEL_MEDIUM(t->part));
@@ -2978,7 +2979,7 @@ setup_feed(add_feed *feed)
 	if (!feed->validate)
 		goto add;
 
-top:	d(g_print("adding feed->feed_url:%s\n", feed->feed_url));
+top:	d("adding feed->feed_url:%s\n", feed->feed_url);
         content = fetch_blocking(
 				feed->feed_url,
 				NULL,
@@ -3000,7 +3001,7 @@ top:	d(g_print("adding feed->feed_url:%s\n", feed->feed_url));
         root = NULL;
         xmlSubstituteEntitiesDefaultValue = 0;
         doc = xml_parse_sux (content->str, content->len);
-	d(g_print("content:\n%s\n", content->str));
+	d("content:\n%s\n", content->str);
 	root = xmlDocGetRootElement(doc);
 
 	if ((doc != NULL && root != NULL)
@@ -3256,7 +3257,7 @@ generic_finish_feed(rfMessage *msg, gpointer user_data)
 		rf->cancel_all=1;
 #endif
 
-	d(g_print("taskbar_op_finish() queue:%d\n", rf->feed_queue));
+	d("taskbar_op_finish() queue:%d\n", rf->feed_queue);
 
 	if (rf->feed_queue) {
 		rf->feed_queue--;
@@ -3266,7 +3267,7 @@ generic_finish_feed(rfMessage *msg, gpointer user_data)
 	}
 
 	if (rf->feed_queue == 0) {
-		d(g_print("taskbar_op_finish()\n"));
+		d("taskbar_op_finish()\n");
 		taskbar_op_finish((gchar *)"main");
 		rf->autoupdate = FALSE;
 		farticle=0;
@@ -3464,7 +3465,7 @@ fetch_one_feed(gpointer key, gpointer value, gpointer user_data)
 	if (g_hash_table_lookup(rf->hre, lookup_key(key))
 		&& strlen(url)
 		&& !rf->cancel && !rf->import) {
-		d(g_print("\nFetching: %s..%s\n", url, (gchar *)key));
+		d("\nFetching: %s..%s\n", url, (gchar *)key);
 		rf->feed_queue++;
 
 		fetch_unblocking(
@@ -3516,8 +3517,8 @@ finish_website (SoupSession *soup_sess, SoupMessage *msg, gpointer user_data)
 	g_return_if_fail(rf->mozembed);
 
 	response = g_string_new_len(msg->response_body->data, msg->response_body->length);
-	d(g_print("browser full:%d\n", (int)response->len));
-	d(g_print("browser fill:%d\n", (int)browser_fill));
+	d("browser full:%d\n", (int)response->len);
+	d("browser fill:%d\n", (int)browser_fill);
 	if (!response->len) {
 		tmsg = g_strdup(_("Formatting error."));
 		browser_write(tmsg, strlen(tmsg), (gchar *)"file://");
@@ -3592,7 +3593,7 @@ print_comments(gchar *url, gchar *stream)
         root = NULL;
         xmlSubstituteEntitiesDefaultValue = 0;
         doc = xml_parse_sux (stream, strlen(stream));
-        d(g_print("content:\n%s\n", stream));
+        d("content:\n%s\n", stream);
         root = xmlDocGetRootElement(doc);
 
         if ((doc != NULL && root != NULL)
@@ -3615,7 +3616,7 @@ fetch_comments(gchar *url, EMFormatHTML *stream)
 	SoupSession *comm_sess = NULL;
 	gchar *uniqcomm;
 
-	d(g_print("\nFetching comments from: %s\n", url));
+	d("\nFetching comments from: %s\n", url);
 	uniqcomm = g_strdup_printf("COMMENT-%s", url);
 
 	fetch_unblocking(
@@ -3936,7 +3937,7 @@ check_update_feed_image(gchar *key)
 			ret =  TRUE;
 			goto out;
 		} else {
-			d(g_print("next favicon will be fetched in %lu seconds\n", FEED_IMAGE_TTL - remain));
+			d("next favicon will be fetched in %lu seconds\n", FEED_IMAGE_TTL - remain);
 			fclose(f);
 			ret = FALSE;
 		}
@@ -3972,7 +3973,7 @@ update_feed_image(RDF *r)
         if (!g_file_test(feed_dir, G_FILE_TEST_EXISTS))
             g_mkdir_with_parents (feed_dir, 0755);
         feed_file = g_strdup_printf("%s/%s.img", feed_dir, key);
-	d(g_print("feed_image() tmpurl:%s\n", feed_file));
+	d("feed_image() tmpurl:%s\n", feed_file);
         g_free(feed_dir);
         if (!g_file_test(feed_file, G_FILE_TEST_EXISTS)) {
 	if (image) {		//we need to validate image here with load_pixbuf
@@ -4176,9 +4177,9 @@ check_feed_folder(gchar *folder_name)
 	gchar *main_folder = lookup_main_folder();
 	gchar *real_folder = lookup_feed_folder(folder_name);
 	gchar *real_name = g_strdup_printf("%s/%s", main_folder, real_folder);
-	d(g_print("main_folder:%s\n", main_folder));
-	d(g_print("real_folder:%s\n", real_folder));
-	d(g_print("real_name:%s\n", real_name));
+	d("main_folder:%s\n", main_folder);
+	d("real_folder:%s\n", real_folder);
+	d("real_name:%s\n", real_name);
         mail_folder = camel_store_get_folder (store, real_name, 0, NULL);
 	base_folder = main_folder;
 	if (mail_folder == NULL) {
@@ -4207,7 +4208,7 @@ rss_delete_feed(gchar *full_path, gboolean folder)
 
 	store = rss_component_peek_local_store();
 	name = extract_main_folder(full_path);
-	d(g_print("name to delete:%s\n", name));
+	d("name to delete:'%s'\n", name);
 	if (!name)
 		return;
 	real_name = g_hash_table_lookup(rf->feed_folders, name);
@@ -4218,11 +4219,12 @@ rss_delete_feed(gchar *full_path, gboolean folder)
 	if (camel_exception_is_set (&ex)) {
 #if EVOLUTION_VERSION < 22904
 		e_error_run(NULL,
+			"mail:no-delete-folder", full_path, ex.desc, NULL);
 #else
 		e_alert_run_dialog_for_args(
 			e_shell_get_active_window (NULL),
-#endif
 			"mail:no-delete-folder", full_path, ex.desc, NULL);
+#endif
 		camel_exception_clear (&ex);
 	}
         //also remove status file
@@ -4244,8 +4246,10 @@ rss_delete_feed(gchar *full_path, gboolean folder)
 	tmp = g_strdup_printf("%s.fav", feed_name);
         unlink(tmp);
 	g_free(tmp);
-out:	if (folder)
+out:	if (folder) {
+		d("print folder:%s\n", real_name);
 		remove_feed_hash(real_name);
+	}
         delete_feed_folder_alloc(name);
 	g_free(name);
 	g_idle_add((GSourceFunc)store_redraw, GTK_TREE_VIEW(rf->treeview));
@@ -4256,7 +4260,7 @@ static void
 store_folder_deleted(CamelObject *o, void *event_data, void *data)
 {
 	CamelFolderInfo *info = event_data;
-	d(printf("Folder deleted '%s' full '%s'\n", info->name, info->full_name));
+	d("Folder deleted '%s' full '%s'\n", info->name, info->full_name);
 	rss_delete_feed(info->full_name, 1);
 }
 
@@ -4268,15 +4272,15 @@ store_folder_renamed(CamelObject *o, void *event_data, void *data)
 	gchar *main_folder = lookup_main_folder();
 	if (!g_ascii_strncasecmp(info->old_base, main_folder, strlen(main_folder))
 		|| !g_ascii_strncasecmp(info->old_base, OLD_FEEDS_FOLDER, strlen(OLD_FEEDS_FOLDER))) {
-		d(printf("Folder renamed to '%s' from '%s'\n", info->new->full_name, info->old_base));
+		d("Folder renamed to '%s' from '%s'\n", info->new->full_name, info->old_base);
 		if (!g_ascii_strncasecmp(main_folder, info->old_base, strlen(info->old_base))
 		|| !g_ascii_strncasecmp(OLD_FEEDS_FOLDER, info->old_base, strlen(info->old_base)))
 			update_main_folder(info->new->full_name);
 		else
 			if (0 == update_feed_folder(info->old_base, info->new->full_name, 1)) {
-				d(g_print("info->old_base:%s\n", info->old_base));
-				d(g_print("info->new->full_name:%s\n", info->new->full_name));
-				d(g_print("this is not a feed!!\n"));
+				d("info->old_base:%s\n", info->old_base);
+				d("info->new->full_name:%s\n", info->new->full_name);
+				d("this is not a feed!!\n");
 				rebase_feeds(info->old_base, info->new->full_name);
 			}
 		g_idle_add((GSourceFunc)store_redraw, GTK_TREE_VIEW(rf->treeview));
@@ -4309,8 +4313,8 @@ custom_update_articles(CDATA *cdata)
 		// check if we're enabled and no cancelation signal pending
 		// and no imports pending
 		if (g_hash_table_lookup(rf->hre, lookup_key(cdata->key)) && !rf->cancel && !rf->import) {
-			d(g_print("\nFetching: %s..%s\n",
-				(char *)g_hash_table_lookup(rf->hr, lookup_key(cdata->key)), (char *)cdata->key));
+			d("\nFetching: %s..%s\n",
+				(char *)g_hash_table_lookup(rf->hr, lookup_key(cdata->key)), (char *)cdata->key);
 			rf->feed_queue++;
 
 		fetch_unblocking(
@@ -4345,7 +4349,7 @@ custom_fetch_feed(gpointer key, gpointer value, gpointer user_data)
 
 	if (GPOINTER_TO_INT(g_hash_table_lookup(rf->hrupdate, lookup_key(key))) == 2
 	 && g_hash_table_lookup(rf->hre, lookup_key(key))) {
-		d(g_print("custom key:%s\n", (char *)key));
+		d("custom key:%s\n", (char *)key);
 		ttl = GPOINTER_TO_INT(g_hash_table_lookup(rf->hrttl, lookup_key(key)));
 		ttl_multiply = GPOINTER_TO_INT(g_hash_table_lookup(rf->hrttl_multiply, lookup_key(key)));
 		if (ttl) {
@@ -4496,7 +4500,7 @@ custom_feed_timeout(void)
 static void
 rss_online(CamelSession *o, void *event_data, void *data)
 {
-	d(g_print("Apoc, are we online?... Almost.\n"));
+	d("Apoc, are we online?... Almost.\n");
 	rf->online =  camel_session_is_online (o);
 }
 
@@ -5022,7 +5026,7 @@ e_plugin_lib_enable(EPlugin *ep, int enable)
 #endif
 			rss_soup_init();
 #if HAVE_DBUS
-			d(g_print("init_dbus()\n"));
+			d("init_dbus()\n");
 			/*D-BUS init*/
 			rf->bus = init_dbus ();
 #endif
@@ -5125,7 +5129,7 @@ create_mail(create_feed *CF)
 	g_free(tmp2);
 
 	addr = camel_internet_address_new();
-	d(g_print("date:%s\n", CF->date));
+	d("date:%s\n", CF->date);
 	camel_address_decode(CAMEL_ADDRESS(addr), author);
 	camel_mime_message_set_from(new, addr);
 	camel_object_unref(addr);
@@ -5399,7 +5403,7 @@ finish_image (SoupMessage *msg, CamelStream *user_data)
 finish_image (SoupSession *soup_sess, SoupMessage *msg, CamelStream *user_data)
 #endif
 {
-	d(g_print("finish_image() CODE:%d\n", msg->status_code));
+	d("CODE:%d\n", msg->status_code);
 	// we might need to handle more error codes here
 	if (503 != msg->status_code && //handle this timedly fasion
 	    404 != msg->status_code && //NOT FOUND
@@ -5440,7 +5444,7 @@ finish_create_icon (SoupMessage *msg, FEED_IMAGE *user_data)
 finish_create_icon (SoupSession *soup_sess, SoupMessage *msg, FEED_IMAGE *user_data)
 #endif
 {
-	d(g_print("finish_image(): status:%d, user_data:%s\n", msg->status_code, user_data->img_file));
+	d("finish_image(): status:%d, user_data:%s\n", msg->status_code, user_data->img_file);
 	if (404 != msg->status_code) {
 		CamelStream *feed_fs = camel_stream_fs_new_with_name(user_data->img_file,
 			O_RDWR|O_CREAT, 0666);
@@ -5673,7 +5677,7 @@ fetch_image_redraw(gchar *url, gchar *link, gpointer data)
 	camel_data_cache_set_expire_access(http_cache, 24*60*60*7);
 	stream = camel_data_cache_get(http_cache, HTTP_CACHE_PATH, tmpurl, NULL);
 	if (!stream) {
-		g_print("image cache MISS\n");
+		d("image cache MISS\n");
 		fi = g_new0(FEED_IMAGE, 1);
 		fi->http_cache = http_cache;
 		fi->url = g_strdup(tmpurl);
@@ -5690,7 +5694,7 @@ fetch_image_redraw(gchar *url, gchar *link, gpointer data)
 			goto error;
 		}
 	} else {
-		d(g_print("image cache HIT\n"));
+		d("image cache HIT\n");
 	}
 
 working:result = data_cache_path(http_cache, FALSE, HTTP_CACHE_PATH, tmpurl);
@@ -5722,7 +5726,7 @@ fetch_image(gchar *url, gchar *link)
 	} else {
 		tmpurl = g_strdup(url);
 	}
-	d(g_print("fetch_image() tmpurl:%s\n", tmpurl));
+	d("fetch_image() tmpurl:%s\n", tmpurl);
 	base_dir = rss_component_peek_base_directory();
 	feed_dir = g_build_path("/",
 				base_dir,
@@ -5737,10 +5741,10 @@ fetch_image(gchar *url, gchar *link)
 	g_free(feed_dir);
 	stream = camel_data_cache_get(http_cache, HTTP_CACHE_PATH, tmpurl, NULL);
 	if (!stream) {
-		d(g_print("image cache MISS\n"));
+		d("image cache MISS\n");
 		stream = camel_data_cache_add(http_cache, HTTP_CACHE_PATH, tmpurl, NULL);
 	} else
-		d(g_print("image cache HIT\n"));
+		d("image cache HIT\n");
 
 	fetch_unblocking(tmpurl,
 			       textcb,
@@ -5946,7 +5950,7 @@ delete_oldest_article(CamelFolder *folder, guint unread)
 				}
 			}
 		}
-		d(g_print("uid:%d j:%d/%d, date:%s, imax:%d\n", i, j, q, ctime((const time_t *)min_date), imax));
+		d("uid:%d j:%d/%d, date:%s, imax:%d\n", i, j, q, ctime((const time_t *)min_date), imax);
 out:		camel_message_info_free(info);
 	}
 	camel_folder_freeze(folder);
@@ -5976,7 +5980,7 @@ get_feed_age(RDF *r, gpointer name)
 	guint del_unread, del_feed;
 
 	gchar *real_folder = lookup_feed_folder(name);
-	d(g_print("Cleaning folder: %s\n", real_folder));
+	d("Cleaning folder: %s\n", real_folder);
 
         real_name = g_strdup_printf("%s/%s", lookup_main_folder(), real_folder);
 	if (!(folder = camel_store_get_folder (store, real_name, 0, NULL)))
@@ -6062,7 +6066,7 @@ get_feed_age(RDF *r, gpointer name)
 	}
 	total = camel_folder_get_message_count (folder);
 	camel_object_unref (folder);
-	d(g_print("delete => remaining total:%d\n", total));
+	d("delete => remaining total:%d\n", total);
 fail:	g_free(real_name);
 	inhibit_read = 0;
 }
diff --git a/src/rss.h b/src/rss.h
index da53c7a..7bbd288 100644
--- a/src/rss.h
+++ b/src/rss.h
@@ -19,6 +19,7 @@
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
+#include "debug.h"
 
 #if HAVE_DBUS
 #include <dbus/dbus-glib.h>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]