* [dpdk-dev] [PATCH 0/2] Windows logging @ 2020-04-29 23:24 Pallavi Kadam 2020-04-29 23:24 ` [dpdk-dev] [PATCH 1/2] eal: initialize eal logging on Windows Pallavi Kadam ` (3 more replies) 0 siblings, 4 replies; 16+ messages in thread From: Pallavi Kadam @ 2020-04-29 23:24 UTC (permalink / raw) To: dev, thomas Cc: ranjit.menon, Harini.Ramakrishnan, Narcisa.Vasile, dmitry.kozliuk, tbashar, pallavi.kadam This patchset adds EAL logging support on Windows. Logs will be sent to console output. Pallavi Kadam (2): eal: initialize eal logging on Windows eal: add fnmatch implementation on Windows lib/librte_eal/windows/eal.c | 3 + lib/librte_eal/windows/eal_log.c | 16 +++ lib/librte_eal/windows/fnmatch.c | 172 +++++++++++++++++++++++ lib/librte_eal/windows/include/fnmatch.h | 16 +-- lib/librte_eal/windows/meson.build | 2 + 5 files changed, 201 insertions(+), 8 deletions(-) create mode 100644 lib/librte_eal/windows/eal_log.c create mode 100644 lib/librte_eal/windows/fnmatch.c -- 2.18.0.windows.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [dpdk-dev] [PATCH 1/2] eal: initialize eal logging on Windows 2020-04-29 23:24 [dpdk-dev] [PATCH 0/2] Windows logging Pallavi Kadam @ 2020-04-29 23:24 ` Pallavi Kadam 2020-04-29 23:24 ` [dpdk-dev] [PATCH 2/2] eal: add fnmatch implementation " Pallavi Kadam ` (2 subsequent siblings) 3 siblings, 0 replies; 16+ messages in thread From: Pallavi Kadam @ 2020-04-29 23:24 UTC (permalink / raw) To: dev, thomas Cc: ranjit.menon, Harini.Ramakrishnan, Narcisa.Vasile, dmitry.kozliuk, tbashar, pallavi.kadam Add logging function on Windows to send log output to the console. Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com> Reviewed-by: Ranjit Menon <ranjit.menon@intel.com> Reviewed-by: Tasnim Bashar <tbashar@mellanox.com> Tested-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com> --- lib/librte_eal/windows/eal.c | 3 +++ lib/librte_eal/windows/eal_log.c | 16 ++++++++++++++++ lib/librte_eal/windows/meson.build | 1 + 3 files changed, 20 insertions(+) create mode 100644 lib/librte_eal/windows/eal_log.c diff --git a/lib/librte_eal/windows/eal.c b/lib/librte_eal/windows/eal.c index 2cf7a04ef..123afed8d 100644 --- a/lib/librte_eal/windows/eal.c +++ b/lib/librte_eal/windows/eal.c @@ -227,6 +227,9 @@ rte_eal_init(int argc, char **argv) { int i, fctret; + /* initialize all logs */ + rte_eal_log_init(NULL, 0); + eal_log_level_parse(argc, argv); /* create a map of all processors in the system */ diff --git a/lib/librte_eal/windows/eal_log.c b/lib/librte_eal/windows/eal_log.c new file mode 100644 index 000000000..875981f13 --- /dev/null +++ b/lib/librte_eal/windows/eal_log.c @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2017-2018 Intel Corporation + */ + +#include "eal_private.h" + +/* set the log to default function, called during eal init process. */ +int +rte_eal_log_init(__rte_unused const char *id, __rte_unused int facility) +{ + rte_openlog_stream(stderr); + + eal_log_set_default(stderr); + + return 0; +} diff --git a/lib/librte_eal/windows/meson.build b/lib/librte_eal/windows/meson.build index 09dd4ab2f..e5d1d8336 100644 --- a/lib/librte_eal/windows/meson.build +++ b/lib/librte_eal/windows/meson.build @@ -7,6 +7,7 @@ sources += files( 'eal.c', 'eal_debug.c', 'eal_lcore.c', + 'eal_log.c', 'eal_thread.c', 'getopt.c', ) -- 2.18.0.windows.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [dpdk-dev] [PATCH 2/2] eal: add fnmatch implementation on Windows 2020-04-29 23:24 [dpdk-dev] [PATCH 0/2] Windows logging Pallavi Kadam 2020-04-29 23:24 ` [dpdk-dev] [PATCH 1/2] eal: initialize eal logging on Windows Pallavi Kadam @ 2020-04-29 23:24 ` Pallavi Kadam 2020-04-30 6:52 ` Thomas Monjalon 2020-04-30 6:48 ` [dpdk-dev] [PATCH 0/2] Windows logging Thomas Monjalon 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 " Pallavi Kadam 3 siblings, 1 reply; 16+ messages in thread From: Pallavi Kadam @ 2020-04-29 23:24 UTC (permalink / raw) To: dev, thomas Cc: ranjit.menon, Harini.Ramakrishnan, Narcisa.Vasile, dmitry.kozliuk, tbashar, pallavi.kadam Added fnmatch implementation on Windows to support log level arguments. The source file is with BSD-3-Clause license. https://github.com/lattera/freebsd/blob/master/usr.bin/csup/fnmatch.c Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com> Reviewed-by: Ranjit Menon <ranjit.menon@intel.com> Reviewed-by: Tasnim Bashar <tbashar@mellanox.com> Tested-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com> --- lib/librte_eal/windows/fnmatch.c | 172 +++++++++++++++++++++++ lib/librte_eal/windows/include/fnmatch.h | 16 +-- lib/librte_eal/windows/meson.build | 1 + 3 files changed, 181 insertions(+), 8 deletions(-) create mode 100644 lib/librte_eal/windows/fnmatch.c diff --git a/lib/librte_eal/windows/fnmatch.c b/lib/librte_eal/windows/fnmatch.c new file mode 100644 index 000000000..f622bf54c --- /dev/null +++ b/lib/librte_eal/windows/fnmatch.c @@ -0,0 +1,172 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 1989, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Guido van Rossum. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static const char sccsid[] = "@(#)fnmatch.c 8.2 (Berkeley) 4/16/94"; +#endif /* LIBC_SCCS and not lint */ + +/* + * Function fnmatch() as specified in POSIX 1003.2-1992, section B.6. + * Compares a filename or pathname to a pattern. + */ + +#include <ctype.h> +#include <string.h> +#include <stdio.h> + +#include "fnmatch.h" + +#define EOS '\0' + +static const char *rangematch(const char *, char, int); + +int +fnmatch(const char *pattern, const char *string, int flags) +{ + const char *stringstart; + char c, test; + + for (stringstart = string;;) + switch (c = *pattern++) { + case EOS: + if ((flags & FNM_LEADING_DIR) && *string == '/') + return (0); + return (*string == EOS ? 0 : FNM_NOMATCH); + case '?': + if (*string == EOS) + return (FNM_NOMATCH); + if (*string == '/' && (flags & FNM_PATHNAME)) + return (FNM_NOMATCH); + if (*string == '.' && (flags & FNM_PERIOD) && + (string == stringstart || + ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) + return (FNM_NOMATCH); + ++string; + break; + case '*': + c = *pattern; + /* Collapse multiple stars. */ + while (c == '*') + c = *++pattern; + + if (*string == '.' && (flags & FNM_PERIOD) && + (string == stringstart || + ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) + return (FNM_NOMATCH); + + /* Optimize for pattern with * at end or before /. */ + if (c == EOS) + if (flags & FNM_PATHNAME) + return ((flags & FNM_LEADING_DIR) || + strchr(string, '/') == NULL ? + 0 : FNM_NOMATCH); + else + return (0); + else if (c == '/' && flags & FNM_PATHNAME) { + string = strchr(string, '/'); + if (string == NULL) + return (FNM_NOMATCH); + break; + } + + /* General case, use recursion. */ + while ((test = *string) != EOS) { + if (!fnmatch(pattern, string, + flags & ~FNM_PERIOD)) + return (0); + if (test == '/' && flags & FNM_PATHNAME) + break; + ++string; + } + return (FNM_NOMATCH); + case '[': + if (*string == EOS) + return (FNM_NOMATCH); + if (*string == '/' && flags & FNM_PATHNAME) + return (FNM_NOMATCH); + pattern = rangematch(pattern, *string, flags); + if (pattern == NULL) + return (FNM_NOMATCH); + ++string; + break; + case '\\': + if (!(flags & FNM_NOESCAPE)) { + c = *pattern++; + if (c == EOS) { + c = '\\'; + --pattern; + } + } + /* FALLTHROUGH */ + default: + if (c == *string) + ; + else if ((flags & FNM_CASEFOLD) && + (tolower((unsigned char)c) == + tolower((unsigned char)*string))) + ; + else if ((flags & FNM_PREFIX_DIRS) && *string == EOS && + ((c == '/' && string != stringstart) || + (string == stringstart+1 && *stringstart == '/'))) + return (0); + else + return (FNM_NOMATCH); + string++; + break; + } + /* NOTREACHED */ +} + +static const char * +rangematch(const char *pattern, char test, int flags) +{ + int negate, ok; + char c, c2; + + /* + * A bracket expression starting with an unquoted circumflex + * character produces unspecified results (IEEE 1003.2-1992, + * 3.13.2). This implementation treats it like '!', for + * consistency with the regular expression syntax. + * J.T. Conklin (conklin@ngai.kaleida.com) + */ + negate = (*pattern == '!' || *pattern == '^'); + if (negate) + ++pattern; + + if (flags & FNM_CASEFOLD) + test = tolower((unsigned char)test); + + for (ok = 0; (c = *pattern++) != ']';) { + if (c == '\\' && !(flags & FNM_NOESCAPE)) + c = *pattern++; + if (c == EOS) + return (NULL); + + if (flags & FNM_CASEFOLD) + c = tolower((unsigned char)c); + + c2 = *(pattern + 1); + if (*pattern == '-' && c2 != EOS && c2 != ']') { + pattern += 2; + if (c2 == '\\' && !(flags & FNM_NOESCAPE)) + c2 = *pattern++; + if (c2 == EOS) + return (NULL); + + if (flags & FNM_CASEFOLD) + c2 = tolower((unsigned char)c2); + + if ((unsigned char)c <= (unsigned char)test && + (unsigned char)test <= (unsigned char)c2) + ok = 1; + } else if (c == test) + ok = 1; + } + return (ok == negate ? NULL : pattern); +} diff --git a/lib/librte_eal/windows/include/fnmatch.h b/lib/librte_eal/windows/include/fnmatch.h index d0159f07a..142753c35 100644 --- a/lib/librte_eal/windows/include/fnmatch.h +++ b/lib/librte_eal/windows/include/fnmatch.h @@ -18,6 +18,13 @@ extern "C" { #define FNM_NOMATCH 1 +#define FNM_NOESCAPE 0x01 +#define FNM_PATHNAME 0x02 +#define FNM_PERIOD 0x04 +#define FNM_LEADING_DIR 0x08 +#define FNM_CASEFOLD 0x10 +#define FNM_PREFIX_DIRS 0x20 + /** * This function is used for searhing a given string source * with the given regular expression pattern. @@ -34,14 +41,7 @@ extern "C" { * @return * if the pattern is found then return 0 or else FNM_NOMATCH */ -static inline int fnmatch(__rte_unused const char *pattern, - __rte_unused const char *string, - __rte_unused int flags) -{ - /* TODO */ - /* This is a stub, not the expected result */ - return FNM_NOMATCH; -} +int fnmatch(const char *pattern, const char *string, int flags); #ifdef __cplusplus } diff --git a/lib/librte_eal/windows/meson.build b/lib/librte_eal/windows/meson.build index e5d1d8336..adfc8b9b7 100644 --- a/lib/librte_eal/windows/meson.build +++ b/lib/librte_eal/windows/meson.build @@ -9,5 +9,6 @@ sources += files( 'eal_lcore.c', 'eal_log.c', 'eal_thread.c', + 'fnmatch.c', 'getopt.c', ) -- 2.18.0.windows.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH 2/2] eal: add fnmatch implementation on Windows 2020-04-29 23:24 ` [dpdk-dev] [PATCH 2/2] eal: add fnmatch implementation " Pallavi Kadam @ 2020-04-30 6:52 ` Thomas Monjalon 2020-04-30 7:30 ` Dmitry Kozlyuk 0 siblings, 1 reply; 16+ messages in thread From: Thomas Monjalon @ 2020-04-30 6:52 UTC (permalink / raw) To: Pallavi Kadam Cc: dev, ranjit.menon, Harini.Ramakrishnan, Narcisa.Vasile, dmitry.kozliuk, tbashar 30/04/2020 01:24, Pallavi Kadam: > Added fnmatch implementation on Windows to support > log level arguments. > The source file is with BSD-3-Clause license. > https://github.com/lattera/freebsd/blob/master/usr.bin/csup/fnmatch.c Sorry for the naive question, I don't know Windows programming. Do we really need this external code? Why RtlIsNameInExpression from Windows cannot be used? https://docs.microsoft.com/en-us/windows/win32/devnotes/rtlisnameinexpression ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH 2/2] eal: add fnmatch implementation on Windows 2020-04-30 6:52 ` Thomas Monjalon @ 2020-04-30 7:30 ` Dmitry Kozlyuk 2020-05-01 1:08 ` Ranjit Menon 0 siblings, 1 reply; 16+ messages in thread From: Dmitry Kozlyuk @ 2020-04-30 7:30 UTC (permalink / raw) To: Thomas Monjalon Cc: Pallavi Kadam, dev, ranjit.menon, Harini.Ramakrishnan, Narcisa.Vasile, tbashar On 2020-04-30 08:52 GMT+0200 Thomas Monjalon wrote: > 30/04/2020 01:24, Pallavi Kadam: > > Added fnmatch implementation on Windows to support > > log level arguments. > > The source file is with BSD-3-Clause license. > > https://github.com/lattera/freebsd/blob/master/usr.bin/csup/fnmatch.c > > Sorry for the naive question, I don't know Windows programming. > > Do we really need this external code? > Why RtlIsNameInExpression from Windows cannot be used? > https://docs.microsoft.com/en-us/windows/win32/devnotes/rtlisnameinexpression The general reason not to use Win32 API for globbing is poorly documented contract: what are the exact matching rules? They're definitely incompatible with fnmatch(3). IMO small external code is better than unknown behavior. RtlIsNameInExpression is an internal call for drivers and services with a cumbersome API. PathMatchSpecA is the user-mode interface, but see above. https://docs.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-pathmatchspeca -- Dmitry Kozlyuk ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH 2/2] eal: add fnmatch implementation on Windows 2020-04-30 7:30 ` Dmitry Kozlyuk @ 2020-05-01 1:08 ` Ranjit Menon 2020-05-04 16:51 ` Thomas Monjalon 0 siblings, 1 reply; 16+ messages in thread From: Ranjit Menon @ 2020-05-01 1:08 UTC (permalink / raw) To: Dmitry Kozlyuk, Thomas Monjalon Cc: Pallavi Kadam, dev, Harini.Ramakrishnan, Narcisa.Vasile, tbashar On 4/30/2020 12:30 AM, Dmitry Kozlyuk wrote: > On 2020-04-30 08:52 GMT+0200 Thomas Monjalon wrote: >> 30/04/2020 01:24, Pallavi Kadam: >>> Added fnmatch implementation on Windows to support >>> log level arguments. >>> The source file is with BSD-3-Clause license. >>> https://github.com/lattera/freebsd/blob/master/usr.bin/csup/fnmatch.c >> >> Sorry for the naive question, I don't know Windows programming. >> >> Do we really need this external code? >> Why RtlIsNameInExpression from Windows cannot be used? >> https://docs.microsoft.com/en-us/windows/win32/devnotes/rtlisnameinexpression > > The general reason not to use Win32 API for globbing is poorly documented > contract: what are the exact matching rules? They're definitely incompatible > with fnmatch(3). IMO small external code is better than unknown behavior. > > RtlIsNameInExpression is an internal call for drivers and services with a > cumbersome API. PathMatchSpecA is the user-mode interface, but see above. > > https://docs.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-pathmatchspeca > I will agree with Dmitry here. The fnmatch external code is shipping, production quality code. So it's better to use it than writing something new. ranjit m. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH 2/2] eal: add fnmatch implementation on Windows 2020-05-01 1:08 ` Ranjit Menon @ 2020-05-04 16:51 ` Thomas Monjalon 0 siblings, 0 replies; 16+ messages in thread From: Thomas Monjalon @ 2020-05-04 16:51 UTC (permalink / raw) To: Dmitry Kozlyuk, Ranjit Menon Cc: Pallavi Kadam, dev, Harini.Ramakrishnan, Narcisa.Vasile, tbashar 01/05/2020 03:08, Ranjit Menon: > On 4/30/2020 12:30 AM, Dmitry Kozlyuk wrote: > > On 2020-04-30 08:52 GMT+0200 Thomas Monjalon wrote: > >> 30/04/2020 01:24, Pallavi Kadam: > >>> Added fnmatch implementation on Windows to support > >>> log level arguments. > >>> The source file is with BSD-3-Clause license. > >>> https://github.com/lattera/freebsd/blob/master/usr.bin/csup/fnmatch.c > >> > >> Sorry for the naive question, I don't know Windows programming. > >> > >> Do we really need this external code? > >> Why RtlIsNameInExpression from Windows cannot be used? > >> https://docs.microsoft.com/en-us/windows/win32/devnotes/rtlisnameinexpression > > > > The general reason not to use Win32 API for globbing is poorly documented > > contract: what are the exact matching rules? They're definitely incompatible > > with fnmatch(3). IMO small external code is better than unknown behavior. > > > > RtlIsNameInExpression is an internal call for drivers and services with a > > cumbersome API. PathMatchSpecA is the user-mode interface, but see above. > > > > https://docs.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-pathmatchspeca > > > > I will agree with Dmitry here. The fnmatch external code is shipping, > production quality code. So it's better to use it than writing something > new. OK thank you for the explanations and opinions. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH 0/2] Windows logging 2020-04-29 23:24 [dpdk-dev] [PATCH 0/2] Windows logging Pallavi Kadam 2020-04-29 23:24 ` [dpdk-dev] [PATCH 1/2] eal: initialize eal logging on Windows Pallavi Kadam 2020-04-29 23:24 ` [dpdk-dev] [PATCH 2/2] eal: add fnmatch implementation " Pallavi Kadam @ 2020-04-30 6:48 ` Thomas Monjalon 2020-04-30 22:18 ` Kadam, Pallavi 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 " Pallavi Kadam 3 siblings, 1 reply; 16+ messages in thread From: Thomas Monjalon @ 2020-04-30 6:48 UTC (permalink / raw) To: Pallavi Kadam Cc: dev, ranjit.menon, Harini.Ramakrishnan, Narcisa.Vasile, dmitry.kozliuk, tbashar 30/04/2020 01:24, Pallavi Kadam: > This patchset adds EAL logging support on Windows. > Logs will be sent to console output. > > Pallavi Kadam (2): > eal: initialize eal logging on Windows > eal: add fnmatch implementation on Windows fnmatch is required to change the log level of logs specified with a globbing pattern. I think it would be nicer to introduce fnmatch first, and state in the other patch that logging is supported on Windows. Titles would be: eal/windows: add fnmatch implementation log: support on Windows ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH 0/2] Windows logging 2020-04-30 6:48 ` [dpdk-dev] [PATCH 0/2] Windows logging Thomas Monjalon @ 2020-04-30 22:18 ` Kadam, Pallavi 0 siblings, 0 replies; 16+ messages in thread From: Kadam, Pallavi @ 2020-04-30 22:18 UTC (permalink / raw) To: Thomas Monjalon Cc: dev, ranjit.menon, Harini.Ramakrishnan, Narcisa.Vasile, dmitry.kozliuk, tbashar On 4/29/2020 11:48 PM, Thomas Monjalon wrote: > 30/04/2020 01:24, Pallavi Kadam: >> This patchset adds EAL logging support on Windows. >> Logs will be sent to console output. >> >> Pallavi Kadam (2): >> eal: initialize eal logging on Windows >> eal: add fnmatch implementation on Windows > > fnmatch is required to change the log level of logs > specified with a globbing pattern. > > I think it would be nicer to introduce fnmatch first, > and state in the other patch that logging is supported on Windows. > > Titles would be: > eal/windows: add fnmatch implementation > log: support on Windows > > Ok, will interchange the sequence of the patches in v2. Thanks, ^ permalink raw reply [flat|nested] 16+ messages in thread
* [dpdk-dev] [PATCH v2 0/2] Windows logging 2020-04-29 23:24 [dpdk-dev] [PATCH 0/2] Windows logging Pallavi Kadam ` (2 preceding siblings ...) 2020-04-30 6:48 ` [dpdk-dev] [PATCH 0/2] Windows logging Thomas Monjalon @ 2020-05-06 1:30 ` Pallavi Kadam 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 1/2] eal: add fnmatch implementation Pallavi Kadam ` (2 more replies) 3 siblings, 3 replies; 16+ messages in thread From: Pallavi Kadam @ 2020-05-06 1:30 UTC (permalink / raw) To: dev, thomas Cc: ranjit.menon, dmitry.kozliuk, Narcisa.Vasile, tbashar, Harini.Ramakrishnan, pallavi.kadam This patchset adds EAL logging support on Windows. Logs will be sent to console output. v2 Changes: Introduced Fnmatch implementation first Added logging support in the second patch Pallavi Kadam (2): eal: add fnmatch implementation eal: add log support on Windows lib/librte_eal/windows/eal.c | 3 + lib/librte_eal/windows/eal_log.c | 16 +++ lib/librte_eal/windows/fnmatch.c | 172 +++++++++++++++++++++++ lib/librte_eal/windows/include/fnmatch.h | 16 +-- lib/librte_eal/windows/meson.build | 2 + 5 files changed, 201 insertions(+), 8 deletions(-) create mode 100644 lib/librte_eal/windows/eal_log.c create mode 100644 lib/librte_eal/windows/fnmatch.c -- 2.18.0.windows.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [dpdk-dev] [PATCH v2 1/2] eal: add fnmatch implementation 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 " Pallavi Kadam @ 2020-05-06 1:30 ` Pallavi Kadam 2020-05-06 2:24 ` Narcisa Ana Maria Vasile 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 2/2] eal: add log support on Windows Pallavi Kadam 2020-05-07 10:19 ` [dpdk-dev] [PATCH v2 0/2] Windows logging Thomas Monjalon 2 siblings, 1 reply; 16+ messages in thread From: Pallavi Kadam @ 2020-05-06 1:30 UTC (permalink / raw) To: dev, thomas Cc: ranjit.menon, dmitry.kozliuk, Narcisa.Vasile, tbashar, Harini.Ramakrishnan, pallavi.kadam Fnmatch implementation is required on Windows to support log level arguments specified with a globbing pattern. The source file is with BSD-3-Clause license. https://github.com/lattera/freebsd/blob/master/usr.bin/csup/fnmatch.c Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com> Reviewed-by: Ranjit Menon <ranjit.menon@intel.com> Reviewed-by: Tasnim Bashar <tbashar@mellanox.com> Tested-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com> --- lib/librte_eal/windows/fnmatch.c | 172 +++++++++++++++++++++++ lib/librte_eal/windows/include/fnmatch.h | 16 +-- lib/librte_eal/windows/meson.build | 1 + 3 files changed, 181 insertions(+), 8 deletions(-) create mode 100644 lib/librte_eal/windows/fnmatch.c diff --git a/lib/librte_eal/windows/fnmatch.c b/lib/librte_eal/windows/fnmatch.c new file mode 100644 index 000000000..f622bf54c --- /dev/null +++ b/lib/librte_eal/windows/fnmatch.c @@ -0,0 +1,172 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright (c) 1989, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Guido van Rossum. + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static const char sccsid[] = "@(#)fnmatch.c 8.2 (Berkeley) 4/16/94"; +#endif /* LIBC_SCCS and not lint */ + +/* + * Function fnmatch() as specified in POSIX 1003.2-1992, section B.6. + * Compares a filename or pathname to a pattern. + */ + +#include <ctype.h> +#include <string.h> +#include <stdio.h> + +#include "fnmatch.h" + +#define EOS '\0' + +static const char *rangematch(const char *, char, int); + +int +fnmatch(const char *pattern, const char *string, int flags) +{ + const char *stringstart; + char c, test; + + for (stringstart = string;;) + switch (c = *pattern++) { + case EOS: + if ((flags & FNM_LEADING_DIR) && *string == '/') + return (0); + return (*string == EOS ? 0 : FNM_NOMATCH); + case '?': + if (*string == EOS) + return (FNM_NOMATCH); + if (*string == '/' && (flags & FNM_PATHNAME)) + return (FNM_NOMATCH); + if (*string == '.' && (flags & FNM_PERIOD) && + (string == stringstart || + ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) + return (FNM_NOMATCH); + ++string; + break; + case '*': + c = *pattern; + /* Collapse multiple stars. */ + while (c == '*') + c = *++pattern; + + if (*string == '.' && (flags & FNM_PERIOD) && + (string == stringstart || + ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) + return (FNM_NOMATCH); + + /* Optimize for pattern with * at end or before /. */ + if (c == EOS) + if (flags & FNM_PATHNAME) + return ((flags & FNM_LEADING_DIR) || + strchr(string, '/') == NULL ? + 0 : FNM_NOMATCH); + else + return (0); + else if (c == '/' && flags & FNM_PATHNAME) { + string = strchr(string, '/'); + if (string == NULL) + return (FNM_NOMATCH); + break; + } + + /* General case, use recursion. */ + while ((test = *string) != EOS) { + if (!fnmatch(pattern, string, + flags & ~FNM_PERIOD)) + return (0); + if (test == '/' && flags & FNM_PATHNAME) + break; + ++string; + } + return (FNM_NOMATCH); + case '[': + if (*string == EOS) + return (FNM_NOMATCH); + if (*string == '/' && flags & FNM_PATHNAME) + return (FNM_NOMATCH); + pattern = rangematch(pattern, *string, flags); + if (pattern == NULL) + return (FNM_NOMATCH); + ++string; + break; + case '\\': + if (!(flags & FNM_NOESCAPE)) { + c = *pattern++; + if (c == EOS) { + c = '\\'; + --pattern; + } + } + /* FALLTHROUGH */ + default: + if (c == *string) + ; + else if ((flags & FNM_CASEFOLD) && + (tolower((unsigned char)c) == + tolower((unsigned char)*string))) + ; + else if ((flags & FNM_PREFIX_DIRS) && *string == EOS && + ((c == '/' && string != stringstart) || + (string == stringstart+1 && *stringstart == '/'))) + return (0); + else + return (FNM_NOMATCH); + string++; + break; + } + /* NOTREACHED */ +} + +static const char * +rangematch(const char *pattern, char test, int flags) +{ + int negate, ok; + char c, c2; + + /* + * A bracket expression starting with an unquoted circumflex + * character produces unspecified results (IEEE 1003.2-1992, + * 3.13.2). This implementation treats it like '!', for + * consistency with the regular expression syntax. + * J.T. Conklin (conklin@ngai.kaleida.com) + */ + negate = (*pattern == '!' || *pattern == '^'); + if (negate) + ++pattern; + + if (flags & FNM_CASEFOLD) + test = tolower((unsigned char)test); + + for (ok = 0; (c = *pattern++) != ']';) { + if (c == '\\' && !(flags & FNM_NOESCAPE)) + c = *pattern++; + if (c == EOS) + return (NULL); + + if (flags & FNM_CASEFOLD) + c = tolower((unsigned char)c); + + c2 = *(pattern + 1); + if (*pattern == '-' && c2 != EOS && c2 != ']') { + pattern += 2; + if (c2 == '\\' && !(flags & FNM_NOESCAPE)) + c2 = *pattern++; + if (c2 == EOS) + return (NULL); + + if (flags & FNM_CASEFOLD) + c2 = tolower((unsigned char)c2); + + if ((unsigned char)c <= (unsigned char)test && + (unsigned char)test <= (unsigned char)c2) + ok = 1; + } else if (c == test) + ok = 1; + } + return (ok == negate ? NULL : pattern); +} diff --git a/lib/librte_eal/windows/include/fnmatch.h b/lib/librte_eal/windows/include/fnmatch.h index d0159f07a..142753c35 100644 --- a/lib/librte_eal/windows/include/fnmatch.h +++ b/lib/librte_eal/windows/include/fnmatch.h @@ -18,6 +18,13 @@ extern "C" { #define FNM_NOMATCH 1 +#define FNM_NOESCAPE 0x01 +#define FNM_PATHNAME 0x02 +#define FNM_PERIOD 0x04 +#define FNM_LEADING_DIR 0x08 +#define FNM_CASEFOLD 0x10 +#define FNM_PREFIX_DIRS 0x20 + /** * This function is used for searhing a given string source * with the given regular expression pattern. @@ -34,14 +41,7 @@ extern "C" { * @return * if the pattern is found then return 0 or else FNM_NOMATCH */ -static inline int fnmatch(__rte_unused const char *pattern, - __rte_unused const char *string, - __rte_unused int flags) -{ - /* TODO */ - /* This is a stub, not the expected result */ - return FNM_NOMATCH; -} +int fnmatch(const char *pattern, const char *string, int flags); #ifdef __cplusplus } diff --git a/lib/librte_eal/windows/meson.build b/lib/librte_eal/windows/meson.build index 09dd4ab2f..8829407c4 100644 --- a/lib/librte_eal/windows/meson.build +++ b/lib/librte_eal/windows/meson.build @@ -8,5 +8,6 @@ sources += files( 'eal_debug.c', 'eal_lcore.c', 'eal_thread.c', + 'fnmatch.c', 'getopt.c', ) -- 2.18.0.windows.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH v2 1/2] eal: add fnmatch implementation 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 1/2] eal: add fnmatch implementation Pallavi Kadam @ 2020-05-06 2:24 ` Narcisa Ana Maria Vasile 0 siblings, 0 replies; 16+ messages in thread From: Narcisa Ana Maria Vasile @ 2020-05-06 2:24 UTC (permalink / raw) To: Pallavi Kadam Cc: dev, thomas, ranjit.menon, dmitry.kozliuk, Narcisa.Vasile, tbashar, Harini.Ramakrishnan, ocardona On Tue, May 05, 2020 at 06:30:31PM -0700, Pallavi Kadam wrote: > Fnmatch implementation is required on Windows to support > log level arguments specified with a globbing pattern. > The source file is with BSD-3-Clause license. > https://github.com/lattera/freebsd/blob/master/usr.bin/csup/fnmatch.c > > Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com> > Reviewed-by: Ranjit Menon <ranjit.menon@intel.com> > Reviewed-by: Tasnim Bashar <tbashar@mellanox.com> > Tested-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com> > --- Acked-by: Narcisa Vasile <navasile@linux.microsoft.com> ^ permalink raw reply [flat|nested] 16+ messages in thread
* [dpdk-dev] [PATCH v2 2/2] eal: add log support on Windows 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 " Pallavi Kadam 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 1/2] eal: add fnmatch implementation Pallavi Kadam @ 2020-05-06 1:30 ` Pallavi Kadam 2020-05-06 2:20 ` Narcisa Ana Maria Vasile 2020-05-07 10:17 ` Thomas Monjalon 2020-05-07 10:19 ` [dpdk-dev] [PATCH v2 0/2] Windows logging Thomas Monjalon 2 siblings, 2 replies; 16+ messages in thread From: Pallavi Kadam @ 2020-05-06 1:30 UTC (permalink / raw) To: dev, thomas Cc: ranjit.menon, dmitry.kozliuk, Narcisa.Vasile, tbashar, Harini.Ramakrishnan, pallavi.kadam Initialize logging on Windows to send log output to the console. Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com> Reviewed-by: Ranjit Menon <ranjit.menon@intel.com> Reviewed-by: Tasnim Bashar <tbashar@mellanox.com> Tested-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com> --- lib/librte_eal/windows/eal.c | 3 +++ lib/librte_eal/windows/eal_log.c | 16 ++++++++++++++++ lib/librte_eal/windows/meson.build | 1 + 3 files changed, 20 insertions(+) create mode 100644 lib/librte_eal/windows/eal_log.c diff --git a/lib/librte_eal/windows/eal.c b/lib/librte_eal/windows/eal.c index 2cf7a04ef..123afed8d 100644 --- a/lib/librte_eal/windows/eal.c +++ b/lib/librte_eal/windows/eal.c @@ -227,6 +227,9 @@ rte_eal_init(int argc, char **argv) { int i, fctret; + /* initialize all logs */ + rte_eal_log_init(NULL, 0); + eal_log_level_parse(argc, argv); /* create a map of all processors in the system */ diff --git a/lib/librte_eal/windows/eal_log.c b/lib/librte_eal/windows/eal_log.c new file mode 100644 index 000000000..875981f13 --- /dev/null +++ b/lib/librte_eal/windows/eal_log.c @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2017-2018 Intel Corporation + */ + +#include "eal_private.h" + +/* set the log to default function, called during eal init process. */ +int +rte_eal_log_init(__rte_unused const char *id, __rte_unused int facility) +{ + rte_openlog_stream(stderr); + + eal_log_set_default(stderr); + + return 0; +} diff --git a/lib/librte_eal/windows/meson.build b/lib/librte_eal/windows/meson.build index 8829407c4..adfc8b9b7 100644 --- a/lib/librte_eal/windows/meson.build +++ b/lib/librte_eal/windows/meson.build @@ -7,6 +7,7 @@ sources += files( 'eal.c', 'eal_debug.c', 'eal_lcore.c', + 'eal_log.c', 'eal_thread.c', 'fnmatch.c', 'getopt.c', -- 2.18.0.windows.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH v2 2/2] eal: add log support on Windows 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 2/2] eal: add log support on Windows Pallavi Kadam @ 2020-05-06 2:20 ` Narcisa Ana Maria Vasile 2020-05-07 10:17 ` Thomas Monjalon 1 sibling, 0 replies; 16+ messages in thread From: Narcisa Ana Maria Vasile @ 2020-05-06 2:20 UTC (permalink / raw) To: Pallavi Kadam Cc: dev, thomas, ranjit.menon, dmitry.kozliuk, Narcisa.Vasile, tbashar, Harini.Ramakrishnan On Tue, May 05, 2020 at 06:30:32PM -0700, Pallavi Kadam wrote: > Initialize logging on Windows to send log output > to the console. > > Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com> > Reviewed-by: Ranjit Menon <ranjit.menon@intel.com> > Reviewed-by: Tasnim Bashar <tbashar@mellanox.com> > Tested-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com> > --- Tested-by: Narcisa Vasile <navasile@linux.microsoft.com> Acked-by: Narcisa Vasile <navasile@linux.microsoft.com> ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH v2 2/2] eal: add log support on Windows 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 2/2] eal: add log support on Windows Pallavi Kadam 2020-05-06 2:20 ` Narcisa Ana Maria Vasile @ 2020-05-07 10:17 ` Thomas Monjalon 1 sibling, 0 replies; 16+ messages in thread From: Thomas Monjalon @ 2020-05-07 10:17 UTC (permalink / raw) To: Pallavi Kadam Cc: dev, ranjit.menon, dmitry.kozliuk, Narcisa.Vasile, tbashar, Harini.Ramakrishnan 06/05/2020 03:30, Pallavi Kadam: > Initialize logging on Windows to send log output > to the console. > > Signed-off-by: Pallavi Kadam <pallavi.kadam@intel.com> > Reviewed-by: Ranjit Menon <ranjit.menon@intel.com> > Reviewed-by: Tasnim Bashar <tbashar@mellanox.com> > Tested-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com> > --- The comment below is useless. I take freedom of dropping it on apply :-) > + /* initialize all logs */ > + rte_eal_log_init(NULL, 0); ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [dpdk-dev] [PATCH v2 0/2] Windows logging 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 " Pallavi Kadam 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 1/2] eal: add fnmatch implementation Pallavi Kadam 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 2/2] eal: add log support on Windows Pallavi Kadam @ 2020-05-07 10:19 ` Thomas Monjalon 2 siblings, 0 replies; 16+ messages in thread From: Thomas Monjalon @ 2020-05-07 10:19 UTC (permalink / raw) To: Pallavi Kadam Cc: dev, ranjit.menon, dmitry.kozliuk, Narcisa.Vasile, tbashar, Harini.Ramakrishnan 06/05/2020 03:30, Pallavi Kadam: > This patchset adds EAL logging support on Windows. > Logs will be sent to console output. > > v2 Changes: > Introduced Fnmatch implementation first > Added logging support in the second patch > > Pallavi Kadam (2): > eal: add fnmatch implementation > eal: add log support on Windows Applied, thanks ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2020-05-07 10:19 UTC | newest] Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-04-29 23:24 [dpdk-dev] [PATCH 0/2] Windows logging Pallavi Kadam 2020-04-29 23:24 ` [dpdk-dev] [PATCH 1/2] eal: initialize eal logging on Windows Pallavi Kadam 2020-04-29 23:24 ` [dpdk-dev] [PATCH 2/2] eal: add fnmatch implementation " Pallavi Kadam 2020-04-30 6:52 ` Thomas Monjalon 2020-04-30 7:30 ` Dmitry Kozlyuk 2020-05-01 1:08 ` Ranjit Menon 2020-05-04 16:51 ` Thomas Monjalon 2020-04-30 6:48 ` [dpdk-dev] [PATCH 0/2] Windows logging Thomas Monjalon 2020-04-30 22:18 ` Kadam, Pallavi 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 " Pallavi Kadam 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 1/2] eal: add fnmatch implementation Pallavi Kadam 2020-05-06 2:24 ` Narcisa Ana Maria Vasile 2020-05-06 1:30 ` [dpdk-dev] [PATCH v2 2/2] eal: add log support on Windows Pallavi Kadam 2020-05-06 2:20 ` Narcisa Ana Maria Vasile 2020-05-07 10:17 ` Thomas Monjalon 2020-05-07 10:19 ` [dpdk-dev] [PATCH v2 0/2] Windows logging Thomas Monjalon
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.