treat manually specified box list the same as one coming from Patterns
This commit is contained in:
		
							parent
							
								
									540adbb8fd
								
							
						
					
					
						commit
						c6f08b8f17
					
				
					 3 changed files with 37 additions and 25 deletions
				
			
		| 
						 | 
					@ -422,6 +422,7 @@ void ATTR_PRINTFLIKE(1, 2) error( const char *, ... );
 | 
				
			||||||
void ATTR_PRINTFLIKE(1, 2) sys_error( const char *, ... );
 | 
					void ATTR_PRINTFLIKE(1, 2) sys_error( const char *, ... );
 | 
				
			||||||
void flushn( void );
 | 
					void flushn( void );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void add_string_list_n( string_list_t **list, const char *str, int len );
 | 
				
			||||||
void add_string_list( string_list_t **list, const char *str );
 | 
					void add_string_list( string_list_t **list, const char *str );
 | 
				
			||||||
void free_string_list( string_list_t *list );
 | 
					void free_string_list( string_list_t *list );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										48
									
								
								src/main.c
									
										
									
									
									
								
							
							
						
						
									
										48
									
								
								src/main.c
									
										
									
									
									
								
							| 
						 | 
					@ -196,9 +196,9 @@ typedef struct {
 | 
				
			||||||
	store_t *ctx[2];
 | 
						store_t *ctx[2];
 | 
				
			||||||
	string_list_t *boxes[2], *cboxes, *chanptr;
 | 
						string_list_t *boxes[2], *cboxes, *chanptr;
 | 
				
			||||||
	const char *names[2];
 | 
						const char *names[2];
 | 
				
			||||||
	char **argv, *boxlist, *boxp;
 | 
						char **argv;
 | 
				
			||||||
	int oind, ret, multiple, all, list, ops[2], state[2];
 | 
						int oind, ret, multiple, all, list, ops[2], state[2];
 | 
				
			||||||
	char done, skip, cben;
 | 
						char done, skip, cben, boxlist;
 | 
				
			||||||
} main_vars_t;
 | 
					} main_vars_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define AUX &mvars->t[t]
 | 
					#define AUX &mvars->t[t]
 | 
				
			||||||
| 
						 | 
					@ -514,7 +514,7 @@ sync_chans( main_vars_t *mvars, int ent )
 | 
				
			||||||
	channel_conf_t *chan;
 | 
						channel_conf_t *chan;
 | 
				
			||||||
	store_t *store;
 | 
						store_t *store;
 | 
				
			||||||
	string_list_t *mbox, *sbox, **mboxp, **sboxp;
 | 
						string_list_t *mbox, *sbox, **mboxp, **sboxp;
 | 
				
			||||||
	char *channame;
 | 
						char *channame, *boxp, *nboxp;
 | 
				
			||||||
	int t;
 | 
						int t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!mvars->cben)
 | 
						if (!mvars->cben)
 | 
				
			||||||
