コード例 #1
0
static int
envelope_decode_addresses (CamelIMAP4Engine *engine, char **addrlist, CamelException *ex)
{
	camel_imap4_token_t token;
	GString *addrs;

	if (camel_imap4_engine_next_token (engine, &token, ex) == -1)
		return -1;

	if (token.token == CAMEL_IMAP4_TOKEN_NIL) {
		*addrlist = NULL;
		return 0;
	} else if (token.token != '(') {
		camel_imap4_utils_set_unexpected_token_error (ex, engine, &token);
		return -1;
	}

	addrs = g_string_new ("");

	do {
		if (camel_imap4_engine_next_token (engine, &token, ex) == -1) {
			g_string_free (addrs, TRUE);
			return -1;
		}

		if (token.token == '(') {
			camel_imap4_stream_unget_token (engine->istream, &token);

			if (envelope_decode_address (engine, addrs, ex) == -1) {
				g_string_free (addrs, TRUE);
				return -1;
			}
		} else if (token.token == ')') {
			break;
		} else {
			camel_imap4_utils_set_unexpected_token_error (ex, engine, &token);
			return -1;
		}
	} while (1);

	*addrlist = addrs->str;
	g_string_free (addrs, FALSE);

	return 0;
}
コード例 #2
0
static int
envelope_decode_addresses (SpruceIMAPEngine *engine, char **addrlist, GError **err)
{
	spruce_imap_token_t token;
	GString *addrs;
	
	if (spruce_imap_engine_next_token (engine, &token, err) == -1)
		return -1;
	
	if (token.token == SPRUCE_IMAP_TOKEN_NIL) {
		*addrlist = NULL;
		return 0;
	} else if (token.token != '(') {
		spruce_imap_utils_set_unexpected_token_error (err, engine, &token);
		return -1;
	}
	
	addrs = g_string_new ("");
	
	do {
		if (spruce_imap_engine_next_token (engine, &token, err) == -1) {
			g_string_free (addrs, TRUE);
			return -1;
		}
		
		if (token.token == '(') {
			spruce_imap_stream_unget_token (engine->istream, &token);
			
			if (envelope_decode_address (engine, addrs, err) == -1) {
				g_string_free (addrs, TRUE);
				return -1;
			}
		} else if (token.token == ')') {
			break;
		} else {
			spruce_imap_utils_set_unexpected_token_error (err, engine, &token);
			return -1;
		}
	} while (1);
	
	*addrlist = addrs->str;
	g_string_free (addrs, FALSE);
	
	return 0;
}