[PATCH v2 1/4] eal/windows: translate Windows errors to errno-style errors

Tyler Retzlaff roretzla at linux.microsoft.com
Wed Apr 13 09:07:54 CEST 2022


On Tue, Apr 12, 2022 at 10:26:27AM -0700, Menon, Ranjit wrote:
> Hi, Tyler
> 
> On 4/12/2022 3:43 AM, Tyler Retzlaff wrote:
> >Add function to translate Windows error codes to errno-style error
> >codes. The possible return values are chosen so that we have as
> >much semantical compatibility between platforms as possible.
> >
> >Signed-off-by: Narcisa Vasile <navasile at microsoft.com>
> >Signed-off-by: Tyler Retzlaff <roretzla at linux.microsoft.com>
> >---
> >  lib/eal/windows/rte_thread.c | 49 ++++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 49 insertions(+)
> >
> >diff --git a/lib/eal/windows/rte_thread.c b/lib/eal/windows/rte_thread.c
> >index 667287c..c272018 100644
> >--- a/lib/eal/windows/rte_thread.c
> >+++ b/lib/eal/windows/rte_thread.c
> >@@ -1,5 +1,6 @@
> >  /* SPDX-License-Identifier: BSD-3-Clause
> >   * Copyright 2021 Mellanox Technologies, Ltd
> >+ * Copyright (C) 2022 Microsoft Corporation
> >   */
> >  #include <rte_common.h>
> >@@ -11,6 +12,54 @@ struct eal_tls_key {
> >  	DWORD thread_index;
> >  };
> >+/* Translates the most common error codes related to threads */
> >+static int
> >+thread_translate_win32_error(DWORD error)
> >+{
> >+	switch (error) {
> >+	case ERROR_SUCCESS:
> >+		return 0;
> >+
> >+	case ERROR_INVALID_PARAMETER:
> >+		return EINVAL;
> >+
> >+	case ERROR_INVALID_HANDLE:
> >+		return EFAULT;
> >+
> >+	case ERROR_NOT_ENOUGH_MEMORY:
> >+		/* FALLTHROUGH */
> >+	case ERROR_NO_SYSTEM_RESOURCES:
> >+		return ENOMEM;
> >+
> >+	case ERROR_PRIVILEGE_NOT_HELD:
> >+		/* FALLTHROUGH */
> >+	case ERROR_ACCESS_DENIED:
> >+		return EACCES;
> >+
> >+	case ERROR_ALREADY_EXISTS:
> >+		return EEXIST;
> >+
> >+	case ERROR_POSSIBLE_DEADLOCK:
> >+		return EDEADLK;
> >+
> >+	case ERROR_INVALID_FUNCTION:
> >+		/* FALLTHROUGH */
> >+	case ERROR_CALL_NOT_IMPLEMENTED:
> >+		return ENOSYS;
> >+	}
> >+
> >+	return EINVAL;
> >+}
> >+
> 
> Shouldn't we return all these error values as negative... as in
> -EINVAL, -EFAULT etc. ?

no. since this is just a translation function it is up to the caller
what it will do with the translated value and any conversion to -errno.

since it is also used to store into rte_errno it would have been
confusing to see something like the following to reverse the sign back.

err = thread_translate_win32_error(win32err);
rte_errno = -err; // confusing

personally i don't like the -errno returns at all and this is just
another reason contributing to that opinion. you can refer to my
previous mailing list posts on the subject.

> 
> 
> ranjit m.



More information about the dev mailing list