From patchwork Sun Feb 21 14:28:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88060 X-Patchwork-Delegate: thomas@monjalon.net 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 2B468A034F; Sun, 21 Feb 2021 15:28:36 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AC16A22A2AA; Sun, 21 Feb 2021 15:28:30 +0100 (CET) Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) by mails.dpdk.org (Postfix) with ESMTP id 4CCDB22A265 for ; Sun, 21 Feb 2021 15:28:28 +0100 (CET) Received: by mail-lj1-f171.google.com with SMTP id q14so49263081ljp.4 for ; Sun, 21 Feb 2021 06:28:28 -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=3pMvwR89qcZTBE9RQzUAoHmCguIRyzM5f0bBUWwi8Xc=; b=vC3+HtHD+6/4lLE8g2PegdgFq3D5sIh5VpfY8tgxuy6vJTzyuDTHXBmPIjrqRnQ8BN LsPVL9jlcGnBng3zmQDjvcTPbxJ3z2nJZ327///nKWzIFFKQMgQZQKw5DRm++K38QtX4 ZKKwauOHsO1iQNj4Wims7m52hYr9LZFD+HY8+xsjZ4HW0TedBACbqld3/7ypTVOdaOV3 Kz7+/mf31GXUMG3ULKsZ4IWVLzpHMHcPjsj+YNEtj4nnNUSmVwfBLdrjRYnMDkLKu5C7 v6f27bPoh18cUNfiNHk9QFH9P3kgLL+0gnhMh0Oy1QhtMP1CIVlmUEDTvTV87kWhXcI3 Mgkw== 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=3pMvwR89qcZTBE9RQzUAoHmCguIRyzM5f0bBUWwi8Xc=; b=XjOIS1wsz7TPj+EC/RUgPHYc+ueYChypmJI8dd7LSb8xr1Z64ndFL4CVauJUa9YNkH YBLCv3Sc6XsWp4oZk8h0Y0QWxkhwzjl7Nh9iSrAmSSjVLVE86ee4ZQK8JF4HGtBP9Yr5 5vJLAKhh2xXp52BmhR89+sAt+AQBsZLIWahKR4nVMyRrqO75KSCkHbZScVnH+t6T7jRm vjpGoKZOdA2bU/j7I1BO9ocgOUVx619j80RULRola4jaqplqDK/uPW1imQ2oQ2U54SI4 noK9Utyp2DPvGYodH0udk8LyUF5ADJj4skpZTwsB0qHqTSGEnEoxB3aBdD0GTg4gtFN9 gcuw== X-Gm-Message-State: AOAM533RUzAgm307KKByXlG5YkpVrMBL6NY3z7zRRsXoFY0uCKJqSDLI A07zv4nTJIewXxgaOxp3Z0xjOsU65OPZDYVK X-Google-Smtp-Source: ABdhPJzwt90Yr7mjTgXeVHqDLkeMNkpUuWALrfZRk0oWzyVYY0x/9kTIqezgjfd6s4jOpZFULHerGA== X-Received: by 2002:a19:7fce:: with SMTP id a197mr11859257lfd.77.1613917707634; Sun, 21 Feb 2021 06:28:27 -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.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Feb 2021 06:28:27 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tal Shnaiderman , Dmitry Kozlyuk , Jerin Jacob , Sunil Kumar Kori Date: Sun, 21 Feb 2021 17:28:13 +0300 Message-Id: <20210221142819.6769-2-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 Subject: [dpdk-dev] [PATCH v3 1/7] eal: add wrappers for POSIX string functions 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" POSIX strncasecmp(), strdup(), and strtok_r() have different names on Windows, respectively, strnicmp(), _strdup(), and strtok_s(). Add wrappers as inline functions, because they're used from librte_kvargs, and thus cannot be in librte_eal; besides, implementation is trivial. Signed-off-by: Dmitry Kozlyuk Acked-by: Khoa To --- lib/librte_eal/common/eal_common_dev.c | 6 +-- lib/librte_eal/common/eal_common_devargs.c | 7 ++-- lib/librte_eal/common/eal_common_log.c | 5 ++- lib/librte_eal/common/eal_common_options.c | 12 +++--- lib/librte_eal/common/eal_common_trace_ctf.c | 2 +- .../common/eal_common_trace_utils.c | 2 +- lib/librte_eal/include/rte_string_fns.h | 42 +++++++++++++++++++ 7 files changed, 60 insertions(+), 16 deletions(-) diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c index 8a3bd3100..0a15fdcf7 100644 --- a/lib/librte_eal/common/eal_common_dev.c +++ b/lib/librte_eal/common/eal_common_dev.c @@ -462,7 +462,7 @@ rte_dev_event_callback_register(const char *device_name, if (!device_name) { event_cb->dev_name = NULL; } else { - event_cb->dev_name = strdup(device_name); + event_cb->dev_name = rte_strdup(device_name); if (event_cb->dev_name == NULL) { ret = -ENOMEM; goto error; @@ -630,10 +630,10 @@ dev_str_sane_copy(const char *str) end = strcspn(str, ",/"); if (str[end] == ',') { - copy = strdup(&str[end + 1]); + copy = rte_strdup(&str[end + 1]); } else { /* '/' or '\0' */ - copy = strdup(""); + copy = rte_strdup(""); } if (copy == NULL) { rte_errno = ENOMEM; diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c index fcf3d9a3c..14e082a27 100644 --- a/lib/librte_eal/common/eal_common_devargs.c +++ b/lib/librte_eal/common/eal_common_devargs.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include "eal_private.h" @@ -75,7 +76,7 @@ rte_devargs_layers_parse(struct rte_devargs *devargs, * anything and keep referring only to it. */ if (devargs->data != devstr) { - devargs->data = strdup(devstr); + devargs->data = rte_strdup(devstr); if (devargs->data == NULL) { RTE_LOG(ERR, EAL, "OOM\n"); ret = -ENOMEM; @@ -219,9 +220,9 @@ rte_devargs_parse(struct rte_devargs *da, const char *dev) da->bus = bus; /* Parse eventual device arguments */ if (devname[i] == ',') - da->args = strdup(&devname[i + 1]); + da->args = rte_strdup(&devname[i + 1]); else - da->args = strdup(""); + da->args = rte_strdup(""); if (da->args == NULL) { RTE_LOG(ERR, EAL, "not enough memory to parse arguments\n"); return -ENOMEM; diff --git a/lib/librte_eal/common/eal_common_log.c b/lib/librte_eal/common/eal_common_log.c index c5554badb..557a8243f 100644 --- a/lib/librte_eal/common/eal_common_log.c +++ b/lib/librte_eal/common/eal_common_log.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "eal_private.h" @@ -194,7 +195,7 @@ static int rte_log_save_level(int priority, if (regcomp(&opt_ll->re_match, regex, 0) != 0) goto fail; } else if (pattern) { - opt_ll->pattern = strdup(pattern); + opt_ll->pattern = rte_strdup(pattern); if (opt_ll->pattern == NULL) goto fail; } else @@ -270,7 +271,7 @@ rte_log_lookup(const char *name) static int __rte_log_register(const char *name, int id) { - char *dup_name = strdup(name); + char *dup_name = rte_strdup(name); if (dup_name == NULL) return -ENOMEM; diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 622c7bc42..3612ad441 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -228,7 +228,7 @@ eal_save_args(int argc, char **argv) return -1; for (i = 0; i < argc; i++) { - eal_args[i] = strdup(argv[i]); + eal_args[i] = rte_strdup(argv[i]); if (strcmp(argv[i], "--") == 0) break; } @@ -243,7 +243,7 @@ eal_save_args(int argc, char **argv) return -1; for (j = 0; i < argc; j++, i++) - eal_app_args[j] = strdup(argv[i]); + eal_app_args[j] = rte_strdup(argv[i]); eal_app_args[j] = NULL; return 0; @@ -1273,7 +1273,7 @@ eal_parse_log_level(const char *arg) char *str, *level; int priority; - str = strdup(arg); + str = rte_strdup(arg); if (str == NULL) return -1; @@ -1324,11 +1324,11 @@ eal_parse_log_level(const char *arg) static enum rte_proc_type_t eal_parse_proc_type(const char *arg) { - if (strncasecmp(arg, "primary", sizeof("primary")) == 0) + if (rte_strncasecmp(arg, "primary", sizeof("primary")) == 0) return RTE_PROC_PRIMARY; - if (strncasecmp(arg, "secondary", sizeof("secondary")) == 0) + if (rte_strncasecmp(arg, "secondary", sizeof("secondary")) == 0) return RTE_PROC_SECONDARY; - if (strncasecmp(arg, "auto", sizeof("auto")) == 0) + if (rte_strncasecmp(arg, "auto", sizeof("auto")) == 0) return RTE_PROC_AUTO; return RTE_PROC_INVALID; diff --git a/lib/librte_eal/common/eal_common_trace_ctf.c b/lib/librte_eal/common/eal_common_trace_ctf.c index 33e419aac..4041d9af6 100644 --- a/lib/librte_eal/common/eal_common_trace_ctf.c +++ b/lib/librte_eal/common/eal_common_trace_ctf.c @@ -398,7 +398,7 @@ char *trace_metadata_fixup_field(const char *field) if (strstr(field, ".") == NULL && strstr(field, "->") == NULL) return NULL; - out = strdup(field); + out = rte_strdup(field); if (out == NULL) return NULL; p = out; diff --git a/lib/librte_eal/common/eal_common_trace_utils.c b/lib/librte_eal/common/eal_common_trace_utils.c index 64f58fb66..d541a5ea9 100644 --- a/lib/librte_eal/common/eal_common_trace_utils.c +++ b/lib/librte_eal/common/eal_common_trace_utils.c @@ -145,7 +145,7 @@ eal_trace_args_save(const char *val) return -ENOMEM; } - arg->val = strdup(val); + arg->val = rte_strdup(val); if (arg->val == NULL) { trace_err("failed to allocate memory for %s", val); free(arg); diff --git a/lib/librte_eal/include/rte_string_fns.h b/lib/librte_eal/include/rte_string_fns.h index 8bac8243c..2d9d5afc8 100644 --- a/lib/librte_eal/include/rte_string_fns.h +++ b/lib/librte_eal/include/rte_string_fns.h @@ -116,6 +116,48 @@ rte_strlcat(char *dst, const char *src, size_t size) ssize_t rte_strscpy(char *dst, const char *src, size_t dsize); +/** + * @internal + * strncasecmp(3) replacement for systems that don't have it. + */ +static inline int +rte_strncasecmp(const char *s1, const char *s2, size_t size) +{ +#ifdef RTE_EXEC_ENV_WINDOWS + return _strnicmp(s1, s2, size); +#else + return strncasecmp(s1, s2, size); +#endif +} + +/** + * @internal + * strtor_r(3) replacement for systems that don't have it. + */ +static inline char * +rte_strtok(char *str, const char *delim, char **saveptr) +{ +#ifdef RTE_EXEC_ENV_WINDOWS + return strtok_s(str, delim, saveptr); +#else + return strtok_r(str, delim, saveptr); +#endif +} + +/** + * @internal + * strdup(3) replacement for systems that don't have it. + */ +static inline char * +rte_strdup(const char *str) +{ +#ifdef RTE_EXEC_ENV_WINDOWS + return _strdup(str); +#else + return strdup(str); +#endif +} + #ifdef __cplusplus } #endif From patchwork Sun Feb 21 14:28:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88061 X-Patchwork-Delegate: thomas@monjalon.net 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 38767A034F; Sun, 21 Feb 2021 15:28:44 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E5FA622A2B8; Sun, 21 Feb 2021 15:28:31 +0100 (CET) Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) by mails.dpdk.org (Postfix) with ESMTP id 8637722A286 for ; Sun, 21 Feb 2021 15:28:29 +0100 (CET) Received: by mail-lj1-f180.google.com with SMTP id o16so44623413ljj.11 for ; Sun, 21 Feb 2021 06:28:29 -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=7WcTPkjchmAK6UW9LkpoCQXdqH2MeezlhFTOaBsoJ4Q=; b=VE43Xx7eJRZp2nEGUl8pAeGzUyptXKPL2yAsxv6A4/ufOzBxhWJg9k2iePGoKg7eZn 1EpBGj8tpGpNuQMaVF8kakWbZ1om4ISytHMK7EXd50zv1FtNDibkQbSTw6wYXmzAc6k+ q9IiUt99Ns/PiMlNe9YHeTflPoVFRutq/J+K+VdoZBKQMbtUg/o2NVSUECLA+D1rhuNG naHO0LCYJfpCeQ00729h6ULKF6vRZYFwoKlUD3OekEaf5rtYAZHCdnCXOfoAaTIxknRM 5AIO2ZtwUINM3uyJox2nh9IJsDAvg08P2L0tEVHMH52QJrC0k/wxXaFvP816/D9UbM6z gy7g== 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=7WcTPkjchmAK6UW9LkpoCQXdqH2MeezlhFTOaBsoJ4Q=; b=Qp8RVkzKxkqChnoXDA6+Uax7enyZvlGjyDGLb3X9M29WcUAICJboHJpzWNsWMGk9ex MsHmivdY73s84e83hKXCNOTCBxEpszP31/8+1j87glmR5/rePlMIVWND+jrolFPnBK1Y Cv5lnsCu5KMp5uPk4M/z52Q4K3FxagltE2qnQAipXoqdN1rCE3Du8uV/EqaLMug0H31u a6Q2RQDxrtjFYr7+RhufCtF3qoHTjsvf8Hhnp2jWuf62SfyNyseqY0nzUu6PnlH01oy0 zRd+PLieopnGPmBqtMZJM6veQiryGXXgt2BrqYw2isXW0BnQeM5VZQZNfZwcanYwwmhL epeg== X-Gm-Message-State: AOAM532/1d45K29R979l8iyMMw5AtRRT0QbiZjRyaQ+Ww1rOaUErc27S 0g94WVHyt24DY60dDIqP/wMzKEfIVGeZHPqM X-Google-Smtp-Source: ABdhPJxrffGeDvW+NlM+Aj9OlwX5WUmoktvQEcoCZO4vvcCmOB+be/ZnVRVT+D8psgLh7KxmoJZkmw== X-Received: by 2002:a2e:8946:: with SMTP id b6mr11145934ljk.143.1613917708793; Sun, 21 Feb 2021 06:28:28 -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.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Feb 2021 06:28:28 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tal Shnaiderman , Dmitry Kozlyuk , Anatoly Burakov , Jerin Jacob , Sunil Kumar Kori , Bruce Richardson , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam Date: Sun, 21 Feb 2021 17:28:14 +0300 Message-Id: <20210221142819.6769-3-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 Subject: [dpdk-dev] [PATCH v3 2/7] eal: add macro for maximum path length 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" Path length limit is PATH_MAX on Unix and _MAX_PATH on Windows. Add RTE_PATH_MAX macro for use in OS-independent code. Keep PATH_MAX in "common" multiprocess code, because it's really Unix-specific. Signed-off-by: Dmitry Kozlyuk Acked-by: Khoa To --- lib/librte_eal/common/eal_common_config.c | 2 +- lib/librte_eal/common/eal_common_fbarray.c | 8 +++---- lib/librte_eal/common/eal_common_options.c | 20 +++++++++--------- .../common/eal_common_trace_utils.c | 9 ++++---- lib/librte_eal/common/eal_filesystem.h | 8 +++---- lib/librte_eal/common/eal_hugepages.h | 2 +- lib/librte_eal/common/eal_internal_cfg.h | 2 +- lib/librte_eal/common/eal_trace.h | 2 +- lib/librte_eal/freebsd/include/rte_os.h | 2 ++ lib/librte_eal/linux/include/rte_os.h | 2 ++ lib/librte_eal/windows/include/dirent.h | 21 +++++++------------ lib/librte_eal/windows/include/rte_os.h | 2 ++ 12 files changed, 41 insertions(+), 39 deletions(-) diff --git a/lib/librte_eal/common/eal_common_config.c b/lib/librte_eal/common/eal_common_config.c index 56d09dda7..33e5a076a 100644 --- a/lib/librte_eal/common/eal_common_config.c +++ b/lib/librte_eal/common/eal_common_config.c @@ -18,7 +18,7 @@ static struct rte_config rte_config = { }; /* platform-specific runtime dir */ -static char runtime_dir[PATH_MAX]; +static char runtime_dir[RTE_PATH_MAX]; /* internal configuration */ static struct internal_config internal_config; diff --git a/lib/librte_eal/common/eal_common_fbarray.c b/lib/librte_eal/common/eal_common_fbarray.c index d974f3dab..c21b8ec66 100644 --- a/lib/librte_eal/common/eal_common_fbarray.c +++ b/lib/librte_eal/common/eal_common_fbarray.c @@ -83,7 +83,7 @@ get_used_mask(void *data, unsigned int elt_sz, unsigned int len) static int resize_and_map(int fd, void *addr, size_t len) { - char path[PATH_MAX]; + char path[RTE_PATH_MAX]; void *map_addr; if (eal_file_truncate(fd, len)) { @@ -710,7 +710,7 @@ rte_fbarray_init(struct rte_fbarray *arr, const char *name, unsigned int len, unsigned int elt_sz) { size_t page_sz, mmap_len; - char path[PATH_MAX]; + char path[RTE_PATH_MAX]; struct used_mask *msk; struct mem_area *ma = NULL; void *data = NULL; @@ -836,7 +836,7 @@ rte_fbarray_attach(struct rte_fbarray *arr) { struct mem_area *ma = NULL, *tmp = NULL; size_t page_sz, mmap_len; - char path[PATH_MAX]; + char path[RTE_PATH_MAX]; void *data = NULL; int fd = -1; @@ -978,7 +978,7 @@ rte_fbarray_destroy(struct rte_fbarray *arr) struct mem_area *tmp = NULL; size_t mmap_len; int fd, ret; - char path[PATH_MAX]; + char path[RTE_PATH_MAX]; const struct internal_config *internal_conf = eal_get_internal_configuration(); diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index 3612ad441..bad389903 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -120,7 +120,7 @@ TAILQ_HEAD(shared_driver_list, shared_driver); struct shared_driver { TAILQ_ENTRY(shared_driver) next; - char name[PATH_MAX]; + char name[RTE_PATH_MAX]; void* lib_handle; }; @@ -367,7 +367,7 @@ eal_plugin_add(const char *path) return -1; } memset(solib, 0, sizeof(*solib)); - strlcpy(solib->name, path, PATH_MAX); + strlcpy(solib->name, path, RTE_PATH_MAX); TAILQ_INSERT_TAIL(&solib_list, solib, next); return 0; @@ -386,7 +386,7 @@ eal_plugindir_init(const char *path) { DIR *d = NULL; struct dirent *dent = NULL; - char sopath[PATH_MAX]; + char sopath[RTE_PATH_MAX]; if (path == NULL || *path == '\0') return 0; @@ -430,16 +430,16 @@ verify_perms(const char *dirpath) /* if not root, check down one level first */ if (strcmp(dirpath, "/") != 0) { - static __thread char last_dir_checked[PATH_MAX]; - char copy[PATH_MAX]; + static __thread char last_dir_checked[RTE_PATH_MAX]; + char copy[RTE_PATH_MAX]; const char *dir; - strlcpy(copy, dirpath, PATH_MAX); + strlcpy(copy, dirpath, RTE_PATH_MAX); dir = dirname(copy); - if (strncmp(dir, last_dir_checked, PATH_MAX) != 0) { + if (strncmp(dir, last_dir_checked, RTE_PATH_MAX) != 0) { if (verify_perms(dir) != 0) return -1; - strlcpy(last_dir_checked, dir, PATH_MAX); + strlcpy(last_dir_checked, dir, RTE_PATH_MAX); } } @@ -477,8 +477,8 @@ eal_dlopen(const char *pathname) pathname, strerror(errno)); goto out; } - if (strnlen(realp, PATH_MAX) == PATH_MAX) { - RTE_LOG(ERR, EAL, "Error, driver path greater than PATH_MAX\n"); + if (strnlen(realp, RTE_PATH_MAX) == RTE_PATH_MAX) { + RTE_LOG(ERR, EAL, "Error, driver path greater than RTE_PATH_MAX\n"); goto out; } diff --git a/lib/librte_eal/common/eal_common_trace_utils.c b/lib/librte_eal/common/eal_common_trace_utils.c index d541a5ea9..6b81fdeec 100644 --- a/lib/librte_eal/common/eal_common_trace_utils.c +++ b/lib/librte_eal/common/eal_common_trace_utils.c @@ -369,11 +369,11 @@ trace_mkdir(void) static int trace_meta_save(struct trace *trace) { - char file_name[PATH_MAX]; + char file_name[RTE_PATH_MAX]; FILE *f; int rc; - rc = snprintf(file_name, PATH_MAX, "%s/metadata", trace->dir); + rc = snprintf(file_name, RTE_PATH_MAX, "%s/metadata", trace->dir); if (rc < 0) return rc; @@ -400,11 +400,12 @@ static int trace_mem_save(struct trace *trace, struct __rte_trace_header *hdr, uint32_t cnt) { - char file_name[PATH_MAX]; + char file_name[RTE_PATH_MAX]; FILE *f; int rc; - rc = snprintf(file_name, PATH_MAX, "%s/channel0_%d", trace->dir, cnt); + rc = snprintf(file_name, RTE_PATH_MAX, "%s/channel0_%d", + trace->dir, cnt); if (rc < 0) return rc; diff --git a/lib/librte_eal/common/eal_filesystem.h b/lib/librte_eal/common/eal_filesystem.h index 5d21f07c2..d28a9b23d 100644 --- a/lib/librte_eal/common/eal_filesystem.h +++ b/lib/librte_eal/common/eal_filesystem.h @@ -36,7 +36,7 @@ eal_get_hugefile_prefix(void); static inline const char * eal_runtime_config_path(void) { - static char buffer[PATH_MAX]; /* static so auto-zeroed */ + static char buffer[RTE_PATH_MAX]; /* static so auto-zeroed */ snprintf(buffer, sizeof(buffer), "%s/%s", rte_eal_get_runtime_dir(), RUNTIME_CONFIG_FNAME); @@ -48,7 +48,7 @@ eal_runtime_config_path(void) static inline const char * eal_mp_socket_path(void) { - static char buffer[PATH_MAX]; /* static so auto-zeroed */ + static char buffer[RTE_PATH_MAX]; /* static so auto-zeroed */ snprintf(buffer, sizeof(buffer), "%s/%s", rte_eal_get_runtime_dir(), MP_SOCKET_FNAME); @@ -68,7 +68,7 @@ eal_get_fbarray_path(char *buffer, size_t buflen, const char *name) { static inline const char * eal_hugepage_info_path(void) { - static char buffer[PATH_MAX]; /* static so auto-zeroed */ + static char buffer[RTE_PATH_MAX]; /* static so auto-zeroed */ snprintf(buffer, sizeof(buffer), "%s/%s", rte_eal_get_runtime_dir(), HUGEPAGE_INFO_FNAME); @@ -80,7 +80,7 @@ eal_hugepage_info_path(void) static inline const char * eal_hugepage_data_path(void) { - static char buffer[PATH_MAX]; /* static so auto-zeroed */ + static char buffer[RTE_PATH_MAX]; /* static so auto-zeroed */ snprintf(buffer, sizeof(buffer), "%s/%s", rte_eal_get_runtime_dir(), HUGEPAGE_DATA_FNAME); diff --git a/lib/librte_eal/common/eal_hugepages.h b/lib/librte_eal/common/eal_hugepages.h index 1b560d337..02b324ed1 100644 --- a/lib/librte_eal/common/eal_hugepages.h +++ b/lib/librte_eal/common/eal_hugepages.h @@ -9,7 +9,7 @@ #include #include -#define MAX_HUGEPAGE_PATH PATH_MAX +#define MAX_HUGEPAGE_PATH RTE_PATH_MAX /** * Structure used to store information about hugepages that we mapped diff --git a/lib/librte_eal/common/eal_internal_cfg.h b/lib/librte_eal/common/eal_internal_cfg.h index 51dbe86e2..c8ea3b8fc 100644 --- a/lib/librte_eal/common/eal_internal_cfg.h +++ b/lib/librte_eal/common/eal_internal_cfg.h @@ -27,7 +27,7 @@ */ struct hugepage_info { uint64_t hugepage_sz; /**< size of a huge page */ - char hugedir[PATH_MAX]; /**< dir where hugetlbfs is mounted */ + char hugedir[RTE_PATH_MAX]; /**< dir where hugetlbfs is mounted */ uint32_t num_pages[RTE_MAX_NUMA_NODES]; /**< number of hugepages of that size on each socket */ int lock_descriptor; /**< file descriptor for hugepage dir */ diff --git a/lib/librte_eal/common/eal_trace.h b/lib/librte_eal/common/eal_trace.h index 06751eb23..ab915eb10 100644 --- a/lib/librte_eal/common/eal_trace.h +++ b/lib/librte_eal/common/eal_trace.h @@ -51,7 +51,7 @@ struct trace_arg { }; struct trace { - char dir[PATH_MAX]; + char dir[RTE_PATH_MAX]; int dir_offset; int register_errno; bool status; diff --git a/lib/librte_eal/freebsd/include/rte_os.h b/lib/librte_eal/freebsd/include/rte_os.h index eeb750cd8..b37d59b5e 100644 --- a/lib/librte_eal/freebsd/include/rte_os.h +++ b/lib/librte_eal/freebsd/include/rte_os.h @@ -13,6 +13,8 @@ #include +#define RTE_PATH_MAX PATH_MAX + typedef cpuset_t rte_cpuset_t; #define RTE_CPU_AND(dst, src1, src2) do \ { \ diff --git a/lib/librte_eal/linux/include/rte_os.h b/lib/librte_eal/linux/include/rte_os.h index 218d4fa86..af7d052d9 100644 --- a/lib/librte_eal/linux/include/rte_os.h +++ b/lib/librte_eal/linux/include/rte_os.h @@ -13,6 +13,8 @@ #include +#define RTE_PATH_MAX PATH_MAX + typedef cpu_set_t rte_cpuset_t; #define RTE_CPU_AND(dst, src1, src2) CPU_AND(dst, src1, src2) #define RTE_CPU_OR(dst, src1, src2) CPU_OR(dst, src1, src2) diff --git a/lib/librte_eal/windows/include/dirent.h b/lib/librte_eal/windows/include/dirent.h index 869a59837..3a9a694f4 100644 --- a/lib/librte_eal/windows/include/dirent.h +++ b/lib/librte_eal/windows/include/dirent.h @@ -28,11 +28,6 @@ #include #include -/* Maximum length of file name */ -#if !defined(PATH_MAX) -# define PATH_MAX MAX_PATH -#endif - /* File type flags for d_type */ #define DT_UNKNOWN 0 #define DT_REG S_IFREG @@ -67,7 +62,7 @@ struct _wdirent { int d_type; /* File name */ - wchar_t d_name[PATH_MAX]; + wchar_t d_name[RTE_PATH_MAX]; }; typedef struct _wdirent _wdirent; @@ -113,7 +108,7 @@ struct dirent { int d_type; /* File name */ - char d_name[PATH_MAX]; + char d_name[RTE_PATH_MAX]; }; typedef struct dirent dirent; @@ -388,12 +383,12 @@ opendir(const char *dirname) /* Allocate memory for DIR structure */ dirp = (DIR *)malloc(sizeof(struct DIR)); if (dirp) { - wchar_t wname[PATH_MAX]; + wchar_t wname[RTE_PATH_MAX]; size_t n; /* Convert directory name to wide-character string */ - error = dirent_mbstowcs_s(&n, wname, PATH_MAX, - dirname, PATH_MAX); + error = dirent_mbstowcs_s(&n, wname, RTE_PATH_MAX, + dirname, RTE_PATH_MAX); if (!error) { /* Open directory stream using wide-character name */ @@ -457,7 +452,7 @@ readdir(DIR *dirp) /* Attempt to convert file name to multi-byte string */ error = dirent_wcstombs_s(&n, dirp->ent.d_name, - PATH_MAX, datap->cFileName, PATH_MAX); + RTE_PATH_MAX, datap->cFileName, RTE_PATH_MAX); /* * If the file name cannot be represented by a multi-byte @@ -472,8 +467,8 @@ readdir(DIR *dirp) */ if (error && datap->cAlternateFileName[0] != '\0') { error = dirent_wcstombs_s( - &n, dirp->ent.d_name, PATH_MAX, - datap->cAlternateFileName, PATH_MAX); + &n, dirp->ent.d_name, RTE_PATH_MAX, + datap->cAlternateFileName, RTE_PATH_MAX); } if (!error) { diff --git a/lib/librte_eal/windows/include/rte_os.h b/lib/librte_eal/windows/include/rte_os.h index 7ef38ff06..edca11bd2 100644 --- a/lib/librte_eal/windows/include/rte_os.h +++ b/lib/librte_eal/windows/include/rte_os.h @@ -20,6 +20,8 @@ extern "C" { #endif +#define RTE_PATH_MAX _MAX_PATH + /* limits.h replacement, value as in */ #ifndef PATH_MAX #define PATH_MAX _MAX_PATH From patchwork Sun Feb 21 14:28:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88062 X-Patchwork-Delegate: thomas@monjalon.net 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 AD6EEA034F; Sun, 21 Feb 2021 15:28:53 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7D11E22A2C0; Sun, 21 Feb 2021 15:28:33 +0100 (CET) Received: from mail-lj1-f177.google.com (mail-lj1-f177.google.com [209.85.208.177]) by mails.dpdk.org (Postfix) with ESMTP id 6912522A286 for ; Sun, 21 Feb 2021 15:28:30 +0100 (CET) Received: by mail-lj1-f177.google.com with SMTP id c8so49225472ljd.12 for ; Sun, 21 Feb 2021 06:28:30 -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=/bYT2RLPUm8z74IPsM/9g/lpQLhv7IWPMlAjEQGx3V4=; b=XhEGFrcFZ8nAawRP+DEGJHNwYLJseMH7lySu9rWoK5+g60kWEVYfOJAQeMlo4eKtGX IQTxPlkkGAmhGicOxGN7NFTqLEIWyAFTNtOBKYs+utuUwAG/FGN5oaaCL/7nHs3f6Kb6 Pi5ChC1UGGC60vqe+TKBiO9c+0oMwV3WevpSChkQcfes5dxEsv/4U/n+Sh/guQby7+pH 4pQwYAq5/psvkylDzGiSpiMlPCUm2Fmhkpvk3ijwPwIINcGIDKt82FoBKWm66JXGywZK WaojUyYjGocn836ge4EZKG9wAoBr9vRjjR3KGEJICmHDfqfkdAlQS3SVNMTfcQT22MbA mpYA== 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=/bYT2RLPUm8z74IPsM/9g/lpQLhv7IWPMlAjEQGx3V4=; b=uYNPYF2Thpi+ROryN/7s1GSKxjMCFP9PwsdIrH5LiyLi7NjFLQOALmCaozASQfmd7Z ak1vAVAt56xZEdmQRa9P0H/xNmHyHVDOvdVc2Fzz1HBR1yecbbw1pAX4KGRYn9udIqV4 eZF2nd8yPsEXDBWpZ0p5B3qfQuZ3+OBNcO5RbKXcmALxYtVW6NEOF1oPd+QBfkDrRziC murNYjG1wBLGYCkSLQFFrgFhN3zne+UKZWc9ftAFhn/9A5tf5p6L/H2kthyvoU2iqY+M udsx3hUreoZocdO3eOeacz8218impjmffWksa3YaRWzFSKYlpaSV7Tos9i4xHinkc94u 9/nQ== X-Gm-Message-State: AOAM531jiThamKDzDR6vWpENr79LMqYNO/DtvXRxTRiefgM09Lg/fzzQ Oqd/1zotT28RkJ8GfCPBV+wxUC8YZQ0iuyqp X-Google-Smtp-Source: ABdhPJyqDhBfmLYsAN6x0BaB73lEOcnlpl+e8aWO5rX4XyGmj9VEwHa78g6UONqi8Sns992cydt8pQ== X-Received: by 2002:a2e:7f10:: with SMTP id a16mr6333456ljd.504.1613917709840; Sun, 21 Feb 2021 06:28:29 -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.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Feb 2021 06:28:29 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tal Shnaiderman , Dmitry Kozlyuk , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam , Ray Kinsella , Neil Horman Date: Sun, 21 Feb 2021 17:28:15 +0300 Message-Id: <20210221142819.6769-4-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 Subject: [dpdk-dev] [PATCH v3 3/7] eal: add sleep API 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" POSIX sleep(3) is missing from Windows. Add generic rte_thread_sleep() to suspend current OS thread. Signed-off-by: Dmitry Kozlyuk Acked-by: Khoa To --- lib/librte_eal/common/eal_common_timer.c | 5 +++-- lib/librte_eal/include/rte_thread.h | 11 +++++++++++ lib/librte_eal/rte_eal_exports.def | 2 ++ lib/librte_eal/unix/rte_thread.c | 10 +++++++++- lib/librte_eal/version.map | 3 +++ lib/librte_eal/windows/eal_thread.c | 9 ++++++++- 6 files changed, 36 insertions(+), 4 deletions(-) diff --git a/lib/librte_eal/common/eal_common_timer.c b/lib/librte_eal/common/eal_common_timer.c index 71e0bd035..0e89a4f7d 100644 --- a/lib/librte_eal/common/eal_common_timer.c +++ b/lib/librte_eal/common/eal_common_timer.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "eal_private.h" #include "eal_memcfg.h" @@ -47,9 +48,9 @@ estimate_tsc_freq(void) #define CYC_PER_10MHZ 1E7 RTE_LOG(WARNING, EAL, "WARNING: TSC frequency estimated roughly" " - clock timings may be less accurate.\n"); - /* assume that the sleep(1) will sleep for 1 second */ + /* assume that the rte_thread_sleep(1) will sleep for 1 second */ uint64_t start = rte_rdtsc(); - sleep(1); + rte_thread_sleep(1); /* Round up to 10Mhz. 1E7 ~ 10Mhz */ return RTE_ALIGN_MUL_NEAR(rte_rdtsc() - start, CYC_PER_10MHZ); } diff --git a/lib/librte_eal/include/rte_thread.h b/lib/librte_eal/include/rte_thread.h index e640ea185..f0c12dd79 100644 --- a/lib/librte_eal/include/rte_thread.h +++ b/lib/librte_eal/include/rte_thread.h @@ -106,6 +106,17 @@ int rte_thread_tls_value_set(rte_tls_key key, const void *value); __rte_experimental void *rte_thread_tls_value_get(rte_tls_key key); +/** + * Suspend current OS thread for the specified time, yielding CPU to scheduler. + * + * @param sec + * Number of seconds to sleep. The system may return control later, + * but not earlier. Zero value always yields the CPU, but control may be + * returned immediately. + */ +__rte_experimental +void rte_thread_sleep(unsigned int sec); + #ifdef __cplusplus } #endif diff --git a/lib/librte_eal/rte_eal_exports.def b/lib/librte_eal/rte_eal_exports.def index 474cf123f..494240b94 100644 --- a/lib/librte_eal/rte_eal_exports.def +++ b/lib/librte_eal/rte_eal_exports.def @@ -334,3 +334,5 @@ EXPORTS rte_mem_map rte_mem_page_size rte_mem_unmap + + rte_thread_sleep diff --git a/lib/librte_eal/unix/rte_thread.c b/lib/librte_eal/unix/rte_thread.c index 86ffeebc9..91babfe88 100644 --- a/lib/librte_eal/unix/rte_thread.c +++ b/lib/librte_eal/unix/rte_thread.c @@ -3,10 +3,12 @@ */ #include -#include #include #include +#include +#include + #include #include #include @@ -84,3 +86,9 @@ rte_thread_tls_value_get(rte_tls_key key) } return pthread_getspecific(key->thread_index); } + +void +rte_thread_sleep(unsigned int sec) +{ + sleep(sec); +} diff --git a/lib/librte_eal/version.map b/lib/librte_eal/version.map index fce90a112..b9240e7f8 100644 --- a/lib/librte_eal/version.map +++ b/lib/librte_eal/version.map @@ -412,6 +412,9 @@ EXPERIMENTAL { rte_thread_tls_key_delete; rte_thread_tls_value_get; rte_thread_tls_value_set; + + # added in 21.05 + rte_thread_sleep; }; INTERNAL { diff --git a/lib/librte_eal/windows/eal_thread.c b/lib/librte_eal/windows/eal_thread.c index 908e726d1..957792301 100644 --- a/lib/librte_eal/windows/eal_thread.c +++ b/lib/librte_eal/windows/eal_thread.c @@ -11,9 +11,10 @@ #include #include #include -#include +#include #include "eal_private.h" +#include "eal_thread.h" #include "eal_windows.h" /* @@ -154,3 +155,9 @@ rte_thread_setname(__rte_unused pthread_t id, __rte_unused const char *name) /* This is a stub, not the expected result */ return 0; } + +void +rte_thread_sleep(unsigned int sec) +{ + return Sleep(MS_PER_S * sec); +} From patchwork Sun Feb 21 14:28:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88063 X-Patchwork-Delegate: thomas@monjalon.net 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 9B868A034F; Sun, 21 Feb 2021 15:29:00 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AE74422A2CF; Sun, 21 Feb 2021 15:28:34 +0100 (CET) Received: from mail-lj1-f169.google.com (mail-lj1-f169.google.com [209.85.208.169]) by mails.dpdk.org (Postfix) with ESMTP id B219222A2BC for ; Sun, 21 Feb 2021 15:28:31 +0100 (CET) Received: by mail-lj1-f169.google.com with SMTP id q14so49264113ljp.4 for ; Sun, 21 Feb 2021 06:28:31 -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=q+E/j9rsoTh5jsrgzXTnX1xc/HqsqwkQuhT6CzsAzWE=; b=lahbTDk7lRbKh+b2S4wm6CzdumS50pv5PmX1bXLaGTlbXp/Ryrkdcdcoh4caKe4Xfs YoaS3mWjPmMvnmslDw//t5Glrto6nLPcEWctizPTAZ3QXBwe1thes74V8SmZzD1NU4LC UgxQf9CqNscrM0Xhs7kr1suKSKZv9vGaJdYkzRRZ7YiWO/NM4DMZxKb5LXZlqaaQoDjv JWQvgM32Xbb81uie/o4Rx18o9VmmPpPKCoG4s2XvE0IR5I5/2uecVcgJMHCuBbEbKQOB 6HP3znE0iWegOEnCD5exJwcJJggt1nF/FprUgaCuZV6/RdwLIY376huIjxLT2SQoiNQC y1xA== 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=q+E/j9rsoTh5jsrgzXTnX1xc/HqsqwkQuhT6CzsAzWE=; b=VG/sPOyefQazDqBYAYAMrmtI7XmD/CokLUm1UC7GUsIE8qiv2LEVLfVG7w8tRisp4p MmZTvOb2PwYOqI7+Eq7MZvG1aOu2UQZxxyu93xRN9SuGDeR6BALdMdMtaYsuc9cuuWgS BEG6uU+e1DL4MPEYdkRDNPOWHR/+yBm39NhqipjaG8748bnp9yjtZ3jsF7gqUdzyrCFZ QYFfFT4ufczTewSiCbdZ/9c4Ajqkg/9epaZcQNrRBcVp0++uAtyyfTAdx+aTzOutUnZj 84g9rgkJ71L6u0psmc5VZzTyAqUe1/jLFH1ba2t9eFkOYGveFNuw7RQTmZqr2ujorb20 NejA== X-Gm-Message-State: AOAM532G7Y4ZHDThHSUWt+hXjffz9Rqskr8Z0OBwhuwrzd5txDwuZdEH V4Rj8ejGk0VLggp/L9YrwUziv/nfxdCDrGff X-Google-Smtp-Source: ABdhPJxu8evmImgyoWDzAIAcx5xS+StFB7TLX5BnoelfZfNJj57w7ClGxz4cvFM2Uvl7WlzzLWN2pw== X-Received: by 2002:a2e:2f05:: with SMTP id v5mr10205310ljv.279.1613917711085; Sun, 21 Feb 2021 06:28:31 -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.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Feb 2021 06:28:30 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tal Shnaiderman , Dmitry Kozlyuk , Jerin Jacob , Sunil Kumar Kori , Narcisa Ana Maria Vasile , Dmitry Malloy , Pallavi Kadam Date: Sun, 21 Feb 2021 17:28:16 +0300 Message-Id: <20210221142819.6769-5-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 Subject: [dpdk-dev] [PATCH v3 4/7] eal: add asprintf() internal wrapper 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" POSIX asprintf() is unavailable on Windows. Add eal_asprintf() wrapper for EAL internal use. On Windows it's a function, on Unix it's a macro for asprintf(). Signed-off-by: Dmitry Kozlyuk Acked-by: Khoa To --- lib/librte_eal/common/eal_common_lcore.c | 2 +- lib/librte_eal/common/eal_common_options.c | 8 ++--- lib/librte_eal/common/eal_common_trace.c | 2 +- lib/librte_eal/common/eal_common_trace_ctf.c | 2 +- .../common/eal_common_trace_utils.c | 2 +- lib/librte_eal/common/eal_private.h | 18 +++++++++++ lib/librte_eal/windows/eal.c | 30 +++++++++++++++++++ 7 files changed, 56 insertions(+), 8 deletions(-) diff --git a/lib/librte_eal/common/eal_common_lcore.c b/lib/librte_eal/common/eal_common_lcore.c index 66d6bad1a..db16a34cc 100644 --- a/lib/librte_eal/common/eal_common_lcore.c +++ b/lib/librte_eal/common/eal_common_lcore.c @@ -282,7 +282,7 @@ rte_lcore_callback_register(const char *name, rte_lcore_init_cb init, callback = calloc(1, sizeof(*callback)); if (callback == NULL) return NULL; - if (asprintf(&callback->name, "%s-%p", name, arg) == -1) { + if (eal_asprintf(&callback->name, "%s-%p", name, arg) == -1) { free(callback); return NULL; } diff --git a/lib/librte_eal/common/eal_common_options.c b/lib/librte_eal/common/eal_common_options.c index bad389903..275f879d7 100644 --- a/lib/librte_eal/common/eal_common_options.c +++ b/lib/librte_eal/common/eal_common_options.c @@ -1435,7 +1435,7 @@ available_cores(void) return NULL; /* first sequence */ - if (asprintf(&str, "%d", idx) < 0) + if (eal_asprintf(&str, "%d", idx) < 0) return NULL; previous = idx; sequence = 0; @@ -1452,7 +1452,7 @@ available_cores(void) /* finish current sequence */ if (sequence) { - if (asprintf(&tmp, "%s-%d", str, previous) < 0) { + if (eal_asprintf(&tmp, "%s-%d", str, previous) < 0) { free(str); return NULL; } @@ -1461,7 +1461,7 @@ available_cores(void) } /* new sequence */ - if (asprintf(&tmp, "%s,%d", str, idx) < 0) { + if (eal_asprintf(&tmp, "%s,%d", str, idx) < 0) { free(str); return NULL; } @@ -1473,7 +1473,7 @@ available_cores(void) /* finish last sequence */ if (sequence) { - if (asprintf(&tmp, "%s-%d", str, previous) < 0) { + if (eal_asprintf(&tmp, "%s-%d", str, previous) < 0) { free(str); return NULL; } diff --git a/lib/librte_eal/common/eal_common_trace.c b/lib/librte_eal/common/eal_common_trace.c index 24e27387b..d57bb8ecc 100644 --- a/lib/librte_eal/common/eal_common_trace.c +++ b/lib/librte_eal/common/eal_common_trace.c @@ -435,7 +435,7 @@ __rte_trace_point_emit_field(size_t sz, const char *in, const char *datatype) fixup = trace_metadata_fixup_field(in); if (fixup != NULL) in = fixup; - rc = asprintf(&field, "%s %s %s;\n", + rc = eal_asprintf(&field, "%s %s %s;\n", RTE_PER_LCORE(ctf_field) != NULL ? RTE_PER_LCORE(ctf_field) : "", datatype, in); diff --git a/lib/librte_eal/common/eal_common_trace_ctf.c b/lib/librte_eal/common/eal_common_trace_ctf.c index 4041d9af6..31df7262e 100644 --- a/lib/librte_eal/common/eal_common_trace_ctf.c +++ b/lib/librte_eal/common/eal_common_trace_ctf.c @@ -389,7 +389,7 @@ char *trace_metadata_fixup_field(const char *field) for (i = 0; i < RTE_DIM(ctf_reserved_words); i++) { if (strcmp(field, ctf_reserved_words[i]) != 0) continue; - if (asprintf(&out, "_%s", ctf_reserved_words[i]) == -1) + if (eal_asprintf(&out, "_%s", ctf_reserved_words[i]) == -1) out = NULL; return out; } diff --git a/lib/librte_eal/common/eal_common_trace_utils.c b/lib/librte_eal/common/eal_common_trace_utils.c index 6b81fdeec..1773140ac 100644 --- a/lib/librte_eal/common/eal_common_trace_utils.c +++ b/lib/librte_eal/common/eal_common_trace_utils.c @@ -253,7 +253,7 @@ eal_trace_dir_args_save(char const *val) return -ENAMETOOLONG; } - if (asprintf(&dir_path, "%s/", val) == -1) { + if (eal_asprintf(&dir_path, "%s/", val) == -1) { trace_err("failed to copy directory: %s", strerror(errno)); return -ENOMEM; } diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h index 4684c4c7d..a5d9c5123 100644 --- a/lib/librte_eal/common/eal_private.h +++ b/lib/librte_eal/common/eal_private.h @@ -738,4 +738,22 @@ void __rte_thread_init(unsigned int lcore_id, rte_cpuset_t *cpuset); */ void __rte_thread_uninit(void); +/** + * Allocate a buffer large enough to hold the formatted string + * and perform formatting, equivalent to Unix asprintf(3). + * + * @param buffer + * Receives a pointer to allocated memory, call free(buffer) to deallocate. + * @param format + * Format string. + * @return + * Number of bytes allocated on success, (-1) on failure. + */ +#ifdef RTE_EXEC_ENV_WINDOWS +__rte_format_printf(2, 3) +int eal_asprintf(char **buffer, const char *format, ...); +#else +#define eal_asprintf asprintf +#endif + #endif /* _EAL_PRIVATE_H_ */ diff --git a/lib/librte_eal/windows/eal.c b/lib/librte_eal/windows/eal.c index 1e5f6576f..47495b36a 100644 --- a/lib/librte_eal/windows/eal.c +++ b/lib/librte_eal/windows/eal.c @@ -2,6 +2,8 @@ * Copyright(c) 2019 Intel Corporation */ +#include + #include #include #include @@ -410,6 +412,34 @@ rte_eal_init(int argc, char **argv) return fctret; } +/* Don't use MinGW asprintf() to have identical code with all toolchains. */ +int +eal_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 = 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; +} + int rte_vfio_container_dma_map(__rte_unused int container_fd, __rte_unused uint64_t vaddr, From patchwork Sun Feb 21 14:28:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88064 X-Patchwork-Delegate: thomas@monjalon.net 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 EF48AA034F; Sun, 21 Feb 2021 15:29:07 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DF2B922A2C5; Sun, 21 Feb 2021 15:28:35 +0100 (CET) Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) by mails.dpdk.org (Postfix) with ESMTP id 9BA4E22A2BD for ; Sun, 21 Feb 2021 15:28:32 +0100 (CET) Received: by mail-lj1-f176.google.com with SMTP id r11so4640819ljk.9 for ; Sun, 21 Feb 2021 06:28:32 -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=r8bmfTIjhTMfqOSZTKeB2VL8S+Pg71ymVvNvcArd5ZA=; b=qs3na/7wlYcSpCJAsIlrAdr1fmtVxoeUi48JXCd0+7OWy+BeJDnRdGv+X1zdr+uDja 8S2ZOZ0TbhYmLYn5SMygzOcAufh+nMshi8NueZF4mu3A/5OvvOHyro8NznzeQSnlWzpw iMXpn2svlYPTtHoeKSPEkBnMHhNGMGk+01pbAVZDRql+/qAwmHIEuTM1Gx0THiS3F1i6 y+UoOsvfUPd3aXSWmLn+4pBS18BmMVUc9bM6LqhwG3GVXqEGilrz8EbjABIW4gjADDeA a91cdg4O8urpg3oGDtKmp2GTyNm/YqCPSgiCaed1URNu8UVMFsX7iIAU0fDoX7DV8Z5c Ccnw== 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=r8bmfTIjhTMfqOSZTKeB2VL8S+Pg71ymVvNvcArd5ZA=; b=n05XTb3helmEYIbGZcZdqNJ91fZydLNc1Pv7ZVuz2hJhPbcLJyBPNChjEe3vv0SYIK A2W6G2RK/DxpVA4HW3DcCAHtsZ0kxhbjVp+4NZjNcF1veV6VAcj1Yl448LPtPGgC9Ls9 tnu8UAS3Na1AfX28rP+cropEAJCcbyNMW6FsZw9oZCYazRtnTeBAWF2u71tqiVNFIlpK tNqhZIKblsiIBMcm/pbxAoaNdd2KCORLLP8fSFI6UEux8UBgqj8jgP5un6o+PvHOm31s QN1lvdUYM0zZByn7ATZ1Ob0Bd3tukxHjoHg1Irvw5TpTDBd6yrUX3cyFfbQmp3otrhw+ wu4g== X-Gm-Message-State: AOAM530tkIjl786vAREw4InGTWYjRzhD9cxBO1FnS/AIZFrFpMfBqSx1 PGCRoHSdGrviveXXuzSFszXaPf4vowO9Ce1N X-Google-Smtp-Source: ABdhPJwFKZd9GKLwHs1lm+EyMF82g9Ziw/hk2v8SgTrKCLsQgvpC43okO32OZdN2/KSqTP+cJigDMQ== X-Received: by 2002:a2e:8ed4:: with SMTP id e20mr6436150ljl.55.1613917712042; Sun, 21 Feb 2021 06:28:32 -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.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Feb 2021 06:28:31 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tal Shnaiderman , Dmitry Kozlyuk , Olivier Matz , Thomas Monjalon , Ferruh Yigit , Andrew Rybchenko Date: Sun, 21 Feb 2021 17:28:17 +0300 Message-Id: <20210221142819.6769-6-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 Subject: [dpdk-dev] [PATCH v3 5/7] lib: remove POSIX dependencies 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" Replace POSIX strtok_r() with EAL rte_strtok(). Replace POSIX strdup() with EAL rte_strdup(). Locally rename Windows _close() to standard close(). Signed-off-by: Dmitry Kozlyuk Acked-by: Khoa To --- lib/librte_cmdline/cmdline.c | 1 + lib/librte_ethdev/rte_class_eth.c | 2 +- lib/librte_ethdev/rte_ethdev.c | 2 +- lib/librte_kvargs/rte_kvargs.c | 17 ++++++++++------- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/librte_cmdline/cmdline.c b/lib/librte_cmdline/cmdline.c index 79ea5f98c..4dfa1178f 100644 --- a/lib/librte_cmdline/cmdline.c +++ b/lib/librte_cmdline/cmdline.c @@ -19,6 +19,7 @@ #include "cmdline_private.h" #ifdef RTE_EXEC_ENV_WINDOWS +#define close _close #define write _write #endif diff --git a/lib/librte_ethdev/rte_class_eth.c b/lib/librte_ethdev/rte_class_eth.c index ca2ce87f7..9b72bdf15 100644 --- a/lib/librte_ethdev/rte_class_eth.c +++ b/lib/librte_ethdev/rte_class_eth.c @@ -73,7 +73,7 @@ eth_representor_cmp(const char *key __rte_unused, return -1; /* not a representor port */ /* Parse devargs representor values. */ - values = strdup(value); + values = rte_strdup(value); if (values == NULL) return -1; memset(&representors, 0, sizeof(representors)); diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c index 6f514c388..a09fec2ce 100644 --- a/lib/librte_ethdev/rte_ethdev.c +++ b/lib/librte_ethdev/rte_ethdev.c @@ -5515,7 +5515,7 @@ eth_dev_devargs_tokenise(struct rte_kvargs *arglist, const char *str_in) struct rte_kvargs_pair *pair; char *letter; - arglist->str = strdup(str_in); + arglist->str = rte_strdup(str_in); if (arglist->str == NULL) return -ENOMEM; diff --git a/lib/librte_kvargs/rte_kvargs.c b/lib/librte_kvargs/rte_kvargs.c index 285081c86..fd1103b33 100644 --- a/lib/librte_kvargs/rte_kvargs.c +++ b/lib/librte_kvargs/rte_kvargs.c @@ -26,20 +26,22 @@ rte_kvargs_tokenize(struct rte_kvargs *kvlist, const char *params) /* Copy the const char *params to a modifiable string * to pass to rte_strsplit */ - kvlist->str = strdup(params); + kvlist->str = rte_strdup(params); if (kvlist->str == NULL) return -1; /* browse each key/value pair and add it in kvlist */ str = kvlist->str; - while ((str = strtok_r(str, RTE_KVARGS_PAIRS_DELIM, &ctx1)) != NULL) { + while ((str = rte_strtok(str, RTE_KVARGS_PAIRS_DELIM, &ctx1)) != NULL) { i = kvlist->count; if (i >= RTE_KVARGS_MAX) return -1; - kvlist->pairs[i].key = strtok_r(str, RTE_KVARGS_KV_DELIM, &ctx2); - kvlist->pairs[i].value = strtok_r(NULL, RTE_KVARGS_KV_DELIM, &ctx2); + kvlist->pairs[i].key = rte_strtok( + str, RTE_KVARGS_KV_DELIM, &ctx2); + kvlist->pairs[i].value = rte_strtok( + NULL, RTE_KVARGS_KV_DELIM, &ctx2); if (kvlist->pairs[i].key == NULL || kvlist->pairs[i].value == NULL) return -1; @@ -49,12 +51,13 @@ rte_kvargs_tokenize(struct rte_kvargs *kvlist, const char *params) if (str[0] == '[') { /* Find the end of the list. */ while (str[strlen(str) - 1] != ']') { - /* Restore the comma erased by strtok_r(). */ + /* Restore the comma erased by rte_strtok(). */ if (ctx1 == NULL || ctx1[0] == '\0') return -1; /* no closing bracket */ str[strlen(str)] = ','; /* Parse until next comma. */ - str = strtok_r(NULL, RTE_KVARGS_PAIRS_DELIM, &ctx1); + str = rte_strtok( + NULL, RTE_KVARGS_PAIRS_DELIM, &ctx1); if (str == NULL) return -1; /* no closing bracket */ } @@ -199,7 +202,7 @@ rte_kvargs_parse_delim(const char *args, const char * const valid_keys[], if (valid_ends == NULL) return rte_kvargs_parse(args, valid_keys); - copy = strdup(args); + copy = rte_strdup(args); if (copy == NULL) return NULL; From patchwork Sun Feb 21 14:28:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88065 X-Patchwork-Delegate: thomas@monjalon.net 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 4F6C4A034F; Sun, 21 Feb 2021 15:29:14 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 21B3F22A2D9; Sun, 21 Feb 2021 15:28:37 +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 BF8B322A2C3 for ; Sun, 21 Feb 2021 15:28:33 +0100 (CET) Received: by mail-lj1-f175.google.com with SMTP id e8so10453169ljj.5 for ; Sun, 21 Feb 2021 06:28:33 -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=Hj6nlfyINy4JqhZBvmbQFP7COVG0nPkA5j9iJp4hv5M=; b=oFRccWRRM7Te0A8QdY/itQZCDHmm7yHBOIx28GD/hvwv73R5X/BqmlFt4jfyILU0Qt b4s6AzhNd6hvyDITGkw62E7YkPNLKXhBqF6Bf2SppBA6fezHuGbeMxjXyht0hPT65rfW hXMCHPOKUmI56K9DpI5v1FXs9P8Hfxi7oeOyiWarOHrwtm9s/A8RECtNkUv/ZeJO4R6J 8gFjUqDh7gqcaj3E7eXBwbzuVWskGFuQRV9hB7+gEk/9/QQM6bvgAsHX9VOdngKgdTEp zLAaglLC5SoY2oNu/18lUQ5iKHRrvDvfvL+euGwgkrslP5UOt+WMEb6knBYy/CCko9uZ 5sPw== 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=Hj6nlfyINy4JqhZBvmbQFP7COVG0nPkA5j9iJp4hv5M=; b=FHJZv8aKXz6jUgolPFFMpHljxIHprLvysCnN+HASIHFYTFriJXq74WgPrPklGLGTOj waVHxUyDTin++kHWJYLejfiAfSjJY2F/sPK9Gy0OBJN7k8tPcygiA7GHxlIb3HUmZUtY 03xNWmTawn4UDJeR6ranVBijT1XOQpiPqwaFqxNaOwxK9eliQwwKrD42R/lZ/SVhpiQI 7IOwaTN3GQc8Z+Tivse7zyrZUNqesnmNWOZO7O/5a6c/QJltrig6z4+KhgmJdsf8Yh7Z vZL56zb8MyNqZjRUvKe6V2nUEUjy2F12P9ygU8WSd+Ac05IYhZYJW4ZdwKrXjwIsjaLe 7tdg== X-Gm-Message-State: AOAM533Zj+Yzuy2hGomTkXKXRb1dUrTYY+6G5kchSo038aNdmH1/PUUK XTImfy6Ja7QvoIK3BfT3yY//Y/AI6if8sdXY X-Google-Smtp-Source: ABdhPJx4FkdHamyZzqvGBAzeKXDah7iIMJg3XsDmM+R31v/LE99oZGBCbCNyBNI+w6YGhMT6wZJgMw== X-Received: by 2002:a2e:9903:: with SMTP id v3mr9921198lji.179.1613917713066; Sun, 21 Feb 2021 06:28:33 -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.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Feb 2021 06:28:32 -0800 (PST) From: Dmitry Kozlyuk To: dev@dpdk.org Cc: Tal Shnaiderman , Dmitry Kozlyuk , Matan Azrad , Shahaf Shuler , Viacheslav Ovsiienko , Beilei Xing , Jeff Guo Date: Sun, 21 Feb 2021 17:28:18 +0300 Message-Id: <20210221142819.6769-7-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 Subject: [dpdk-dev] [PATCH v3 6/7] drivers: remove POSIX dependencies 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" Replace POSIX strncasecmp() with EAL rte_strncasecmp(). Replace POSIX strtok_r() with EAL rte_strtok(). Replace POSIX strdup() with EAL rte_strdup(). Signed-off-by: Dmitry Kozlyuk Acked-by: Khoa To --- i40e: checkpatches.sh complains about long lines (it's ~85). I doubt that mechanical fix would keep the code readable. It's on 5th level of indentation, so I'd extract a function, but would like to hear from maintainers first. drivers/bus/pci/private.h | 2 +- drivers/bus/vdev/vdev.c | 4 +- drivers/bus/vdev/vdev_params.c | 3 +- drivers/common/mlx5/mlx5_common_pci.c | 6 +-- drivers/common/mlx5/mlx5_common_pci.h | 1 + drivers/net/i40e/i40e_ethdev.c | 56 +++++++++++++-------------- drivers/net/mlx5/mlx5.c | 4 ++ 7 files changed, 41 insertions(+), 35 deletions(-) diff --git a/drivers/bus/pci/private.h b/drivers/bus/pci/private.h index f566943f5..5648916d1 100644 --- a/drivers/bus/pci/private.h +++ b/drivers/bus/pci/private.h @@ -92,7 +92,7 @@ struct mapped_pci_resource { TAILQ_ENTRY(mapped_pci_resource) next; struct rte_pci_addr pci_addr; - char path[PATH_MAX]; + char path[RTE_PATH_MAX]; int nb_maps; struct pci_map maps[PCI_MAX_RESOURCE]; struct pci_msix_table msix_table; diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c index 9a673347a..a490d26a2 100644 --- a/drivers/bus/vdev/vdev.c +++ b/drivers/bus/vdev/vdev.c @@ -245,9 +245,9 @@ alloc_devargs(const char *name, const char *args) devargs->bus = &rte_vdev_bus; if (args) - devargs->args = strdup(args); + devargs->args = rte_strdup(args); else - devargs->args = strdup(""); + devargs->args = rte_strdup(""); ret = strlcpy(devargs->name, name, sizeof(devargs->name)); if (ret < 0 || ret >= (int)sizeof(devargs->name)) { diff --git a/drivers/bus/vdev/vdev_params.c b/drivers/bus/vdev/vdev_params.c index 6f74704d1..64848f4c2 100644 --- a/drivers/bus/vdev/vdev_params.c +++ b/drivers/bus/vdev/vdev_params.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "vdev_logs.h" #include "vdev_private.h" @@ -31,7 +32,7 @@ vdev_dev_match(const struct rte_device *dev, char *name; /* cannot pass const dev->name to rte_kvargs_process() */ - name = strdup(dev->name); + name = rte_strdup(dev->name); if (name == NULL) return -1; ret = rte_kvargs_process(kvlist, diff --git a/drivers/common/mlx5/mlx5_common_pci.c b/drivers/common/mlx5/mlx5_common_pci.c index 2b657686d..0b2c50f46 100644 --- a/drivers/common/mlx5/mlx5_common_pci.c +++ b/drivers/common/mlx5/mlx5_common_pci.c @@ -82,13 +82,13 @@ bus_cmdline_options_handler(__rte_unused const char *key, char *refstr = NULL; *ret = 0; - nstr = strdup(class_names); + nstr = rte_strdup(class_names); if (!nstr) { *ret = -ENOMEM; return *ret; } nstr_org = nstr; - found = strtok_r(nstr, ":", &refstr); + found = rte_strtok(nstr, ":", &refstr); if (!found) goto err; do { @@ -102,7 +102,7 @@ bus_cmdline_options_handler(__rte_unused const char *key, goto err; } *ret |= class_val; - found = strtok_r(NULL, ":", &refstr); + found = rte_strtok(NULL, ":", &refstr); } while (found); err: free(nstr_org); diff --git a/drivers/common/mlx5/mlx5_common_pci.h b/drivers/common/mlx5/mlx5_common_pci.h index de89bb98b..729d0f4cc 100644 --- a/drivers/common/mlx5/mlx5_common_pci.h +++ b/drivers/common/mlx5/mlx5_common_pci.h @@ -45,6 +45,7 @@ extern "C" { #include #include +#include #include diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index d7cd04989..5b806d201 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -12036,110 +12036,110 @@ i40e_update_customized_ptype(struct rte_eth_dev *dev, uint8_t *pkg, memset(name, 0, sizeof(name)); strcpy(name, proto[n].name); PMD_DRV_LOG(INFO, "name = %s\n", name); - if (!strncasecmp(name, "PPPOE", 5)) + if (!rte_strncasecmp(name, "PPPOE", 5)) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L2_ETHER_PPPOE; - else if (!strncasecmp(name, "IPV4FRAG", 8) && + else if (!rte_strncasecmp(name, "IPV4FRAG", 8) && !in_tunnel) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_L3_IPV4_EXT_UNKNOWN; ptype_mapping[i].sw_ptype |= RTE_PTYPE_L4_FRAG; - } else if (!strncasecmp(name, "IPV4FRAG", 8) && + } else if (!rte_strncasecmp(name, "IPV4FRAG", 8) && in_tunnel) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN; ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L4_FRAG; - } else if (!strncasecmp(name, "OIPV4", 5)) { + } else if (!rte_strncasecmp(name, "OIPV4", 5)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_L3_IPV4_EXT_UNKNOWN; in_tunnel = true; - } else if (!strncasecmp(name, "IPV4", 4) && + } else if (!rte_strncasecmp(name, "IPV4", 4) && !in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L3_IPV4_EXT_UNKNOWN; - else if (!strncasecmp(name, "IPV4", 4) && + else if (!rte_strncasecmp(name, "IPV4", 4) && in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN; - else if (!strncasecmp(name, "IPV6FRAG", 8) && + else if (!rte_strncasecmp(name, "IPV6FRAG", 8) && !in_tunnel) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_L3_IPV6_EXT_UNKNOWN; ptype_mapping[i].sw_ptype |= RTE_PTYPE_L4_FRAG; - } else if (!strncasecmp(name, "IPV6FRAG", 8) && + } else if (!rte_strncasecmp(name, "IPV6FRAG", 8) && in_tunnel) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN; ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L4_FRAG; - } else if (!strncasecmp(name, "OIPV6", 5)) { + } else if (!rte_strncasecmp(name, "OIPV6", 5)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_L3_IPV6_EXT_UNKNOWN; in_tunnel = true; - } else if (!strncasecmp(name, "IPV6", 4) && + } else if (!rte_strncasecmp(name, "IPV6", 4) && !in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L3_IPV6_EXT_UNKNOWN; - else if (!strncasecmp(name, "IPV6", 4) && + else if (!rte_strncasecmp(name, "IPV6", 4) && in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN; - else if (!strncasecmp(name, "UDP", 3) && + else if (!rte_strncasecmp(name, "UDP", 3) && !in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L4_UDP; - else if (!strncasecmp(name, "UDP", 3) && + else if (!rte_strncasecmp(name, "UDP", 3) && in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L4_UDP; - else if (!strncasecmp(name, "TCP", 3) && + else if (!rte_strncasecmp(name, "TCP", 3) && !in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L4_TCP; - else if (!strncasecmp(name, "TCP", 3) && + else if (!rte_strncasecmp(name, "TCP", 3) && in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L4_TCP; - else if (!strncasecmp(name, "SCTP", 4) && + else if (!rte_strncasecmp(name, "SCTP", 4) && !in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L4_SCTP; - else if (!strncasecmp(name, "SCTP", 4) && + else if (!rte_strncasecmp(name, "SCTP", 4) && in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L4_SCTP; - else if ((!strncasecmp(name, "ICMP", 4) || - !strncasecmp(name, "ICMPV6", 6)) && + else if ((!rte_strncasecmp(name, "ICMP", 4) || + !rte_strncasecmp(name, "ICMPV6", 6)) && !in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_L4_ICMP; - else if ((!strncasecmp(name, "ICMP", 4) || - !strncasecmp(name, "ICMPV6", 6)) && + else if ((!rte_strncasecmp(name, "ICMP", 4) || + !rte_strncasecmp(name, "ICMPV6", 6)) && in_tunnel) ptype_mapping[i].sw_ptype |= RTE_PTYPE_INNER_L4_ICMP; - else if (!strncasecmp(name, "GTPC", 4)) { + else if (!rte_strncasecmp(name, "GTPC", 4)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_TUNNEL_GTPC; in_tunnel = true; - } else if (!strncasecmp(name, "GTPU", 4)) { + } else if (!rte_strncasecmp(name, "GTPU", 4)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_TUNNEL_GTPU; in_tunnel = true; - } else if (!strncasecmp(name, "ESP", 3)) { + } else if (!rte_strncasecmp(name, "ESP", 3)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_TUNNEL_ESP; in_tunnel = true; - } else if (!strncasecmp(name, "GRENAT", 6)) { + } else if (!rte_strncasecmp(name, "GRENAT", 6)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_TUNNEL_GRENAT; in_tunnel = true; - } else if (!strncasecmp(name, "L2TPV2CTL", 9) || - !strncasecmp(name, "L2TPV2", 6) || - !strncasecmp(name, "L2TPV3", 6)) { + } else if (!rte_strncasecmp(name, "L2TPV2CTL", 9) || + !rte_strncasecmp(name, "L2TPV2", 6) || + !rte_strncasecmp(name, "L2TPV3", 6)) { ptype_mapping[i].sw_ptype |= RTE_PTYPE_TUNNEL_L2TP; in_tunnel = true; diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c index aae2ef9af..22fbcef7e 100644 --- a/drivers/net/mlx5/mlx5.c +++ b/drivers/net/mlx5/mlx5.c @@ -41,6 +41,10 @@ #include "mlx5_flow_os.h" #include "rte_pmd_mlx5.h" +#ifdef RTE_EXEC_ENV_WINDOWS +#define close _close +#endif + /* Device parameter to enable RX completion queue compression. */ #define MLX5_RXQ_CQE_COMP_EN "rxq_cqe_comp_en" From patchwork Sun Feb 21 14:28:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Kozlyuk X-Patchwork-Id: 88066 X-Patchwork-Delegate: thomas@monjalon.net 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 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 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 Acked-by: Khoa To --- 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