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

[PATCH 2/3] add QSORT_S

From
René Scharfe <l.s.r@web.de>
Date
Dec 1, 2016, 16:28 UTC
Message-ID
<d7e9bf45-98ca-4245-7740-ef71f71610aa@web.de>
In-Reply-To
<3083fbf7-d67e-77e4-e05f-94a7e7e15eba@web.de>

Add the macro QSORT_S, a convenient wrapper for qsort_s() that infers the size of the array elements and dies on error.

Basically all possible errors are programming mistakes (passing NULL as base of a non-empty array, passing NULL as comparison function, out-of-bounds accesses), so terminating the program should be acceptable for most callers.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
---
 git-compat-util.h | 5 +++++
 1 file changed, 5 insertions(+)
diff --git a/git-compat-util.h b/git-compat-util.h
index d25f0bd4c..b707dd880 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -994,6 +994,11 @@ int git_qsort_s(void *base, size_t nmemb, size_t size,
 #define qsort_s git_qsort_s
 #endif
 
+#define QSORT_S(base, n, compar, ctx) do {			\
+	if (qsort_s((base), (n), sizeof(*(base)), compar, ctx))	\
+		die("BUG: qsort_s() failed");			\
+} while (0)
+
 #ifndef REG_STARTEND
 #error "Git requires REG_STARTEND support. Compile with NO_REGEX=NeedsStartEnd"
 #endif
-- 
2.11.0
Previous: René ScharfeNext: René Scharfe
Message 15 of 16 in “string-list: make string_list_sort() reentrant”
  1. 0/3 string-list: make string_list_sort() reentrantRené Scharfe, Dec 1, 2016
  2. 1/3 compat: add qsort_s()René Scharfe, Dec 1, 2016
  3. René ScharfeDec 1, 2016
  4. Jeff KingDec 1, 2016
  5. Junio C HamanoDec 1, 2016
  6. Jeff KingDec 1, 2016
  7. Junio C HamanoDec 1, 2016
  8. René ScharfeDec 1, 2016
  9. Junio C HamanoDec 1, 2016
  10. Junio C HamanoDec 1, 2016
  11. Jeff KingDec 1, 2016
  12. René ScharfeDec 12, 2016
  13. Jeff KingDec 12, 2016
  14. René ScharfeDec 21, 2016
  15. 2/3 add QSORT_SRené Scharfe, Dec 1, 2016
  16. 3/3 string-list: use QSORT_S in string_list_sort()René Scharfe, Dec 1, 2016

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.