avoid sending duplicate success result for extended menu_add_item client command

This commit is contained in:
marschap
2007-10-09 16:23:30 +00:00
parent be13863a02
commit fb3deae51b
+12 -9
View File
@@ -94,7 +94,6 @@ menu_add_item_func(Client *c, int argc, char **argv)
Menu *menu = NULL; Menu *menu = NULL;
MenuItem *item; MenuItem *item;
MenuItemType itemtype; MenuItemType itemtype;
char **argv_set = NULL;
debug(RPT_DEBUG, "%s(Client [%d], %s, %s)", debug(RPT_DEBUG, "%s(Client [%d], %s, %s)",
__FUNCTION__, c->sock, argv[1], argv[2]); __FUNCTION__, c->sock, argv[1], argv[2]);
@@ -190,17 +189,17 @@ menu_add_item_func(Client *c, int argc, char **argv)
} }
menu_add_item(menu, item); menu_add_item(menu, item);
menuscreen_inform_item_modified(menu); menuscreen_inform_item_modified(menu);
sock_send_string(c->sock, "success\n");
/* are there any options (starting with '-')? /* are there any options (starting with '-')?
* - create a temporary argv for menu_set_item() call */ * call menu_set_item() with a temporarily allocated argv */
if ((argc > 5) || (argv[4][0] == '-')) { if ((argc > 5) || (argv[4][0] == '-')) {
// menu_add_item <menuid> <newitemid> <type> [<text>] // menu_add_item <menuid> <newitemid> <type> [<text>]
// menu_set_item <menuid> <itemid> {<option>}+ // menu_set_item <menuid> <itemid> {<option>}+
int i, j; int i, j;
argv_set = malloc(argc * sizeof(char *)); char **tmp_argv = malloc(argc * sizeof(char *));
assert(argv_set);
argv_set[0] = "menu_set_item"; assert(tmp_argv);
tmp_argv[0] = "menu_set_item";
for (i = j = 1; i < argc; i++) { for (i = j = 1; i < argc; i++) {
/* skip "type" */ /* skip "type" */
if (i == 3) if (i == 3)
@@ -209,11 +208,15 @@ menu_add_item_func(Client *c, int argc, char **argv)
if ((i == 4) && (argv[4][0] != '-')) if ((i == 4) && (argv[4][0] != '-'))
continue; continue;
argv_set[j++] = argv[i]; tmp_argv[j++] = argv[i];
} }
menu_set_item_func(c, j, argv_set); // call menu_set_item() and let it send result to client
free(argv_set); menu_set_item_func(c, j, tmp_argv);
free(tmp_argv);
} }
else // make sure the client gets informed
sock_send_string(c->sock, "success\n");
return 0; return 0;
} }