From e26098a1f405eaf6e0b2d3386a84ee7154cd59ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Tue, 14 Jun 2016 14:27:51 +0200 Subject: [PATCH] cfg.mk: use a single regex for all non-reentrant functions 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 78e26e31a8..5cc64c0d50 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 2939458379..d75ae0e216 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='\