Example #1
0
static void
store_listed( int sts, void *aux )
{
	MVARS(aux)
	string_list_t *box;

	switch (sts) {
	case DRV_CANCELED:
		return;
	case DRV_OK:
		mvars->ctx[t]->listed = 1;
		if (mvars->ctx[t]->conf->flat_delim) {
			for (box = mvars->ctx[t]->boxes; box; box = box->next) {
				if (map_name( box->string, mvars->ctx[t]->conf->flat_delim, '/' ) < 0) {
					error( "Error: flattened mailbox name '%s' contains canonical hierarchy delimiter\n", box->string );
					mvars->ret = mvars->skip = 1;
				}
			}
		}
		if (mvars->ctx[t]->conf->map_inbox)
			add_string_list( &mvars->ctx[t]->boxes, mvars->ctx[t]->conf->map_inbox );
		break;
	default:
		mvars->ret = mvars->skip = 1;
		break;
	}
	mvars->state[t] = ST_OPEN;
	sync_chans( mvars, E_OPEN );
}
Example #2
0
// <var>         ->      empty | <type> ID <mvars> ;
APTNode* VAR(void)
{
	//HERE
	if ((strcmp(currentTok.sym, "INTtk") == 0) || (strcmp(currentTok.sym, "FLOATtk") == 0)) {
		//BUILD <TYPE> NODE
		APTNode* typeNode = TYPE();
		if (strcmp(currentTok.sym, "IDtk") == 0)
		{
			APTNode* idNode = createIdAPTNode("<IDtk>", currentTok.selection, NULL, currentTok.line);

			scanner();

			//BUILD <MVARS> NODE
			APTNode* mvarsNode = MVARS();
			if (strcmp(currentTok.sym, "SEMICOLtk") == 0)
			{
				scanner();

				//BUILD <VAR> NODE
				APTNode* varNode = createNonIdAPTNode("<VARtk>");
				addChildNode(varNode, typeNode);
				addChildNode(varNode, idNode);
				addChildNode(varNode, mvarsNode);

				return varNode;
			} else errMsg("SEMICOLtk");
		} else errMsg("IDtk");
	} else return NULL;
}
Example #3
0
// <mvars>     ->     empty | , ID <mvars>
APTNode* MVARS(void)
{
	//HERE
	if (strcmp(currentTok.sym, "COMMAtk") == 0)
	{
		scanner();
		if (strcmp(currentTok.sym, "IDtk") == 0)
		{
			//BUILD <ID> NODE
			APTNode* idNode = createIdAPTNode("<IDtk>", currentTok.selection, NULL, currentTok.line);

			scanner();

			//BUILD CHILD <MVARS> NODE
			APTNode* childMvarsNode = MVARS();

			//BUILD PARENT <MVARS> NODE
			APTNode* parentMvarsNode = createNonIdAPTNode("<MVARS>");
			addChildNode(parentMvarsNode, idNode);
			addChildNode(parentMvarsNode, childMvarsNode);

			return parentMvarsNode;
		} else errMsg("IDtk");
	} else return NULL;  // MVARS -> empty
}
Example #4
0
static void
store_bad( void *aux )
{
	MVARS(aux)

	mvars->drv[t]->cancel_store( mvars->ctx[t] );
	mvars->ret = mvars->skip = 1;
	mvars->state[t] = ST_CLOSED;
	sync_chans( mvars, E_OPEN );
}
Example #5
0
static void
store_opened( store_t *ctx, void *aux )
{
	MVARS(aux)
	string_list_t *cpat;
	int flags;

	if (!ctx) {
		mvars->ret = mvars->skip = 1;
		mvars->state[t] = ST_CLOSED;
		sync_chans( mvars, E_OPEN );
		return;
	}
	mvars->ctx[t] = ctx;
	if (!mvars->skip && !mvars->boxlist && mvars->chan->patterns && !ctx->listed) {
		for (flags = 0, cpat = mvars->chan->patterns; cpat; cpat = cpat->next) {
			const char *pat = cpat->string;
			if (*pat != '!') {
				/* Partial matches like "INB*" or even "*" are not considered,
				 * except implicity when the INBOX lives under Path. */
				if (!memcmp( pat, "INBOX", 5 )) {
					char c = pat[5];
					if (!c) {
						/* User really wants the INBOX. */
						flags |= LIST_INBOX;
					} else if (c == '/') {
						/* Flattened sub-folders of INBOX actually end up in Path. */
						if (ctx->conf->flat_delim)
							flags |= LIST_PATH;
						else
							flags |= LIST_INBOX;
					} else {
						/* User may not want the INBOX after all ... */
						flags |= LIST_PATH;
						/* ... but maybe he does.
						 * The flattened sub-folder case is implicitly covered by the previous line. */
						if (c == '*' || c == '%')
							flags |= LIST_INBOX;
					}
				} else {
					flags |= LIST_PATH;
				}
			}
		}
		set_bad_callback( ctx, store_bad, AUX );
		mvars->drv[t]->list( ctx, flags, store_listed, AUX );
	} else {
		mvars->state[t] = ST_OPEN;
		sync_chans( mvars, E_OPEN );
	}
}