diff options
Diffstat (limited to '')
-rw-r--r-- | src/DatabaseCommands.cxx | 6 | ||||
-rw-r--r-- | src/locate.c | 33 | ||||
-rw-r--r-- | src/locate.h | 26 |
3 files changed, 36 insertions, 29 deletions
diff --git a/src/DatabaseCommands.cxx b/src/DatabaseCommands.cxx index 6c6d8965a..913e338dc 100644 --- a/src/DatabaseCommands.cxx +++ b/src/DatabaseCommands.cxx @@ -227,9 +227,9 @@ handle_list(struct client *client, int argc, char *argv[]) return COMMAND_RETURN_ERROR; } - conditionals = locate_item_list_new(1); - conditionals->items[0].tag = TAG_ARTIST; - conditionals->items[0].needle = g_strdup(argv[2]); + conditionals = + locate_item_list_new_single((unsigned)TAG_ARTIST, + argv[2]); } else { conditionals = locate_item_list_parse(argv + 2, argc - 2, false); diff --git a/src/locate.c b/src/locate.c index 6a7002f2e..e966747fd 100644 --- a/src/locate.c +++ b/src/locate.c @@ -31,6 +31,24 @@ #define LOCATE_TAG_FILE_KEY_OLD "filename" #define LOCATE_TAG_ANY_KEY "any" +/* struct used for search, find, list queries */ +struct locate_item { + int8_t tag; + /* what we are looking for */ + char *needle; +}; + +/** + * An array of struct locate_item objects. + */ +struct locate_item_list { + /** number of items */ + unsigned length; + + /** this is a variable length array */ + struct locate_item items[1]; +}; + int locate_parse_type(const char *str) { @@ -74,18 +92,27 @@ locate_item_list_free(struct locate_item_list *list) g_free(list); } -struct locate_item_list * +static struct locate_item_list * locate_item_list_new(unsigned length) { struct locate_item_list *list = - g_malloc0(sizeof(*list) - sizeof(list->items[0]) + - length * sizeof(list->items[0])); + g_malloc(sizeof(*list) - sizeof(list->items[0]) + + length * sizeof(list->items[0])); list->length = length; return list; } struct locate_item_list * +locate_item_list_new_single(unsigned tag, const char *needle) +{ + struct locate_item_list *list = locate_item_list_new(1); + list->items[0].tag = tag; + list->items[0].needle = g_strdup(needle); + return list; +} + +struct locate_item_list * locate_item_list_parse(char *argv[], unsigned argc, bool fold_case) { if (argc == 0 || argc % 2 != 0) diff --git a/src/locate.h b/src/locate.h index 830ca219e..f6057e140 100644 --- a/src/locate.h +++ b/src/locate.h @@ -28,36 +28,16 @@ #define LOCATE_TAG_FILE_TYPE TAG_NUM_OF_ITEM_TYPES+10 #define LOCATE_TAG_ANY_TYPE TAG_NUM_OF_ITEM_TYPES+20 +struct locate_item_list; struct song; -/* struct used for search, find, list queries */ -struct locate_item { - int8_t tag; - /* what we are looking for */ - char *needle; -}; - -/** - * An array of struct locate_item objects. - */ -struct locate_item_list { - /** number of items */ - unsigned length; - - /** this is a variable length array */ - struct locate_item items[1]; -}; - gcc_pure int locate_parse_type(const char *str); -/** - * Allocates a new struct locate_item_list, and initializes all - * members with zero bytes. - */ +gcc_malloc struct locate_item_list * -locate_item_list_new(unsigned length); +locate_item_list_new_single(unsigned tag, const char *needle); /* return number of items or -1 on error */ gcc_nonnull(1) |