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; }
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; }