aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-url.c
diff options
context:
space:
mode:
authorNot Zed <NotZed@HelixCode.com>2000-05-31 06:35:40 +0800
committerMichael Zucci <zucchi@src.gnome.org>2000-05-31 06:35:40 +0800
commit631dda8ae0829b1fb7b503348de541e3fe2027c5 (patch)
treeb809428b7c6e01cf6bce0513b7ab20f436b0352a /camel/camel-url.c
parenta9ddc24118d91139784cb0ce99789a739fdc5978 (diff)
downloadgsoc2013-evolution-631dda8ae0829b1fb7b503348de541e3fe2027c5.tar.gz
gsoc2013-evolution-631dda8ae0829b1fb7b503348de541e3fe2027c5.tar.zst
gsoc2013-evolution-631dda8ae0829b1fb7b503348de541e3fe2027c5.zip
Init filter_from to NULL, for exception case. (mbox_get_message_by_uid):
2000-05-30 Not Zed <NotZed@HelixCode.com> * providers/mbox/camel-mbox-folder.c (mbox_append_message): Init filter_from to NULL, for exception case. (mbox_get_message_by_uid): Cast off_t to long int for diagnostics. * camel-url.c (camel_url_hash): Hash funciton for using camel url's as hash keys. (camel_url_equal): equal function for same. * camel-session.c (camel_session_finalise): Free cached services. (camel_session_init): Init service cache. (service_cache_remove): destroy callback to remove a service from the cache. * camel-store.c (get_folder_internal): Remove the extra ref of the folder. That seems the right behaviour ...? (camel_store_get_type): Doh, actually call store init, so the cache works. (cache_folder): strdup the folder name! no wonder it never found it again. svn path=/trunk/; revision=3298
Diffstat (limited to 'camel/camel-url.c')
-rw-r--r--camel/camel-url.c56
1 files changed, 54 insertions, 2 deletions
diff --git a/camel/camel-url.c b/camel/camel-url.c
index 96721bda24..c0707dcbb1 100644
--- a/camel/camel-url.c
+++ b/camel/camel-url.c
@@ -43,8 +43,7 @@
*
* protocol://user;AUTH=mech:password@host:port/path
*
- * The protocol, followed by a ":" is required. If it is followed by
- * "//", there must be an "authority" containing at least a host,
+ * The protocol, followed by a ":" is required. If it is followed by * "//", there must be an "authority" containing at least a host,
* which ends at the end of the string or at the next "/". If there
* is an "@" in the authority, there must be a username before it,
* and the host comes after it. The authmech, password, and port are
@@ -292,3 +291,56 @@ camel_url_decode (char *part)
}
*d = '\0';
}
+
+static void
+add_hash(guint *hash, char *s)
+{
+ if (s)
+ *hash ^= g_str_hash(s);
+}
+
+guint camel_url_hash (const void *v)
+{
+ const CamelURL *u = v;
+ guint hash = 0;
+
+ add_hash(&hash, u->protocol);
+ add_hash(&hash, u->user);
+ add_hash(&hash, u->authmech);
+ add_hash(&hash, u->passwd);
+ add_hash(&hash, u->host);
+ add_hash(&hash, u->path);
+ hash ^= u->port;
+ return hash;
+}
+
+static int
+check_equal(char *s1, char *s2)
+{
+ if (s1 == NULL) {
+ if (s2 == NULL)
+ return TRUE;
+ else
+ return FALSE;
+ }
+ if (s2 == NULL) {
+ if (s1 == NULL)
+ return TRUE;
+ else
+ return FALSE;
+ }
+ return strcmp(s1, s2) == 0;
+}
+
+int camel_url_equal(const void *v, const void *v2)
+{
+ const CamelURL *u1 = v, *u2 = v2;
+
+ return check_equal(u1->protocol, u2->protocol)
+ && check_equal(u1->user, u2->user)
+ && check_equal(u1->authmech, u2->authmech)
+ && check_equal(u1->passwd, u2->passwd)
+ && check_equal(u1->host, u2->host)
+ && check_equal(u1->path, u2->path)
+ && u1->port == u2->port;
+}