/[mailutils]/mailutils/mh/rmm.c
ViewVC logotype

Diff of /mailutils/mh/rmm.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by gray, Tue Sep 17 15:05:21 2002 UTC revision 1.2 by gray, Wed Sep 18 17:40:26 2002 UTC
# Line 21  Line 21 
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[] = {
# Line 45  opt_handler (int key, char *arg, void *u Line 45  opt_handler (int key, char *arg, void *u
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    
# Line 103  main (int argc, char **argv) Line 66  main (int argc, char **argv)
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);

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26