From patchwork Sat Feb 20 23:29:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88045 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E5A0EA0524; Sun, 21 Feb 2021 00:30:07 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B68D722A27C; Sun, 21 Feb 2021 00:29:30 +0100 (CET) Received: from mail-lj1-f182.google.com (mail-lj1-f182.google.com [209.85.208.182]) by mails.dpdk.org (Postfix) with ESMTP id BD62522A26A for ; Sun, 21 Feb 2021 00:29:25 +0100 (CET) Received: by mail-lj1-f182.google.com with SMTP id k22so44109650ljg.3 for ; Sat, 20 Feb 2021 15:29:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=VGTbFC6BAAP7FC4WGTcjkH+HAq6/LlWUGZSmcrrUGZE=; b=mEAQboZlThxTXcTS9tDzCCqqvt7SnVJUqkzp8WHMDNJvRi+srL/u5BqsL4Rtn0YcLr ogcZNaCYVjkqj8m/4koi3eAobYYWUJhIKFlc/8Geb1pviHeO8tH8i/Yk7jvs5fyGlGHL bb8OWiy3sG6zojV6mO6CcYFFapwqTyQ/GvtRi8YhTWMZS7z++CD3mv0VuFLSOxO10r7A BCP/WtmO4LrOQv2i1/FKN+rtCJY11OBhQB2KmM9XKIlYRVfuFd0vCIBmaf/kNIN4YwgT +vlb7o3zwQ4Jn+l0VBP7eoWwF/7ql2UoKAuh92dOtDOj1xeW2EdIhjGIaPI2t6njCMWS wbNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VGTbFC6BAAP7FC4WGTcjkH+HAq6/LlWUGZSmcrrUGZE=; b=TJRKYLdA2GpVYb1TsT6tqT0KRUBnS3hGRKTkgUC3P55hYqpo3cqxyuO8MSYFM6MvXV TArGscrIA+HABebVCnBqYuhiCbM0U36Qzeq2rxNNpXFTpefCRtpuX2NDiWsVYDARBz4Q qPoKEB+G48iAWdisjLVth1mOAreb7fNO3UwwlVxJfYTQucGITR0ABWtsM9DFsALJkONn LALuwBSurZ1pNwGtW0Kns7TAplcC8l0H29KYUkgzxlKxoiyzjpTOaV7FFOGqO/X4YOtr JQi/qi9OM3jLMezU/YvafdYR6qaSebmA2dlad2vbEDp1uxkYAzn39KF1D8xKJDjiqCVB //sA== X-Gm-Message-State: AOAM530oTKL6PhjXvwjcVxUF9gO333YAyfA6/gq/c6LAel7PEF67xCHd obB9z7Sf0PvMTbqJlvn0SJkAXxXstjmOo5F9 X-Google-Smtp-Source: ABdhPJxb2l6s8BVNi9jhRnHSyhRi77ai0DFmDR2VHTUBUW50n6fGqxZBEC0sRFp9Fcm2pe8Vg/3CxA== X-Received: by 2002:a2e:5805:: with SMTP id m5mr9765953ljb.77.1613863765084; Sat, 20 Feb 2021 15:29:25 -0800 (PST) Received: from localhost.localdomain (broadband-37-110-65-23.ip.moscow.rt.ru. [37.110.65.23]) by smtp.gmail.com with ESMTPSA id f5sm1462931ljc.8.2021.02.20.15.29.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Feb 2021 15:29:24 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tyler Retzlaff , Nick Connolly , Dmitry Kozlyuk , Bruce Richardson , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam Date: Sun, 21 Feb 2021 02:29:10 +0300 Message-Id: <20210220232910.772-8-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210220232910.772-1-dmitry.kozliuk@gmail.com> References: <20210220232910.772-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 7/7] eal/windows: do not expose POSIX symbols X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Exposing POSIX symbols could break consumer POSIX compatibility code. * Make renaming of close() and unlink() private to EAL. * Remove renaming of strncasecmp(), strtok_r(), and sleep() in favor of using EAL wrappers. Similarly remove PATH_MAX macro. * Replace index(3p), which is not available on Windows, with strchr(3), as recommended by POSIX.1-2008. strerror_r() is only used inside EAL, rename it only where it's needed. Same for asprintf(), it has an internal EAL wrapper and is removed from public API. Signed-off-by: Dmitry Kozlyuk --- doc/guides/rel_notes/release_21_05.rst | 9 ++ lib/librte_eal/common/eal_common_errno.c | 4 + lib/librte_eal/common/eal_common_options.c | 2 +- lib/librte_eal/common/eal_private.h | 5 ++ lib/librte_eal/freebsd/include/rte_os.h | 4 +- lib/librte_eal/linux/include/rte_os.h | 4 +- lib/librte_eal/windows/include/rte_os.h | 99 ++-------------------- 7 files changed, 29 insertions(+), 98 deletions(-) diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst index 5aa9ed7db..6380dfa53 100644 --- a/doc/guides/rel_notes/release_21_05.rst +++ b/doc/guides/rel_notes/release_21_05.rst @@ -84,6 +84,15 @@ API Changes Also, make sure to start the actual text at the margin. ======================================================= +* eal/windows: Removed POSIX symbols from EAL headers. Exposing POSIX symbols + has been incorrect and could conflict with consumer POSIX implementations. + Wrappers are provided for + ``strtok_r(3p)`` (``rte_strtok``), + ``strncasecmp(3p)`` (``rte_strncasecmp``), + ``sleep(3p)`` (``rte_thread_sleep``), + ``PATH_MAX`` (``RTE_PATH_MAX``). + Removed are ``strerror_r(3p)`` and ``asprintf(3p)``. + ABI Changes ----------- diff --git a/lib/librte_eal/common/eal_common_errno.c b/lib/librte_eal/common/eal_common_errno.c index 2a10fb823..536eea0c3 100644 --- a/lib/librte_eal/common/eal_common_errno.c +++ b/lib/librte_eal/common/eal_common_errno.c @@ -15,6 +15,10 @@ #include #include +#ifdef RTE_EXEC_ENV_WINDOWS +#define strerror_r(a, b, c) strerror_s(b, c, a) +#endif + RTE_DEFINE_PER_LCORE(int, _rte_errno); const char * diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 275f879d7..fd3b22e8a 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -1936,7 +1936,7 @@ eal_check_common_options(struct internal_config *internal_cfg) RTE_LOG(ERR, EAL, "Invalid length of --" OPT_MBUF_POOL_OPS_NAME" option\n"); return -1; } - if (index(eal_get_hugefile_prefix(), '%') != NULL) { + if (strchr(eal_get_hugefile_prefix(), '%') != NULL) { RTE_LOG(ERR, EAL, "Invalid char, '%%', in --"OPT_FILE_PREFIX" " "option\n"); return -1; diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h index a5d9c5123..860551661 100644 --- a/lib/librte_eal/common/eal_private.h +++ b/lib/librte_eal/common/eal_private.h @@ -756,4 +756,9 @@ int eal_asprintf(char **buffer, const char *format, ...); #define eal_asprintf asprintf #endif +#ifdef RTE_EXEC_ENV_WINDOWS +#define close _close +#define unlink _unlink +#endif + #endif /* _EAL_PRIVATE_H_ */ diff --git a/lib/librte_eal/freebsd/include/rte_os.h b/lib/librte_eal/freebsd/include/rte_os.h index b37d59b5e..a5bf10021 100644 --- a/lib/librte_eal/freebsd/include/rte_os.h +++ b/lib/librte_eal/freebsd/include/rte_os.h @@ -6,9 +6,9 @@ #define _RTE_OS_H_ /** - * This is header should contain any function/macro definition + * This header should contain any function/macro definition * which are not supported natively or named differently in the - * freebsd OS. Functions will be added in future releases. + * freebsd OS. It must not define symbols without "rte_" prefix. */ #include diff --git a/lib/librte_eal/linux/include/rte_os.h b/lib/librte_eal/linux/include/rte_os.h index af7d052d9..04f510eec 100644 --- a/lib/librte_eal/linux/include/rte_os.h +++ b/lib/librte_eal/linux/include/rte_os.h @@ -6,9 +6,9 @@ #define _RTE_OS_H_ /** - * This is header should contain any function/macro definition + * This header should contain any function/macro definition * which are not supported natively or named differently in the - * linux OS. Functions will be added in future releases. + * linux OS. It must not define symbols without "rte_" prefix. */ #include diff --git a/lib/librte_eal/windows/include/rte_os.h b/lib/librte_eal/windows/include/rte_os.h index edca11bd2..9c9c31214 100644 --- a/lib/librte_eal/windows/include/rte_os.h +++ b/lib/librte_eal/windows/include/rte_os.h @@ -6,15 +6,11 @@ #define _RTE_OS_H_ /** - * This is header should contain any function/macro definition - * which are not supported natively or named differently in the - * Windows OS. It must not include Windows-specific headers. + * This header should contain any function/macro definition + * which are not supported natively or named differently in Windows OS. */ -#include -#include #include -#include #ifdef __cplusplus extern "C" { @@ -22,101 +18,18 @@ extern "C" { #define RTE_PATH_MAX _MAX_PATH -/* limits.h replacement, value as in */ -#ifndef PATH_MAX -#define PATH_MAX _MAX_PATH -#endif - -#ifndef sleep -#define sleep(x) Sleep(1000 * (x)) -#endif - -#ifndef strerror_r -#define strerror_r(a, b, c) strerror_s(b, c, a) -#endif - -#ifndef strdup -/* strdup is deprecated in Microsoft libc and _strdup is preferred */ -#define strdup(str) _strdup(str) -#endif - -#ifndef strtok_r -#define strtok_r(str, delim, saveptr) strtok_s(str, delim, saveptr) -#endif - -#ifndef index -#define index(a, b) strchr(a, b) -#endif - -#ifndef rindex -#define rindex(a, b) strrchr(a, b) -#endif - -#ifndef strncasecmp -#define strncasecmp(s1, s2, count) _strnicmp(s1, s2, count) -#endif - -#ifndef close -#define close _close -#endif - -#ifndef unlink -#define unlink _unlink -#endif - /* cpu_set macros implementation */ #define RTE_CPU_AND(dst, src1, src2) CPU_AND(dst, src1, src2) #define RTE_CPU_OR(dst, src1, src2) CPU_OR(dst, src1, src2) #define RTE_CPU_FILL(set) CPU_FILL(set) #define RTE_CPU_NOT(dst, src) CPU_NOT(dst, src) -/* as in */ +/* This is an exception without "rte_" prefix, because Windows does have + * ssize_t, but it's defined in which we avoid to expose. + * If ssize_t is defined in user code, it necessarily has the same type. + */ typedef long long ssize_t; -#ifndef RTE_TOOLCHAIN_GCC - -static inline int -asprintf(char **buffer, const char *format, ...) -{ - int size, ret; - va_list arg; - - va_start(arg, format); - size = vsnprintf(NULL, 0, format, arg); - va_end(arg); - if (size < 0) - return -1; - size++; - - *buffer = (char *)malloc(size); - if (*buffer == NULL) - return -1; - - va_start(arg, format); - ret = vsnprintf(*buffer, size, format, arg); - va_end(arg); - if (ret != size - 1) { - free(*buffer); - return -1; - } - return ret; -} - -static inline const char * -eal_strerror(int code) -{ - static char buffer[128]; - - strerror_s(buffer, sizeof(buffer), code); - return buffer; -} - -#ifndef strerror -#define strerror eal_strerror -#endif - -#endif /* RTE_TOOLCHAIN_GCC */ - #ifdef __cplusplus } #endif