--- savedstatuses.c 2008-03-31 13:21:24.000000000 -0400 +++ pidgin-2.4.1/libpurple/savedstatuses.c 2008-05-20 22:00:05.000000000 -0400 @@ -65,9 +65,9 @@ char *message; /** The timestamp when this saved status was created. This must be unique. */ - time_t creation_time; + unsigned int creation_time; - time_t lastused; + unsigned int lastused; unsigned int usage_count; @@ -143,17 +143,19 @@ static void set_creation_time(PurpleSavedStatus *status, time_t creation_time) { + unsigned int time; + g_return_if_fail(status != NULL); + /* Since the hash is int based, make sure time_t is an int */ + time = (unsigned int)creation_time; /* Avoid using 0 because it's an invalid hash key */ - status->creation_time = creation_time != 0 ? creation_time : 1; + status->creation_time = time != 0 ? time : 1; while (g_hash_table_lookup(creation_times, &status->creation_time) != NULL) status->creation_time++; - g_hash_table_insert(creation_times, - &status->creation_time, - status); + g_hash_table_insert(creation_times, &status->creation_time, status); } /** @@ -172,9 +174,9 @@ { const PurpleSavedStatus *saved_status_a = a; const PurpleSavedStatus *saved_status_b = b; - time_t time_a = saved_status_a->lastused + + unsigned int time_a = saved_status_a->lastused + (MIN(saved_status_a->usage_count, 10) * 86400); - time_t time_b = saved_status_b->lastused + + unsigned int time_b = saved_status_b->lastused + (MIN(saved_status_b->usage_count, 10) * 86400); if (time_a > time_b) return -1; @@ -194,8 +196,7 @@ { GList *l, *next; PurpleSavedStatus *saved_status, *current_status; - int count; - time_t creation_time; + unsigned int count, creation_time; current_status = purple_savedstatus_get_current(); @@ -285,10 +286,10 @@ xmlnode_set_attrib(node, "transient", "true"); } - snprintf(buf, sizeof(buf), "%lu", status->creation_time); + snprintf(buf, sizeof(buf), "%u", status->creation_time); xmlnode_set_attrib(node, "created", buf); - snprintf(buf, sizeof(buf), "%lu", status->lastused); + snprintf(buf, sizeof(buf), "%u", status->lastused); xmlnode_set_attrib(node, "lastused", buf); snprintf(buf, sizeof(buf), "%u", status->usage_count); @@ -482,15 +483,15 @@ /* Read the creation time */ attrib = xmlnode_get_attrib(status, "created"); - set_creation_time(ret, (attrib != NULL ? atol(attrib) : 0)); + set_creation_time(ret, (time_t) (attrib != NULL ? atol(attrib) : 0)); /* Read the last used time */ attrib = xmlnode_get_attrib(status, "lastused"); - ret->lastused = (attrib != NULL ? atol(attrib) : 0); + ret->lastused = (unsigned int)(attrib != NULL ? atol(attrib) : 0); /* Read the usage count */ attrib = xmlnode_get_attrib(status, "usage_count"); - ret->usage_count = (attrib != NULL ? atol(attrib) : 0); + ret->usage_count = (unsigned int)(attrib != NULL ? atol(attrib) : 0); /* Read the primitive status type */ node = xmlnode_get_child(status, "state"); @@ -707,7 +708,7 @@ void purple_savedstatus_delete_by_status(PurpleSavedStatus *status) { - time_t creation_time, current, idleaway; + unsigned int creation_time, current, idleaway; g_return_if_fail(status != NULL); @@ -801,11 +802,11 @@ PurpleSavedStatus * purple_savedstatus_get_default() { - int creation_time; + unsigned int creation_time; PurpleSavedStatus *saved_status = NULL; creation_time = purple_prefs_get_int("/purple/savedstatus/default"); - + if (creation_time != 0) saved_status = g_hash_table_lookup(creation_times, &creation_time); @@ -828,7 +829,7 @@ PurpleSavedStatus * purple_savedstatus_get_idleaway() { - int creation_time; + unsigned int creation_time; PurpleSavedStatus *saved_status = NULL; creation_time = purple_prefs_get_int("/purple/savedstatus/idleaway"); @@ -907,7 +908,7 @@ PurpleSavedStatus * purple_savedstatus_get_startup() { - int creation_time; + unsigned int creation_time; PurpleSavedStatus *saved_status = NULL; creation_time = purple_prefs_get_int("/purple/savedstatus/startup"); @@ -952,11 +953,15 @@ { GList *iter; PurpleSavedStatus *status; + unsigned int time; + + /* Make sure the time is an integer so it works with the hash table */ + time = (unsigned int) creation_time; for (iter = saved_statuses; iter != NULL; iter = iter->next) { status = (PurpleSavedStatus *)iter->data; - if (status->creation_time == creation_time) + if (status->creation_time == time) return status; } @@ -965,7 +970,7 @@ PurpleSavedStatus * purple_savedstatus_find_transient_by_type_and_message(PurpleStatusPrimitive type, - const char *message) + const char *message) { GList *iter; PurpleSavedStatus *status; @@ -1048,7 +1053,7 @@ return saved_status->message; } -time_t +unsigned int purple_savedstatus_get_creation_time(const PurpleSavedStatus *saved_status) { g_return_val_if_fail(saved_status != NULL, 0); @@ -1109,7 +1114,7 @@ g_return_if_fail(saved_status != NULL); /* Make sure our list of saved statuses remains sorted */ - saved_status->lastused = time(NULL); + saved_status->lastused = (unsigned int) time(NULL); saved_status->usage_count++; saved_statuses = g_list_remove(saved_statuses, saved_status); saved_statuses = g_list_insert_sorted(saved_statuses, saved_status, saved_statuses_sort_func); --- savedstatuses.h 2008-03-31 13:21:24.000000000 -0400 +++ pidgin-2.4.1/libpurple/savedstatuses.h 2008-05-20 22:00:05.000000000 -0400 @@ -334,7 +334,7 @@ * * @return The timestamp when this saved status was created. */ -time_t purple_savedstatus_get_creation_time(const PurpleSavedStatus *saved_status); +unsigned int purple_savedstatus_get_creation_time(const PurpleSavedStatus *saved_status); /** * Determine if a given saved status has "substatuses,"