From: Shaun Tancheff Date: Sun, 10 Oct 2021 04:47:29 +0000 (+0700) Subject: LU-15074 build: Use strlcpy if strscpy is not available X-Git-Tag: 2.14.56~153 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=7861d0754d42ed2a02a330eb730cb43f21dd30f2 LU-15074 build: Use strlcpy if strscpy is not available Linux commit v4.2-rc1-2-g30035e45753b string: provide strscpy() The strscpy() API is intended to be used instead of strlcpy(), and instead of most uses of strncpy(). Unfortunatley strscpy is not always available. Test for strscpy and fallback to strlcpy when strscpy is not available. Test-Parameters: trivial Fixes: b77a6d86936 ("LU-14665 lnet: simplify lnet_ni_add_interface") HPE-bug-id: LUS-9546 Signed-off-by: Shaun Tancheff Change-Id: I43038e4a6260dafb57195ec3417ce009f5a3fad4 Reviewed-on: https://review.whamcloud.com/45175 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Petros Koutoupis Reviewed-by: Oleg Drokin --- diff --git a/lnet/autoconf/lustre-lnet.m4 b/lnet/autoconf/lustre-lnet.m4 index c6be763..b9dffa0 100644 --- a/lnet/autoconf/lustre-lnet.m4 +++ b/lnet/autoconf/lustre-lnet.m4 @@ -647,6 +647,25 @@ AC_SUBST(GNICPPFLAGS) AC_SUBST(GNILND) ]) # LN_CONFIG_GNILND +# LN_CONFIG_STRSCPY_EXISTS +# +# If strscpy exists, prefer it over strlcpy +# +AC_DEFUN([LN_CONFIG_STRSCPY_EXISTS], [ +tmp_flags="$EXTRA_KCFLAGS" +EXTRA_KCFLAGS="-Werror" +LB_CHECK_COMPILE([kernel strscpy is available], +strscpy_exists, [ + #include +],[ + strscpy((char *)NULL, (const char *)NULL, 0); +],[ + AC_DEFINE(HAVE_STRSCPY, 1, + [kernel strscpy is available]) +]) +EXTRA_KCFLAGS="$tmp_flags" +]) # LN_CONFIG_STRSCPY_EXISTS + # LN_CONFIG_SOCK_CREATE_KERN # # 4.x sock_create_kern() added a first parameter as 'struct net *' @@ -873,6 +892,7 @@ AC_MSG_NOTICE([LNet kernel checks LN_CONFIG_BACKOFF LN_CONFIG_O2IB LN_CONFIG_GNILND +LN_CONFIG_STRSCPY_EXISTS # 3.10 LN_EXPORT_KMAP_TO_PAGE # 3.15 diff --git a/lnet/lnet/config.c b/lnet/lnet/config.c index 57dd989..4eabbd7 100644 --- a/lnet/lnet/config.c +++ b/lnet/lnet/config.c @@ -51,6 +51,10 @@ static int lnet_tbnob = 0; /* track text buf allocation */ #define SPACESTR " \t\v\r\n" #define DELIMITERS ":()[]" +#ifndef HAVE_STRSCPY +#define strscpy(s1, s2, sz) strlcpy((s1), (s2), (sz)) +#endif + static void lnet_syntax(const char *name, const char *str, int offset, int width) {