@@ -99,15 +99,6 @@ static struct imap_server_conf server = {
99
99
NULL , /* auth_method */
100
100
};
101
101
102
- #define NIL (void *)0x1
103
- #define LIST (void *)0x2
104
-
105
- struct imap_list {
106
- struct imap_list * next , * child ;
107
- char * val ;
108
- int len ;
109
- };
110
-
111
102
struct imap_socket {
112
103
int fd [2 ];
113
104
SSL * ssl ;
@@ -124,7 +115,6 @@ struct imap_cmd;
124
115
125
116
struct imap {
126
117
int uidnext ; /* from SELECT responses */
127
- struct imap_list * ns_personal , * ns_other , * ns_shared ; /* NAMESPACE info */
128
118
unsigned caps , rcaps ; /* CAPABILITY results */
129
119
/* command queue */
130
120
int nexttag , num_in_progress , literal_pending ;
@@ -554,34 +544,9 @@ static int imap_exec_m(struct imap_store *ctx, struct imap_cmd_cb *cb,
554
544
}
555
545
}
556
546
557
- static int is_atom (struct imap_list * list )
558
- {
559
- return list && list -> val && list -> val != NIL && list -> val != LIST ;
560
- }
561
-
562
- static int is_list (struct imap_list * list )
563
- {
564
- return list && list -> val == LIST ;
565
- }
566
-
567
- static void free_list (struct imap_list * list )
568
- {
569
- struct imap_list * tmp ;
570
-
571
- for (; list ; list = tmp ) {
572
- tmp = list -> next ;
573
- if (is_list (list ))
574
- free_list (list -> child );
575
- else if (is_atom (list ))
576
- free (list -> val );
577
- free (list );
578
- }
579
- }
580
-
581
- static int parse_imap_list_l (char * * sp , struct imap_list * * curp , int level )
547
+ static int skip_imap_list_l (char * * sp , int level )
582
548
{
583
- struct imap_list * cur ;
584
- char * s = * sp , * p ;
549
+ char * s = * sp ;
585
550
586
551
for (;;) {
587
552
while (isspace ((unsigned char )* s ))
@@ -590,36 +555,23 @@ static int parse_imap_list_l(char **sp, struct imap_list **curp, int level)
590
555
s ++ ;
591
556
break ;
592
557
}
593
- * curp = cur = xmalloc (sizeof (* cur ));
594
- curp = & cur -> next ;
595
- cur -> val = NULL ; /* for clean bail */
596
558
if (* s == '(' ) {
597
559
/* sublist */
598
560
s ++ ;
599
- cur -> val = LIST ;
600
- if (parse_imap_list_l (& s , & cur -> child , level + 1 ))
561
+ if (skip_imap_list_l (& s , level + 1 ))
601
562
goto bail ;
602
563
} else if (* s == '"' ) {
603
564
/* quoted string */
604
565
s ++ ;
605
- p = s ;
606
566
for (; * s != '"' ; s ++ )
607
567
if (!* s )
608
568
goto bail ;
609
- cur -> len = s - p ;
610
569
s ++ ;
611
- cur -> val = xmemdupz (p , cur -> len );
612
570
} else {
613
571
/* atom */
614
- p = s ;
615
572
for (; * s && !isspace ((unsigned char )* s ); s ++ )
616
573
if (level && * s == ')' )
617
574
break ;
618
- cur -> len = s - p ;
619
- if (cur -> len == 3 && !memcmp ("NIL" , p , 3 ))
620
- cur -> val = NIL ;
621
- else
622
- cur -> val = xmemdupz (p , cur -> len );
623
575
}
624
576
625
577
if (!level )
@@ -628,22 +580,15 @@ static int parse_imap_list_l(char **sp, struct imap_list **curp, int level)
628
580
goto bail ;
629
581
}
630
582
* sp = s ;
631
- * curp = NULL ;
632
583
return 0 ;
633
584
634
585
bail :
635
- * curp = NULL ;
636
586
return -1 ;
637
587
}
638
588
639
- static struct imap_list * parse_list (char * * sp )
589
+ static void skip_list (char * * sp )
640
590
{
641
- struct imap_list * head ;
642
-
643
- if (!parse_imap_list_l (sp , & head , 0 ))
644
- return head ;
645
- free_list (head );
646
- return NULL ;
591
+ skip_imap_list_l (sp , 0 );
647
592
}
648
593
649
594
static void parse_capability (struct imap * imap , char * cmd )
@@ -722,9 +667,10 @@ static int get_cmd_result(struct imap_store *ctx, struct imap_cmd *tcmd)
722
667
}
723
668
724
669
if (!strcmp ("NAMESPACE" , arg )) {
725
- imap -> ns_personal = parse_list (& cmd );
726
- imap -> ns_other = parse_list (& cmd );
727
- imap -> ns_shared = parse_list (& cmd );
670
+ /* rfc2342 NAMESPACE response. */
671
+ skip_list (& cmd ); /* Personal mailboxes */
672
+ skip_list (& cmd ); /* Others' mailboxes */
673
+ skip_list (& cmd ); /* Shared mailboxes */
728
674
} else if (!strcmp ("OK" , arg ) || !strcmp ("BAD" , arg ) ||
729
675
!strcmp ("NO" , arg ) || !strcmp ("BYE" , arg )) {
730
676
if ((resp = parse_response_code (ctx , NULL , cmd )) != RESP_OK )
@@ -844,9 +790,6 @@ static void imap_close_server(struct imap_store *ictx)
844
790
imap_exec (ictx , NULL , "LOGOUT" );
845
791
socket_shutdown (& imap -> buf .sock );
846
792
}
847
- free_list (imap -> ns_personal );
848
- free_list (imap -> ns_other );
849
- free_list (imap -> ns_shared );
850
793
free (imap );
851
794
}
852
795
0 commit comments