| 
						 | 
					@ -525,6 +525,7 @@ sync_chans( main_vars_t *mvars, int ent )
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for (;;) {
 | 
						for (;;) {
 | 
				
			||||||
		mvars->boxlist = 0;
 | 
							mvars->boxlist = 0;
 | 
				
			||||||
 | 
							mvars->boxes[M] = mvars->boxes[S] = mvars->cboxes = 0;
 | 
				
			||||||
		if (!mvars->all) {
 | 
							if (!mvars->all) {
 | 
				
			||||||
			if (mvars->chanptr)
 | 
								if (mvars->chanptr)
 | 
				
			||||||
				channame = mvars->chanptr->string;
 | 
									channame = mvars->chanptr->string;
 | 
				
			||||||
| 
						 | 
					@ -538,8 +539,8 @@ sync_chans( main_vars_t *mvars, int ent )
 | 
				
			||||||
				channame = mvars->argv[mvars->oind];
 | 
									channame = mvars->argv[mvars->oind];
 | 
				
			||||||
			  gotgrp: ;
 | 
								  gotgrp: ;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if ((mvars->boxlist = strchr( channame, ':' )))
 | 
								if ((boxp = strchr( channame, ':' )))
 | 
				
			||||||
				*mvars->boxlist++ = 0;
 | 
									*boxp++ = 0;
 | 
				
			||||||
			for (chan = channels; chan; chan = chan->next)
 | 
								for (chan = channels; chan; chan = chan->next)
 | 
				
			||||||
				if (!strcmp( chan->name, channame ))
 | 
									if (!strcmp( chan->name, channame ))
 | 
				
			||||||
					goto gotchan;
 | 
										goto gotchan;
 | 
				
			||||||
| 
						 | 
					@ -548,6 +549,25 @@ sync_chans( main_vars_t *mvars, int ent )
 | 
				
			||||||
			goto gotnone;
 | 
								goto gotnone;
 | 
				
			||||||
		  gotchan:
 | 
							  gotchan:
 | 
				
			||||||
			mvars->chan = chan;
 | 
								mvars->chan = chan;
 | 
				
			||||||
 | 
								if (boxp) {
 | 
				
			||||||
 | 
									mvars->boxlist = 1;
 | 
				
			||||||
 | 
									for (;;) {
 | 
				
			||||||
 | 
										nboxp = strpbrk( boxp, ",\n" );
 | 
				
			||||||
 | 
										if (nboxp) {
 | 
				
			||||||
 | 
											t = nboxp - boxp;
 | 
				
			||||||
 | 
											*nboxp++ = 0;
 | 
				
			||||||
 | 
										} else {
 | 
				
			||||||
 | 
											t = strlen( boxp );
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										if (t)
 | 
				
			||||||
 | 
											add_string_list_n( &mvars->cboxes, boxp, t );
 | 
				
			||||||
 | 
										else
 | 
				
			||||||
 | 
											add_string_list_n( &mvars->cboxes, "INBOX", 5 );
 | 
				
			||||||
 | 
										if (!nboxp)
 | 
				
			||||||
 | 
											break;
 | 
				
			||||||
 | 
										boxp = nboxp;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		merge_actions( mvars->chan, mvars->ops, XOP_HAVE_TYPE, OP_MASK_TYPE, OP_MASK_TYPE );
 | 
							merge_actions( mvars->chan, mvars->ops, XOP_HAVE_TYPE, OP_MASK_TYPE, OP_MASK_TYPE );
 | 
				
			||||||
		merge_actions( mvars->chan, mvars->ops, XOP_HAVE_CREATE, OP_CREATE, 0 );
 | 
							merge_actions( mvars->chan, mvars->ops, XOP_HAVE_CREATE, OP_CREATE, 0 );
 | 
				
			||||||
| 
						 | 
					@ -555,7 +575,6 @@ sync_chans( main_vars_t *mvars, int ent )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		mvars->state[M] = mvars->state[S] = ST_FRESH;
 | 
							mvars->state[M] = mvars->state[S] = ST_FRESH;
 | 
				
			||||||
		info( "Channel %s\n", mvars->chan->name );
 | 
							info( "Channel %s\n", mvars->chan->name );
 | 
				
			||||||
		mvars->boxes[M] = mvars->boxes[S] = mvars->cboxes = 0;
 | 
					 | 
				
			||||||
		mvars->skip = mvars->cben = 0;
 | 
							mvars->skip = mvars->cben = 0;
 | 
				
			||||||
		for (t = 0; t < 2; t++) {
 | 
							for (t = 0; t < 2; t++) {
 | 
				
			||||||
			mvars->drv[t] = mvars->chan->stores[t]->driver;
 | 
								mvars->drv[t] = mvars->chan->stores[t]->driver;
 | 
				
			||||||
| 
						 | 
					@ -574,9 +593,8 @@ sync_chans( main_vars_t *mvars, int ent )
 | 
				
			||||||
		if (mvars->state[M] != ST_OPEN || mvars->state[S] != ST_OPEN)
 | 
							if (mvars->state[M] != ST_OPEN || mvars->state[S] != ST_OPEN)
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (mvars->boxlist)
 | 
							if (!mvars->boxlist && mvars->chan->patterns) {
 | 
				
			||||||
			mvars->boxp = mvars->boxlist;
 | 
								mvars->boxlist = 1;
 | 
				
			||||||
		else if (mvars->chan->patterns) {
 | 
					 | 
				
			||||||
			mvars->boxes[M] = filter_boxes( mvars->ctx[M]->boxes, mvars->chan->patterns );
 | 
								mvars->boxes[M] = filter_boxes( mvars->ctx[M]->boxes, mvars->chan->patterns );
 | 
				
			||||||
			mvars->boxes[S] = filter_boxes( mvars->ctx[S]->boxes, mvars->chan->patterns );
 | 
								mvars->boxes[S] = filter_boxes( mvars->ctx[S]->boxes, mvars->chan->patterns );
 | 
				
			||||||
			for (mboxp = &mvars->boxes[M]; (mbox = *mboxp); ) {
 | 
								for (mboxp = &mvars->boxes[M]; (mbox = *mboxp); ) {
 | 
				
			||||||
| 
						 | 
					@ -600,18 +618,6 @@ sync_chans( main_vars_t *mvars, int ent )
 | 
				
			||||||
		mvars->done = mvars->cben = 0;
 | 
							mvars->done = mvars->cben = 0;
 | 
				
			||||||
	  syncmlx:
 | 
						  syncmlx:
 | 
				
			||||||
		if (mvars->boxlist) {
 | 
							if (mvars->boxlist) {
 | 
				
			||||||
			if ((mvars->names[S] = strsep( &mvars->boxp, ",\n" ))) {
 | 
					 | 
				
			||||||
				if (!*mvars->names[S])
 | 
					 | 
				
			||||||
					mvars->names[S] = 0;
 | 
					 | 
				
			||||||
				if (!mvars->list) {
 | 
					 | 
				
			||||||
					mvars->names[M] = mvars->names[S];
 | 
					 | 
				
			||||||
					sync_boxes( mvars->ctx, mvars->names, mvars->chan, done_sync, mvars );
 | 
					 | 
				
			||||||
					goto syncw;
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				puts( nz( mvars->names[S], "INBOX" ) );
 | 
					 | 
				
			||||||
				goto syncmlx;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		} else if (mvars->chan->patterns) {
 | 
					 | 
				
			||||||
			if ((mbox = mvars->cboxes)) {
 | 
								if ((mbox = mvars->cboxes)) {
 | 
				
			||||||
				mvars->cboxes = mbox->next;
 | 
									mvars->cboxes = mbox->next;
 | 
				
			||||||
				if (!mvars->list) {
 | 
									if (!mvars->list) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										13
									
								
								src/util.c
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								src/util.c
									
										
									
									
									
								
							| 
						 | 
					@ -146,16 +146,21 @@ sys_error( const char *msg, ... )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
add_string_list( string_list_t **list, const char *str )
 | 
					add_string_list_n( string_list_t **list, const char *str, int len )
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	string_list_t *elem;
 | 
						string_list_t *elem;
 | 
				
			||||||
	int len;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	len = strlen( str );
 | 
					 | 
				
			||||||
	elem = nfmalloc( sizeof(*elem) + len );
 | 
						elem = nfmalloc( sizeof(*elem) + len );
 | 
				
			||||||
	elem->next = *list;
 | 
						elem->next = *list;
 | 
				
			||||||
	*list = elem;
 | 
						*list = elem;
 | 
				
			||||||
	memcpy( elem->string, str, len + 1 );
 | 
						memcpy( elem->string, str, len );
 | 
				
			||||||
 | 
						elem->string[len] = 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					add_string_list( string_list_t **list, const char *str )
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						add_string_list_n( list, str, strlen( str ) );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue