All of lore.kernel.org
 help / color / mirror / Atom feed
* [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 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 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 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

* 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

* [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

* [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 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

* 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.