/[imapfilter]/imapfilter/request.c
ViewVC logotype

Diff of /imapfilter/request.c

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

revision 1.22 by lefcha, Wed Jul 3 17:04:50 2002 UTC revision 1.23 by lefcha, Mon Jul 8 17:59:57 2002 UTC
# Line 420  int apply_action(char *mesgs, unsigned i Line 420  int apply_action(char *mesgs, unsigned i
420   */   */
421  int action_delete(char *mesgs, char *args)  int action_delete(char *mesgs, char *args)
422  {  {
423      char *tok, *mcp, *m;      char *tok, *mcp, *m, *cm;
424        
425      action_list(mesgs, args);      action_list(mesgs, args);
426        
427        cm = convert_messages(mesgs);
428    
429      convert_messages(mesgs);      m = mcp = xstrdup(cm);
         
     m = mcp = xstrdup(mesgs);  
430            
431      while ((tok = strsep(&m, " ")))      while ((tok = strsep(&m, " ")))
432          server_response(&sockpri, imap_store(&sockpri, tok, "\\Deleted"));          server_response(&sockpri, imap_store(&sockpri, tok, "\\Deleted"));
433    
434        xfree(cm);
435      xfree(mcp);      xfree(mcp);
436    
437    
438      return 0;      return 0;
439  }  }
440    
# Line 443  int action_delete(char *mesgs, char *arg Line 445  int action_delete(char *mesgs, char *arg
445  int action_copy(char *mesgs, char *destmbox, char *args)  int action_copy(char *mesgs, char *destmbox, char *args)
446  {  {
447      int r = 0;      int r = 0;
448      char *tok = NULL, *mcp, *m;      char *tok = NULL, *mcp, *m, *cm;
449            
450      action_list(mesgs, args);      action_list(mesgs, args);
451            
452      convert_messages(mesgs);      cm = convert_messages(mesgs);
453        
454      m = mcp = xstrdup(mesgs);      m = mcp = xstrdup(cm);
455        
456      while ((tok = strsep(&m, " "))) {      while ((tok = strsep(&m, " "))) {
457          if ((r = copy_response(&sockpri,          if ((r = copy_response(&sockpri,
458                                 imap_copy(&sockpri, tok, destmbox))) ==                                 imap_copy(&sockpri, tok, destmbox))) ==
# Line 460  int action_copy(char *mesgs, char *destm Line 462  int action_copy(char *mesgs, char *destm
462                  r = copy_response(&sockpri, imap_copy(&sockpri, tok, destmbox));                  r = copy_response(&sockpri, imap_copy(&sockpri, tok, destmbox));
463              }              }
464      }      }
465        
466        xfree(cm);
467      xfree(mcp);      xfree(mcp);
468    
469      return r;      return r;
# Line 646  unsigned int count_messages(char *mesgs) Line 649  unsigned int count_messages(char *mesgs)
649   * Convert messages with contiguous sequence number to the corresponding   * Convert messages with contiguous sequence number to the corresponding
650   * number range, eg. 1 2 3 5 7 8 --> 1:3 5 7:8   * number range, eg. 1 2 3 5 7 8 --> 1:3 5 7:8
651   */   */
652  void convert_messages(char *mesgs)  char *convert_messages(char *mesgs)
653  {  {
654      unsigned int maxlen;      unsigned int maxlen;
655      unsigned int start, end, tmp;      unsigned int start, end, tmp;
656      char *cp, *tail, *m;      char *c, *cp, *tail;
657            
658      start = end = tmp = 0;      start = end = tmp = 0;
659      maxlen = strlen(mesgs) + 1;      maxlen = strlen(mesgs) + 1;
660      tail = NULL;      tail = NULL;
661    
662      cp = xstrdup(mesgs);      c = cp = xstrdup(mesgs);
     m = mesgs;  
663    
664      start = (unsigned int) strtoul(cp, &tail, 10);      start = (unsigned int) strtoul(mesgs, &tail, 10);
665      end = start;      end = start;
666    
667      do {      do {
# Line 672  void convert_messages(char *mesgs) Line 674  void convert_messages(char *mesgs)
674              end++;              end++;
675          else {          else {
676              if (start == end) {              if (start == end) {
677                  xstrncpy(m, ultostr(start, 10), maxlen);                  xstrncpy(c, ultostr(start, 10), maxlen);
678                  m += strlen(m);                  c += strlen(c);
679              } else {              } else {
680                  xstrncpy(m, ultostr(start, 10), maxlen - 1);                  xstrncpy(c, ultostr(start, 10), maxlen - 1);
681                  m += strlen(m);                  c += strlen(c);
682                  *m = ':';                  *c = ':';
683                  *++m = 0;                  *++c = 0;
684                  xstrncpy(m, ultostr(end, 10), maxlen);                  xstrncpy(c, ultostr(end, 10), maxlen);
685                  m += strlen(m);                  c += strlen(c);
686              }              }
687    
688              if (tail && m - mesgs < maxlen) {              if (tail && c - cp < maxlen) {
689                  *m = ' ';                  *c = ' ';
690                  *++m = 0;                  *++c = 0;
691              }              }
692              start = end = tmp;              start = end = tmp;
693          }          }
694      } while (tmp);      } while (tmp);
695    
696      xfree(cp);      return cp;
697  }  }

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.23

webmaster@linux.gr
ViewVC Help
Powered by ViewVC 1.1.26