build: build parse-time-string as part of the notmuch lib and static cli
[notmuch] / lib / filenames.c
index cff9e8302d21c17bc59874a5c229567df33910ca..4f7c0d85b1c350d5977a1ddd00c5e0c01665f49d 100644 (file)
 
 #include "notmuch-private.h"
 
-typedef struct _notmuch_filenames_node {
-    char *filename;
-    struct _notmuch_filenames_node *next;
-} notmuch_filenames_node_t;
-
 struct _notmuch_filenames {
-    notmuch_filenames_node_t *head;
-    notmuch_filenames_node_t **tail;
-    notmuch_filenames_node_t *iterator;
+    notmuch_string_node_t *iterator;
 };
 
-/* Create a new notmuch_filenames_t object, with 'ctx' as its
- * talloc owner.
- *
- * This function can return NULL in case of out-of-memory.
- */
+/* The notmuch_filenames_t iterates over a notmuch_string_list_t of
+ * file names */
 notmuch_filenames_t *
-_notmuch_filenames_create (const void *ctx)
+_notmuch_filenames_create (const void *ctx,
+                          notmuch_string_list_t *list)
 {
     notmuch_filenames_t *filenames;
 
@@ -45,32 +36,12 @@ _notmuch_filenames_create (const void *ctx)
     if (unlikely (filenames == NULL))
        return NULL;
 
-    filenames->head = NULL;
-    filenames->tail = &filenames->head;
-
-    filenames->iterator = NULL;
+    filenames->iterator = list->head;
+    (void) talloc_reference (filenames, list);
 
     return filenames;
 }
 
-/* Append a single 'node' to the end of 'filenames'.
- */
-void
-_notmuch_filenames_add_filename (notmuch_filenames_t *filenames,
-                                const char *filename)
-{
-    /* Create and initialize new node. */
-    notmuch_filenames_node_t *node = talloc (filenames,
-                                            notmuch_filenames_node_t);
-
-    node->filename = talloc_strdup (node, filename);
-    node->next = NULL;
-
-    /* Append the node to the list. */
-    *(filenames->tail) = node;
-    filenames->tail = &node->next;
-}
-
 notmuch_bool_t
 notmuch_filenames_valid (notmuch_filenames_t *filenames)
 {
@@ -83,22 +54,16 @@ notmuch_filenames_valid (notmuch_filenames_t *filenames)
 const char *
 notmuch_filenames_get (notmuch_filenames_t *filenames)
 {
-    if (filenames->iterator == NULL)
+    if ((filenames == NULL) || (filenames->iterator == NULL))
        return NULL;
 
-    return filenames->iterator->filename;
-}
-
-void
-_notmuch_filenames_move_to_first (notmuch_filenames_t *filenames)
-{
-    filenames->iterator = filenames->head;
+    return filenames->iterator->string;
 }
 
 void
 notmuch_filenames_move_to_next (notmuch_filenames_t *filenames)
 {
-    if (filenames->iterator == NULL)
+    if ((filenames == NULL) || (filenames->iterator == NULL))
        return;
 
     filenames->iterator = filenames->iterator->next;