diff --git a/src/base/commands.c b/src/base/commands.c index 5bbd9cfaefa964ad9371e89b4799696eea05b968..d952cfcba1b50f17374aa53e4484355a5a5693b2 100644 --- a/src/base/commands.c +++ b/src/base/commands.c @@ -730,31 +730,39 @@ bool command_find(struct lkt_state *srv, size_t c, char *args[LKT_MESSAGE_ARGS_MAX], long continuation, database_search_init_func init) { - long count; - struct lkt_uri *find_uri = lkt_uri_new(); - struct lkt_search *search = - database_search_new(srv, c, (int)continuation, FUNCTION_POINTER(lkt_callback_send_row_v2)); - database_search_set_uri(search, find_uri); - database_search_set_name(search, args[0]); - RETURN_UNLESS(args[0], "Invalid argument", false); /* Just an id */ + long count; if (!args[1] && (count = strtol(args[0], NULL, 0))) return command_findid(srv, c, args[0]); /* With an URI */ + struct lkt_uri *find_uri = lkt_uri_new(); + struct lkt_search *search = + database_search_new(srv, c, (int)continuation, FUNCTION_POINTER(lkt_callback_send_row_v2)); + database_search_set_name(search, args[0]); + database_search_set_uri(search, find_uri); + if (!lkt_uri_from(find_uri, args)) { /* Try from idx 1, in case of playlust searches */ LOG_DEBUG("COMMAND", "URI may not starts at idx 0, may be because of " "playlist search. At idx 0, value was '%s'", args[0]); - RETURN_UNLESS(lkt_uri_from(find_uri, &args[1]), "Failed to create the uri", false); + unless (lkt_uri_from(find_uri, &args[1])) { + lkt_uri_free(find_uri); + LOG_ERROR("COMMAND", "Failed to create the uri"); + return false; + } + } + + unless (init(srv->db, search)) { + LOG_ERROR("COMMAND", "Failed to init the search structure"); + lkt_uri_free(find_uri); + return false; } - database_search_set_uri(search, find_uri); - RETURN_UNLESS(init(srv->db, search), "Failed to init search", false); const bool ret = iter_search__(search); lkt_uri_free(find_uri); return ret;