From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 26FC9A034F; Sun, 21 Feb 2021 15:29:21 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5BB5422A2D5; Sun, 21 Feb 2021 15:28:38 +0100 (CET) Received: from mail-lj1-f175.google.com (mail-lj1-f175.google.com [209.85.208.175]) by mails.dpdk.org (Postfix) with ESMTP id B5BC722A2D0 for ; Sun, 21 Feb 2021 15:28:34 +0100 (CET) Received: by mail-lj1-f175.google.com with SMTP id u4so3778434lja.3 for ; Sun, 21 Feb 2021 06:28:34 -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=mBnSUFX543HP9FNPImYVhCy8Q/pbkMlEygUopPjh01g1ZWHstNwAQ9QdZQTDIm4j0h CmQeFvSfLMGU9LyTSlG251Bw1gcIIZTg8r3aKI8d6W2RwXSDosdTkGlwnfQdn8c2z705 j6c21gNsF70ihOxpEUYTal9ub0ls3UtI+NHJ6mP18u7MBYyNnhYR1Yates4aIsd7GsZI 3tpuKg8NmkF52/wW+S7OwmO3Z1QaXFAL2T6SDV/xyX1Xc/dwPfBjSyW4Us46GjM8lLqq JoClZebQP2+37rTjuOpeZE8znOMUvIWuVKW2GlwGiQ7CkrzHUj2O25TVvylClrW05EFB MmBQ== 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=jQVAA/NRqcRYJmheo6arzcWS5xkj+YoUiVep6Hp7bvmsww2nPEjVmkiGxVh9jHWSuz 82/4WFpDL3Vet05pSl+nVDnFAw8CmZ9NZg8+FhPNYlRBkK/7AYsnkIF4S6WGPWdHI2mL TOucbD8+5W+LWswGaaqQPOZwQsCQ7DwN3lRibb3Nd2QVkXG7jbXDHXQtmeZbw6wOVLuB gBQzZg8BlP9Ur6bLlxUyIPVUVU9NOyncrP9SZdEEnqIfTkkCyXCOVSK8aBt/Aep/ukMK 59GdRawVj+N7oZGueyu4hzorR79QXaGknN3Gw60y3yTI4KaB5QmuWjfVEFH6VUeYIwTf mtgg== X-Gm-Message-State: AOAM532DIdM22Witi40iYrRVkJBHRpQnpz0b/DIZcT8i3owvVBzx/Ypy HiZcQeFQgVnndTPy7Ps0p7itnxPJYM3/gtwm X-Google-Smtp-Source: ABdhPJyLcTQ9MxH9VrYlaDB8QU8mEFUpKYJeyDPwOLRyCvmqvZ28VR9BcUNtjzjl6h/wCz5eroKTlw== X-Received: by 2002:a2e:878a:: with SMTP id n10mr11232652lji.418.1613917714064; Sun, 21 Feb 2021 06:28:34 -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 a30sm1569885lfo.56.2021.02.21.06.28.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Feb 2021 06:28:33 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tal Shnaiderman , Dmitry Kozlyuk , Bruce Richardson , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam Date: Sun, 21 Feb 2021 17:28:19 +0300 Message-Id: <20210221142819.6769-8-dmitry.kozliuk@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210221142819.6769-1-dmitry.kozliuk@gmail.com> References: <20210221012831.14643-1-dmitry.kozliuk@gmail.com> <20210221142819.6769-1-dmitry.kozliuk@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v3 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 -- 2.29.2