From ab318a91925aa31a10e0b225d2ef7fd9b0fa9a4c Mon Sep 17 00:00:00 2001 From: Not Zed Date: Thu, 5 Feb 2004 05:14:04 +0000 Subject: ** See bug #53553. 2004-02-05 Not Zed ** See bug #53553. * camel-provider.c (camel_provider_init): changed to return a hashtable of url protocols to CamelProviderModule structs, rather than simple strings. * camel-session.c (get_provider): if we load a provider module, mark it as loaded. (ensure_loaded): Check the module loaded flag before trying to load it. * providers/local/libcamellocal.urls: Remove spoold from the list, since it doesn't exist anymore. Actually fixes #53553, the rest is to robustify the code. 2004-02-05 Not Zed * camel-session.c (CS_CLASS): dont typecheck cast. * camel-store.c (camel_vjunk_folder_new): removed, use vtrash_new(junk). (setup_special): changed to get_special, with a type now, and dont add vtrash folders to the sources. (get_trash, get_junk): down to 1 liners, call get_special * camel-vtrash-folder.c (CF_CLASS): dont use cast typecheck macros here, makes debugging easier and removes redundant checks. (camel_vtrash_folder_init): dont set flags here. (camel_vtrash_folder_new): takes a new argument, type, for junk folders too, removed name arg (taken from type). (vtrash_transfer_messages_to): parameterise flag processing. svn path=/trunk/; revision=24625 --- camel/camel-provider.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'camel/camel-provider.c') diff --git a/camel/camel-provider.c b/camel/camel-provider.c index 321b3077cd..ccbb286275 100644 --- a/camel/camel-provider.c +++ b/camel/camel-provider.c @@ -65,7 +65,8 @@ camel_provider_init (void) DIR *dir; struct dirent *d; char *p, *name, buf[80]; - + CamelProviderModule *m; + providers = g_hash_table_new (camel_strcase_hash, camel_strcase_equal); dir = opendir (CAMEL_PROVIDERDIR); @@ -93,17 +94,24 @@ camel_provider_init (void) p = strrchr (name, '.'); strcpy (p, ".so"); + + m = g_malloc0(sizeof(*m)); + m->path = name; + while ((fgets (buf, sizeof (buf), fp))) { buf[sizeof (buf) - 1] = '\0'; p = strchr (buf, '\n'); if (p) *p = '\0'; - if (*buf) - g_hash_table_insert (providers, g_strdup (buf), g_strdup (name)); + if (*buf) { + char *protocol = g_strdup(buf); + + m->types = g_slist_prepend(m->types, protocol); + g_hash_table_insert(providers, protocol, m); + } } - - g_free (name); + fclose (fp); } -- cgit v1.2.3