aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--e-util/ChangeLog7
-rw-r--r--e-util/e-pilot-map.c73
2 files changed, 59 insertions, 21 deletions
diff --git a/e-util/ChangeLog b/e-util/ChangeLog
index ccfaac772e..072e9bab22 100644
--- a/e-util/ChangeLog
+++ b/e-util/ChangeLog
@@ -1,5 +1,12 @@
2001-10-26 JP Rosevear <jpr@ximian.com>
+ * e-pilot-map.c (map_sax_start_element): add archived records
+ with pilot id of 0
+ (map_write_foreach): use the uid map for writing
+ (e_pilot_map_write): write using the uid map
+
+2001-10-26 JP Rosevear <jpr@ximian.com>
+
* e-pilot-map.c (e_pilot_map_insert): free up old memory first
(e_pilot_map_destroy): free allocated memory when destroying
diff --git a/e-util/e-pilot-map.c b/e-util/e-pilot-map.c
index 4aa1c4388d..48f2b7193d 100644
--- a/e-util/e-pilot-map.c
+++ b/e-util/e-pilot-map.c
@@ -90,9 +90,11 @@ map_sax_start_element (void *data, const xmlChar *name,
attrs = ++val;
}
-
- if (uid && pid != 0)
- e_pilot_map_insert (map, pid, uid, archived);
+
+ g_assert (uid != NULL);
+ g_assert (pid != 0 || archived);
+
+ e_pilot_map_insert (map, pid, uid, archived);
}
}
@@ -101,28 +103,30 @@ map_write_foreach (gpointer key, gpointer value, gpointer data)
{
xmlNodePtr root = data;
xmlNodePtr mnode;
- unsigned long *pid = key;
- EPilotMapPidNode *pnode = value;
+ char *uid = key;
+ EPilotMapUidNode *unode = value;
char *pidstr;
mnode = xmlNewChild (root, NULL, "map", NULL);
-
- pidstr = g_strdup_printf ("%lu", *pid);
- xmlSetProp (mnode, "pilot_id", pidstr);
- g_free (pidstr);
- xmlSetProp (mnode, "uid", pnode->uid);
+ xmlSetProp (mnode, "uid", uid);
- if (pnode->archived)
+ if (unode->archived) {
xmlSetProp (mnode, "archived", "1");
- else
+ } else {
+ pidstr = g_strdup_printf ("%d", unode->pid);
+ xmlSetProp (mnode, "pilot_id", pidstr);
+ g_free (pidstr);
xmlSetProp (mnode, "archived", "0");
+ }
}
gboolean
e_pilot_map_pid_is_archived (EPilotMap *map, guint32 pid)
{
EPilotMapPidNode *pnode;
+
+ g_return_val_if_fail (map != NULL, FALSE);
pnode = g_hash_table_lookup (map->pid_map, &pid);
@@ -136,6 +140,9 @@ gboolean
e_pilot_map_uid_is_archived (EPilotMap *map, const char *uid)
{
EPilotMapUidNode *unode;
+
+ g_return_val_if_fail (map != NULL, FALSE);
+ g_return_val_if_fail (uid != NULL, FALSE);
unode = g_hash_table_lookup (map->uid_map, uid);
@@ -149,17 +156,24 @@ void
e_pilot_map_insert (EPilotMap *map, guint32 pid, const char *uid, gboolean archived)
{
char *new_uid;
- guint32 *new_pid = g_new (guint32, 1);
- EPilotMapPidNode *pnode = g_new0 (EPilotMapPidNode, 1);
- EPilotMapUidNode *unode = g_new0 (EPilotMapUidNode, 1);
+ guint32 *new_pid;
+ EPilotMapPidNode *pnode;
+ EPilotMapUidNode *unode;
gpointer key, value;
-
+
+ g_return_if_fail (map != NULL);
+ g_return_if_fail (uid != NULL);
+
+ new_pid = g_new (guint32, 1);
*new_pid = pid;
+
new_uid = g_strdup (uid);
+ pnode = g_new0 (EPilotMapPidNode, 1);
pnode->uid = new_uid;
pnode->archived = archived;
+ unode = g_new0 (EPilotMapUidNode, 1);
unode->pid = pid;
unode->archived = archived;
@@ -180,10 +194,12 @@ e_pilot_map_insert (EPilotMap *map, guint32 pid, const char *uid, gboolean archi
void
e_pilot_map_remove_by_pid (EPilotMap *map, guint32 pid)
-{
+{
EPilotMapPidNode *pnode;
EPilotMapUidNode *unode;
+ g_return_if_fail (map != NULL);
+
pnode = g_hash_table_lookup (map->pid_map, &pid);
if (!pnode)
return;
@@ -203,6 +219,9 @@ e_pilot_map_remove_by_uid (EPilotMap *map, const char *uid)
EPilotMapPidNode *pnode;
EPilotMapUidNode *unode;
+ g_return_if_fail (map != NULL);
+ g_return_if_fail (uid != NULL);
+
unode = g_hash_table_lookup (map->uid_map, uid);
if (!unode)
return;
@@ -221,6 +240,9 @@ guint32
e_pilot_map_lookup_pid (EPilotMap *map, const char *uid)
{
EPilotMapUidNode *unode = NULL;
+
+ g_return_val_if_fail (map != NULL, 0);
+ g_return_val_if_fail (uid != NULL, 0);
unode = g_hash_table_lookup (map->uid_map, uid);
@@ -234,6 +256,8 @@ const char *
e_pilot_map_lookup_uid (EPilotMap *map, guint32 pid)
{
EPilotMapPidNode *pnode = NULL;
+
+ g_return_val_if_fail (map != NULL, NULL);
pnode = g_hash_table_lookup (map->pid_map, &pid);
@@ -247,10 +271,14 @@ int
e_pilot_map_read (const char *filename, EPilotMap **map)
{
xmlSAXHandler handler;
- EPilotMap *new_map = g_new0 (EPilotMap, 1);
+ EPilotMap *new_map;
+
+ g_return_val_if_fail (filename != NULL, -1);
+ g_return_val_if_fail (map != NULL, -1);
*map = NULL;
-
+ new_map = g_new0 (EPilotMap, 1);
+
memset (&handler, 0, sizeof (xmlSAXHandler));
handler.startElement = map_sax_start_element;
@@ -274,7 +302,8 @@ e_pilot_map_write (const char *filename, EPilotMap *map)
{
xmlDocPtr doc;
int ret;
-
+
+ g_return_val_if_fail (filename != NULL, -1);
g_return_val_if_fail (map != NULL, -1);
doc = xmlNewDoc ("1.0");
@@ -286,7 +315,7 @@ e_pilot_map_write (const char *filename, EPilotMap *map)
map->since = time (NULL);
map_set_node_timet (doc->root, "timestamp", map->since);
- g_hash_table_foreach (map->pid_map, map_write_foreach, doc->root);
+ g_hash_table_foreach (map->uid_map, map_write_foreach, doc->root);
/* Write the file */
xmlSetDocCompressMode (doc, 0);
@@ -313,6 +342,8 @@ foreach_remove (gpointer key, gpointer value, gpointer data)
void
e_pilot_map_destroy (EPilotMap *map)
{
+ g_return_if_fail (map != NULL);
+
g_hash_table_foreach_remove (map->pid_map, foreach_remove, NULL);
g_hash_table_foreach_remove (map->uid_map, foreach_remove, NULL);