From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 6ED7AA0613 for ; Tue, 23 Jul 2019 03:01:35 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 552FB1BEDE; Tue, 23 Jul 2019 03:01:35 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id 982331BEDA for ; Tue, 23 Jul 2019 03:01:34 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE2 (envelope-from yskoh@mellanox.com) with ESMTPS (AES256-SHA encrypted); 23 Jul 2019 04:01:29 +0300 Received: from scfae-sc-2.mti.labs.mlnx (scfae-sc-2.mti.labs.mlnx [10.101.0.96]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id x6N11Her026580; Tue, 23 Jul 2019 04:01:28 +0300 From: Yongseok Koh To: Bruce Richardson Cc: Ferruh Yigit , dpdk stable Date: Mon, 22 Jul 2019 17:59:34 -0700 Message-Id: <20190723010115.6446-7-yskoh@mellanox.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190723010115.6446-1-yskoh@mellanox.com> References: <20190723010115.6446-1-yskoh@mellanox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'eal: support strlcat function' has been queued to LTS release 17.11.7 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to LTS release 17.11.7 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objection by 07/27/19. So please shout if anyone has objection. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Thanks. Yongseok --- >From ca2ce1f60221e9cfb38272d7289e5c6941b037b0 Mon Sep 17 00:00:00 2001 From: Bruce Richardson Date: Thu, 17 Jan 2019 17:30:32 +0000 Subject: [PATCH] eal: support strlcat function [ upstream commit 146e57627f4b53dbdeecea3ee1f36f185cb55661 ] Add the strlcat function to DPDK to exist alongside the strlcpy one. While strncat is generally safe for use for concatenation, the API for the strlcat function is perhaps a little nicer to use, and supports truncation detection. See commit 5364de644a4b ("eal: support strlcpy function") for more details on the function selection logic, since we only should be using the DPDK-provided version when no system-provided version is present. Signed-off-by: Bruce Richardson Reviewed-by: Ferruh Yigit --- .../common/include/rte_string_fns.h | 16 +++++++ test/test/test_string_fns.c | 45 +++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/lib/librte_eal/common/include/rte_string_fns.h b/lib/librte_eal/common/include/rte_string_fns.h index 27a9ecb8ba..58c6faeee4 100644 --- a/lib/librte_eal/common/include/rte_string_fns.h +++ b/lib/librte_eal/common/include/rte_string_fns.h @@ -88,10 +88,25 @@ rte_strlcpy(char *dst, const char *src, size_t size) return (size_t)snprintf(dst, size, "%s", src); } +/** + * @internal + * DPDK-specific version of strlcat for systems without + * libc or libbsd copies of the function + */ +static inline size_t +rte_strlcat(char *dst, const char *src, size_t size) +{ + size_t l = strnlen(dst, size); + if (l < size) + return l + rte_strlcpy(&dst[l], src, size - l); + return l + strlen(src); +} + /* pull in a strlcpy function */ #ifdef RTE_EXEC_ENV_BSDAPP #ifndef __BSD_VISIBLE /* non-standard functions are hidden */ #define strlcpy(dst, src, size) rte_strlcpy(dst, src, size) +#define strlcat(dst, src, size) rte_strlcat(dst, src, size) #endif #else /* non-BSD platforms */ @@ -100,6 +115,7 @@ rte_strlcpy(char *dst, const char *src, size_t size) #else /* no BSD header files, create own */ #define strlcpy(dst, src, size) rte_strlcpy(dst, src, size) +#define strlcat(dst, src, size) rte_strlcat(dst, src, size) #endif /* RTE_USE_LIBBSD */ #endif /* BSDAPP */ diff --git a/test/test/test_string_fns.c b/test/test/test_string_fns.c index 8b4359aa79..d79ba76007 100644 --- a/test/test/test_string_fns.c +++ b/test/test/test_string_fns.c @@ -158,11 +158,56 @@ test_rte_strsplit(void) return 0; } +static int +test_rte_strlcat(void) +{ + /* only run actual unit tests if we have system-provided strlcat */ +#if defined(__BSD_VISIBLE) || defined(RTE_USE_LIBBSD) +#define BUF_LEN 32 + const char dst[BUF_LEN] = "Test string"; + const char src[] = " appended"; + char bsd_dst[BUF_LEN]; + char rte_dst[BUF_LEN]; + size_t i, bsd_ret, rte_ret; + + LOG("dst = '%s', strlen(dst) = %zu\n", dst, strlen(dst)); + LOG("src = '%s', strlen(src) = %zu\n", src, strlen(src)); + LOG("---\n"); + + for (i = 0; i < BUF_LEN; i++) { + /* initialize destination buffers */ + memcpy(bsd_dst, dst, BUF_LEN); + memcpy(rte_dst, dst, BUF_LEN); + /* compare implementations */ + bsd_ret = strlcat(bsd_dst, src, i); + rte_ret = rte_strlcat(rte_dst, src, i); + if (bsd_ret != rte_ret) { + LOG("Incorrect retval for buf length = %zu\n", i); + LOG("BSD: '%zu', rte: '%zu'\n", bsd_ret, rte_ret); + return -1; + } + if (memcmp(bsd_dst, rte_dst, BUF_LEN) != 0) { + LOG("Resulting buffers don't match\n"); + LOG("BSD: '%s', rte: '%s'\n", bsd_dst, rte_dst); + return -1; + } + LOG("buffer size = %zu: dst = '%s', ret = %zu\n", + i, rte_dst, rte_ret); + } + LOG("Checked %zu combinations\n", i); +#undef BUF_LEN +#endif /* defined(__BSD_VISIBLE) || defined(RTE_USE_LIBBSD) */ + + return 0; +} + static int test_string_fns(void) { if (test_rte_strsplit() < 0) return -1; + if (test_rte_strlcat() < 0) + return -1; return 0; } -- 2.21.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2019-07-22 17:55:06.905398202 -0700 +++ 0007-eal-support-strlcat-function.patch 2019-07-22 17:55:05.761469000 -0700 @@ -1,8 +1,10 @@ -From 146e57627f4b53dbdeecea3ee1f36f185cb55661 Mon Sep 17 00:00:00 2001 +From ca2ce1f60221e9cfb38272d7289e5c6941b037b0 Mon Sep 17 00:00:00 2001 From: Bruce Richardson Date: Thu, 17 Jan 2019 17:30:32 +0000 Subject: [PATCH] eal: support strlcat function +[ upstream commit 146e57627f4b53dbdeecea3ee1f36f185cb55661 ] + Add the strlcat function to DPDK to exist alongside the strlcpy one. While strncat is generally safe for use for concatenation, the API for the strlcat function is perhaps a little nicer to use, and supports truncation @@ -20,10 +22,10 @@ 2 files changed, 61 insertions(+) diff --git a/lib/librte_eal/common/include/rte_string_fns.h b/lib/librte_eal/common/include/rte_string_fns.h -index 9a2a1ff900..35c6b003cc 100644 +index 27a9ecb8ba..58c6faeee4 100644 --- a/lib/librte_eal/common/include/rte_string_fns.h +++ b/lib/librte_eal/common/include/rte_string_fns.h -@@ -59,10 +59,25 @@ rte_strlcpy(char *dst, const char *src, size_t size) +@@ -88,10 +88,25 @@ rte_strlcpy(char *dst, const char *src, size_t size) return (size_t)snprintf(dst, size, "%s", src); } @@ -49,7 +51,7 @@ #endif #else /* non-BSD platforms */ -@@ -71,6 +86,7 @@ rte_strlcpy(char *dst, const char *src, size_t size) +@@ -100,6 +115,7 @@ rte_strlcpy(char *dst, const char *src, size_t size) #else /* no BSD header files, create own */ #define strlcpy(dst, src, size) rte_strlcpy(dst, src, size) @@ -58,10 +60,10 @@ #endif /* RTE_USE_LIBBSD */ #endif /* BSDAPP */ diff --git a/test/test/test_string_fns.c b/test/test/test_string_fns.c -index 3f091ab920..5e105d2bb9 100644 +index 8b4359aa79..d79ba76007 100644 --- a/test/test/test_string_fns.c +++ b/test/test/test_string_fns.c -@@ -129,11 +129,56 @@ test_rte_strsplit(void) +@@ -158,11 +158,56 @@ test_rte_strsplit(void) return 0; }