git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 4/5] string-list.[ch]: add a string_list_init_{nodup,dup}()

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Jul 1, 2021, 10:51 UTC
Message-ID
<patch-4.5-b05a393b5f1-20210701T104855Z-avarab@gmail.com>
In-Reply-To
<cover-0.5-00000000000-20210701T104855Z-avarab@gmail.com>

In order to use the new "memcpy() a 'blank' struct on the stack" pattern for string_list_init(), and to make the macro initialization consistent with the function initialization introduce two new string_list_init_{nodup,dup}() functions. These are like the old string_list_init() when called with a false and true second argument, respectively.

I think this not only makes things more consistent, but also easier to read. I often had to lookup what the ", 0)" or ", 1)" in these invocations meant, now it's right there in the function name, and corresponds to the macros.

A subsequent commit will convert existing API users to this pattern, but as this is a very common API let's leave a compatibility function in place for later removal. This intermediate state also proves that the compatibility function works.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 string-list.c | 18 ++++++++++++++++--
 string-list.h | 11 +++++++++--
 2 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/string-list.c b/string-list.c
index a917955fbd8..43576ad1265 100644
--- a/string-list.c
+++ b/string-list.c
@@ -1,10 +1,24 @@
 #include "cache.h"
 #include "string-list.h"
 
+void string_list_init_nodup(struct string_list *list)
+{
+	struct string_list blank = STRING_LIST_INIT_NODUP;
+	memcpy(list, &blank, sizeof(*list));
+}
+
+void string_list_init_dup(struct string_list *list)
+{
+	struct string_list blank = STRING_LIST_INIT_DUP;
+	memcpy(list, &blank, sizeof(*list));
+}
+
 void string_list_init(struct string_list *list, int strdup_strings)
 {
-	memset(list, 0, sizeof(*list));
-	list->strdup_strings = strdup_strings;
+	if (strdup_strings)
+		string_list_init_dup(list);
+	else
+		string_list_init_nodup(list);
 }
 
 /* if there is no exact match, point to the index where the entry could be
diff --git a/string-list.h b/string-list.h
index 521b9c0748d..0d6b4692396 100644
--- a/string-list.h
+++ b/string-list.h
@@ -97,8 +97,15 @@ struct string_list {
 /* General functions which work with both sorted and unsorted lists. */
 
 /**
- * Initialize the members of the string_list, set `strdup_strings`
- * member according to the value of the second parameter.
+ * Initialize the members of a string_list pointer in the same way as
+ * the corresponding `STRING_LIST_INIT_NODUP` and
+ * `STRING_LIST_INIT_DUP` macros.
+ */
+void string_list_init_nodup(struct string_list *list);
+void string_list_init_dup(struct string_list *list);
+
+/**
+ * TODO remove: For compatibility with any in-flight older API users
  */
 void string_list_init(struct string_list *list, int strdup_strings);
 
-- 
2.32.0.623.ge833f40cd87
Previous: Ævar Arnfjörð BjarmasonNext: Jeff King
Message 9 of 10 in “*.[ch]: don't duplicate *_init() and *_INIT logic”
  1. 0/5 *.[ch]: don't duplicate *_init() and *_INIT logicÆvar Arnfjörð Bjarmason, Jul 1, 2021
  2. 3/5 dir.[ch]: replace dir_init() with DIR_INITÆvar Arnfjörð Bjarmason, Jul 1, 2021
  3. 2/5 *.c *_init(): define in terms of corresponding *_INIT macroÆvar Arnfjörð Bjarmason, Jul 1, 2021
  4. 1/5 *.h: move some *_INIT to designated initializersÆvar Arnfjörð Bjarmason, Jul 1, 2021
  5. Martin ÅgrenJul 1, 2021
  6. Junio C HamanoJul 1, 2021
  7. Ævar Arnfjörð BjarmasonJul 1, 2021
  8. 5/5 string-list.h users: change to use *_{nodup,dup}()Ævar Arnfjörð Bjarmason, Jul 1, 2021
  9. 4/5 string-list.[ch]: add a string_list_init_{nodup,dup}()Ævar Arnfjörð Bjarmason, Jul 1, 2021
  10. Jeff KingJul 1, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.