From: Narcisa Vasile <navas...@microsoft.com>

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 <navas...@microsoft.com>
---
 lib/eal/windows/rte_thread.c | 48 ++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/lib/eal/windows/rte_thread.c b/lib/eal/windows/rte_thread.c
index f65919f46d..c1ecfbd6ae 100644
--- a/lib/eal/windows/rte_thread.c
+++ b/lib/eal/windows/rte_thread.c
@@ -13,6 +13,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;
+}
+
+static int
+thread_log_last_error(const char *message)
+{
+       DWORD error = GetLastError();
+       RTE_LOG(DEBUG, EAL, "GetLastError()=%lu: %s\n", error, message);
+
+       return thread_translate_win32_error(error);
+}
+
 rte_thread_t
 rte_thread_self(void)
 {
-- 
2.31.0.vfs.0.1

Reply via email to