21 |
|
|
22 |
const char *argp_program_version = "rmm (" PACKAGE_STRING ")"; |
const char *argp_program_version = "rmm (" PACKAGE_STRING ")"; |
23 |
static char doc[] = "GNU MH rmm"; |
static char doc[] = "GNU MH rmm"; |
24 |
static char args_doc[] = ""; |
static char args_doc[] = "[messages]"; |
25 |
|
|
26 |
/* GNU options */ |
/* GNU options */ |
27 |
static struct argp_option options[] = { |
static struct argp_option options[] = { |
45 |
case 'f': |
case 'f': |
46 |
current_folder = arg; |
current_folder = arg; |
47 |
break; |
break; |
48 |
|
|
49 |
default: |
default: |
50 |
return 1; |
return 1; |
51 |
} |
} |
52 |
return 0; |
return 0; |
53 |
} |
} |
54 |
|
|
55 |
int |
void |
56 |
member (size_t num, size_t *msglist, size_t msgcnt) |
rmm (mailbox_t mbox, message_t msg, size_t num, void *data) |
57 |
{ |
{ |
58 |
size_t i; |
attribute_t attr; |
59 |
|
message_get_attribute (msg, &attr); |
60 |
for (i = 0; i < msgcnt; i++) |
attribute_set_deleted (attr); |
|
if (msglist[i] == num) |
|
|
return 1; |
|
|
return 0; |
|
|
} |
|
|
|
|
|
int |
|
|
rmm (mailbox_t mbox, size_t msgcnt, size_t *msglist) |
|
|
{ |
|
|
size_t i, total = 0; |
|
|
|
|
|
mailbox_messages_count (mbox, &total); |
|
|
for (i = 1; i <= total; i++) |
|
|
{ |
|
|
message_t msg; |
|
|
size_t num; |
|
|
int rc; |
|
|
|
|
|
if ((rc = mailbox_get_message (mbox, i, &msg)) != 0) |
|
|
{ |
|
|
mh_error ("can't get message %d: %s", i, mu_errstring (rc)); |
|
|
return 1; |
|
|
} |
|
|
|
|
|
if ((rc = mh_message_number (msg, &num)) != 0) |
|
|
{ |
|
|
mh_error ("can't get sequence number for message %d: %s", |
|
|
i, mu_errstring (rc)); |
|
|
return 1; |
|
|
} |
|
|
|
|
|
if (member (num, msglist, msgcnt)) |
|
|
{ |
|
|
attribute_t attr; |
|
|
message_get_attribute (msg, &attr); |
|
|
attribute_set_deleted (attr); |
|
|
} |
|
|
} |
|
|
|
|
61 |
return 0; |
return 0; |
62 |
} |
} |
63 |
|
|
66 |
{ |
{ |
67 |
int index = 0; |
int index = 0; |
68 |
mailbox_t mbox; |
mailbox_t mbox; |
69 |
size_t msgcnt = 0, *msglist = NULL; |
mh_msgset_t msgset; |
70 |
int status; |
int status; |
71 |
|
|
72 |
mh_argp_parse (argc, argv, options, mh_option, args_doc, doc, |
mh_argp_parse (argc, argv, options, mh_option, args_doc, doc, |
73 |
opt_handler, NULL, &index); |
opt_handler, NULL, &index); |
74 |
|
|
75 |
mbox = mh_open_folder (); |
mbox = mh_open_folder (current_folder); |
76 |
|
|
77 |
if (index < argc) |
mh_msgset_parse (mbox, &msgset, argc - index, argv + index); |
|
{ |
|
|
size_t i; |
|
|
|
|
|
msgcnt = argc - index + 1; |
|
|
msglist = calloc (argc - index + 1, sizeof(*msglist)); |
|
|
for (i = 0; index < argc; index++, i++) |
|
|
{ |
|
|
char *p = NULL; |
|
|
msglist[i] = strtol (argv[index], &p, 0); |
|
|
if (msglist[i] <= 0 || *p) |
|
|
{ |
|
|
mh_error ("bad message list `%s'", argv[index]); |
|
|
exit (1); |
|
|
} |
|
|
} |
|
|
} |
|
|
else |
|
|
{ |
|
|
if (current_message == 0) |
|
|
{ |
|
|
mh_error ("no cur message"); |
|
|
exit (1); |
|
|
} |
|
|
msglist = calloc (1, sizeof(*msglist)); |
|
|
msglist[0] = current_message; |
|
|
current_message = 0; |
|
|
msgcnt = 1; |
|
|
} |
|
78 |
|
|
79 |
status = rmm (mbox, msgcnt, msglist); |
status = mh_iterate (mbox, &msgset, rmm, NULL); |
80 |
|
|
81 |
mailbox_expunge (mbox); |
mailbox_expunge (mbox); |
82 |
mailbox_close (mbox); |
mailbox_close (mbox); |