|
|
|
|
@ -690,17 +690,17 @@ INLINE void ng_sdp_attr_manipulations(ng_parser_ctx_t *ctx, bencode_item_t *valu
|
|
|
|
|
switch (__csh_lookup(&command_type)) {
|
|
|
|
|
|
|
|
|
|
case CSH_LOOKUP("substitute"):
|
|
|
|
|
call_ng_flags_list(NULL, command_value, call_ng_flags_str_pair_ht, call_ng_flags_item_pair_ht,
|
|
|
|
|
call_ng_flags_list(ctx, command_value, call_ng_flags_str_pair_ht, call_ng_flags_item_pair_ht,
|
|
|
|
|
&sm->subst_commands);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case CSH_LOOKUP("add"):
|
|
|
|
|
call_ng_flags_str_list(NULL, command_value, call_ng_flags_esc_str_list, &sm->add_commands);
|
|
|
|
|
call_ng_flags_str_list(ctx, command_value, call_ng_flags_esc_str_list, &sm->add_commands);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
/* CMD_REM commands */
|
|
|
|
|
case CSH_LOOKUP("remove"):
|
|
|
|
|
call_ng_flags_str_list(NULL, command_value, call_ng_flags_str_ht, &sm->rem_commands);
|
|
|
|
|
call_ng_flags_str_list(ctx, command_value, call_ng_flags_str_ht, &sm->rem_commands);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
@ -795,9 +795,10 @@ static void call_ng_flags_list(ng_parser_ctx_t *ctx, bencode_item_t *list,
|
|
|
|
|
void (*item_callback)(ng_parser_ctx_t *, bencode_item_t *, helper_arg),
|
|
|
|
|
helper_arg arg)
|
|
|
|
|
{
|
|
|
|
|
const ng_parser_t *parser = ctx->parser;
|
|
|
|
|
str s;
|
|
|
|
|
if (list->type != BENCODE_LIST) {
|
|
|
|
|
if (bencode_get_str(list, &s)) {
|
|
|
|
|
if (!parser->is_list(list)) {
|
|
|
|
|
if (parser->get_str(list, &s)) {
|
|
|
|
|
str token;
|
|
|
|
|
while (str_token_sep(&token, &s, ','))
|
|
|
|
|
str_callback(ctx, &token, arg);
|
|
|
|
|
@ -806,14 +807,7 @@ static void call_ng_flags_list(ng_parser_ctx_t *ctx, bencode_item_t *list,
|
|
|
|
|
ilog(LOG_DEBUG, "Ignoring non-list non-string value");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
for (bencode_item_t *it = list->child; it; it = it->sibling) {
|
|
|
|
|
if (bencode_get_str(it, &s))
|
|
|
|
|
str_callback(ctx, &s, arg);
|
|
|
|
|
else if (item_callback)
|
|
|
|
|
item_callback(ctx, it, arg);
|
|
|
|
|
else
|
|
|
|
|
ilog(LOG_DEBUG, "Ignoring non-string value in list");
|
|
|
|
|
}
|
|
|
|
|
parser->list_iter(ctx, list, str_callback, item_callback, arg);
|
|
|
|
|
}
|
|
|
|
|
static void call_ng_flags_str_list(ng_parser_ctx_t *ctx, bencode_item_t *list,
|
|
|
|
|
void (*callback)(ng_parser_ctx_t *ctx, str *, helper_arg), helper_arg arg)
|
|
|
|
|
|