Native Windows: Eina: Resolve bad comparison while using windows strerror_s
authorLucas Cavalcante de Sousa <lucks.sousa@gmail.com>
Fri, 26 Jun 2020 12:51:01 +0000 (12:51 +0000)
committerJongmin Lee <jm105.lee@samsung.com>
Sun, 28 Jun 2020 22:34:20 +0000 (07:34 +0900)
`strerror_s` is the windows alternative of `strerror_r` used by EFL.

`strerror_s` never return the error code with the message as
`strerror_r` does, because of that, while comparing the first 14
characters of `Unknown error ` to the message from unknown code 4096
(`Unknown error`) they were accusing being different - in UNIX this
works because the message returned is `Unknown error 4096`.
This error was noticeable at `eina_error_test_failures` test case.

This Diff adds the error code to the message in case of an `Unknown
error`, making the windows implementation compliant with UNIX.

Reviewed-by: Vincent Torri <vincent.torri@gmail.com>
Reviewed-by: Wander Lairson Costa <wander.lairson@gmail.com>
Reviewed-by: Stefan Schmidt <stefan@datenfreihafen.org>
Differential Revision: https://phab.enlightenment.org/D12033

src/lib/eina/eina_error.c

index 7922933..b9f05a5 100644 (file)
@@ -115,7 +115,13 @@ _eina_error_msg_alloc(void)
 /* Windows has strerror_s(), similar to POSIX strerror_r() */
 static inline int strerror_r(int errnum, char *buf, size_t buflen)
 {
-   return strerror_s(buf, buflen, errnum);
+   int ret;
+
+   ret = strerror_s(buf, buflen, errnum);
+   if (strcmp(buf, "Unknown error") == 0)
+     snprintf(buf, buflen, "Unknown error %d", errnum);
+
+   return ret;
 }
 #endif