[v17,03/13] eal/windows: translate Windows errors to errno-style errors
Checks
Commit Message
From: Narcisa Vasile <navasile@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 <navasile@microsoft.com>
---
lib/eal/windows/rte_thread.c | 48 ++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
@@ -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)
{