[libvirt] [PATCH 2/2] cfg.mk: use a single regex for all non-reentrant functions

Ján Tomko jtomko at redhat.com
Tue Jun 14 13:07:28 UTC 2016


The prohibit_nonreentrant syntax-check rule spawns a new shell
for every non-reentrant function we know, to make it easier
to mention the function name in the error message, with the _r
appended.

Since the line with the offending function is already printed
and some of the functions on our list do not have a _r counterpart,
compile them into one big regex and use a more generic error message
to save time.
---
 Makefile.nonreentrant |  8 ++++++++
 cfg.mk                | 13 +++----------
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/Makefile.nonreentrant b/Makefile.nonreentrant
index 78e26e3..5cc64c0 100644
--- a/Makefile.nonreentrant
+++ b/Makefile.nonreentrant
@@ -113,3 +113,11 @@ NON_REENTRANT += inet_nsap_ntoa
 NON_REENTRANT += inet_ntoa
 NON_REENTRANT += inet_ntop
 NON_REENTRANT += inet_pton
+
+# Separate two nothings by space to get one space in a variable
+space =
+space +=
+# The space needs to be in a variable otherwise it would be ignored.
+# And there must be no spaces around the commas because they would
+# not be ignored, logically.
+NON_REENTRANT_RE=$(subst $(space),|,$(NON_REENTRANT))
diff --git a/cfg.mk b/cfg.mk
index e7db9a6..812e426 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -440,18 +440,11 @@ sc_prohibit_PATH_MAX:
 	halt='dynamically allocate paths, do not use PATH_MAX'	\
 	  $(_sc_search_regexp)
 
-# Use a subshell for each function, to give the optimal warning message.
 include $(srcdir)/Makefile.nonreentrant
 sc_prohibit_nonreentrant:
-	@fail=0 ; \
-	for i in $(NON_REENTRANT) ; \
-	do \
-	    (prohibit="\\<$$i *\\("					\
-	     halt="use $${i}_r, not $$i"				\
-	     $(_sc_search_regexp)					\
-	    ) || fail=1;						\
-	done ; \
-	exit $$fail
+	@prohibit="\\<(${NON_REENTRANT_RE}) *\\("			\
+	halt="use re-entrant functions (usually ending with _r)"	\
+	  $(_sc_search_regexp)
 
 sc_prohibit_select:
 	@prohibit='\<select *\('					\
-- 
2.7.3




More information about the libvir-list mailing list