{
gchar *file;
MimeInfo *mimeinfo, *encinfo;
- MimeInfo * decrypted;
-
+
g_return_if_fail(msginfo != NULL);
mimeinfo = procmime_scan_message(msginfo);
while ((encinfo = find_encrypted_part(mimeinfo)) != NULL) {
debug_print("decrypting message part\n");
- decrypted = privacy_mimeinfo_decrypt(encinfo);
- if (decrypted == NULL) {
- break;
- }
- else if (procmime_mimeinfo_parent(decrypted) == NULL) {
- procmime_mimeinfo_free_all(mimeinfo);
- mimeinfo = decrypted;
+ if (privacy_mimeinfo_decrypt(encinfo) < 0)
break;
- }
}
-
+
file = procmsg_get_message_file_path(msginfo);
if (!file) {
g_warning("can't get message file path.\n");
return FALSE;
}
-static MimeInfo * decrypt(MimeInfo *mimeinfo, PrivacySystem *system)
+static gint decrypt(MimeInfo *mimeinfo, PrivacySystem *system)
{
MimeInfo *decryptedinfo, *parentinfo;
gint childnumber;
- g_return_val_if_fail(system->decrypt != NULL, NULL);
+ g_return_val_if_fail(system->decrypt != NULL, -1);
decryptedinfo = system->decrypt(mimeinfo);
if (decryptedinfo == NULL)
- return NULL;
+ return -1;
parentinfo = procmime_mimeinfo_parent(mimeinfo);
- if (parentinfo != NULL) {
- childnumber = g_node_child_index(parentinfo->node, mimeinfo);
-
- procmime_mimeinfo_free_all(mimeinfo);
-
- g_node_insert(parentinfo->node, childnumber,
- decryptedinfo->node);
- }
- return decryptedinfo;
+ childnumber = g_node_child_index(parentinfo->node, mimeinfo);
+
+ procmime_mimeinfo_free_all(mimeinfo);
+
+ g_node_insert(parentinfo->node, childnumber, decryptedinfo->node);
+
+ return 0;
}
-MimeInfo * privacy_mimeinfo_decrypt(MimeInfo *mimeinfo)
+gint privacy_mimeinfo_decrypt(MimeInfo *mimeinfo)
{
GSList *cur;
- g_return_val_if_fail(mimeinfo != NULL, NULL);
+ g_return_val_if_fail(mimeinfo != NULL, FALSE);
for(cur = systems; cur != NULL; cur = g_slist_next(cur)) {
PrivacySystem *system = (PrivacySystem *) cur->data;
return decrypt(mimeinfo, system);
}
- return NULL;
+ return -1;
}