aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/DatabaseCommands.cxx6
-rw-r--r--src/locate.c33
-rw-r--r--src/locate.h26
3 files changed, 36 insertions, 29 deletions
diff --git a/src/DatabaseCommands.cxx b/src/DatabaseCommands.cxx
index 6c6d8965..913e338d 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 6a7002f2..e966747f 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 830ca219..f6057e14 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)