/* We can not close the folder in term of shuting down the connection but if we were the selected mailbox/newsgroup we deselect ourself. */ static int nntp_mailbox_close (mu_mailbox_t mailbox) { m_nntp_t m_nntp = mailbox->data; f_nntp_t f_nntp = m_nntp->f_nntp; int i; mu_monitor_wrlock (mailbox->monitor); /* Destroy the nntp posts and ressources associated to them. */ for (i = 0; i < m_nntp->messages_count; i++) { if (m_nntp->messages[i]) { msg_nntp_t msg_nntp = m_nntp->messages[i]; if (msg_nntp->message) mu_message_destroy (&(msg_nntp->message), msg_nntp); } free (m_nntp->messages[i]); } if (m_nntp->messages) free (m_nntp->messages); m_nntp->messages = NULL; m_nntp->messages_count = 0; m_nntp->number = 0; m_nntp->low = 0; m_nntp->high = 0; mu_monitor_unlock (mailbox->monitor); /* Deselect. */ if (m_nntp != f_nntp->selected) f_nntp->selected = NULL; /* Decrement the ref count. */ return mu_folder_close (mailbox->folder); }
int main (int argc, char **argv) { int i; int rc; mu_folder_t folder; char *fname = NULL; mu_set_program_name (argv[0]); mu_registrar_record (mu_imap_record); mu_registrar_record (mu_imaps_record); if (argc == 1) { usage (); exit (0); } for (i = 1; i < argc; i++) { if (strncmp (argv[i], "debug=", 6) == 0) mu_debug_parse_spec (argv[i] + 6); else if (strncmp (argv[i], "url=", 4) == 0) fname = argv[i] + 4; else break; } if (!fname) { mu_error ("URL not specified"); exit (1); } rc = mu_folder_create (&folder, fname); if (rc) { mu_diag_funcall (MU_DIAG_ERROR, "mu_folder_create", fname, rc); return 1; } rc = mu_folder_open (folder, MU_STREAM_READ); if (rc) { mu_diag_funcall (MU_DIAG_ERROR, "mu_folder_open", fname, rc); return 1; } while (i < argc) { char *comargs[2]; struct command *cmd; cmd = find_command (argv[i]); if (!cmd) { mu_error ("unknown command %s\n", argv[i]); break; } i++; if (i + cmd->nargs > argc) { mu_error ("not enough arguments for %s", cmd->verb); break; } memcpy (comargs, argv + i, cmd->nargs * sizeof (comargs[0])); i += cmd->nargs; cmd->handler (folder, comargs); } mu_folder_close (folder); mu_folder_destroy (&folder); return 0; }