Add MinGW implementation of strerror_r.
Visual C runtime libraries include a function strerror_s,
but unfortunately the current release of MinGW32 does not provide
it. We have our own non-secure implementation instead.
---
 include/babeltrace/compat/string.h | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/include/babeltrace/compat/string.h 
b/include/babeltrace/compat/string.h
index 62cf1bf..2584ecb 100644
--- a/include/babeltrace/compat/string.h
+++ b/include/babeltrace/compat/string.h
@@ -3,7 +3,20 @@
 
 #include <string.h>
 
-#if !defined(__linux__) || ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 
600) && !defined(_GNU_SOURCE))
+#ifdef __MINGW32__
+
+static inline int compat_strerror_r(int errnum, char *buf, size_t buflen)
+{
+       /* non-recursive implementation of strerror_r */
+       /* Windows function strerror_s is not available in MinGW32 */
+       char * retbuf;
+
+       retbuf = strerror(errnum);
+       strncpy(buf, retbuf, buflen);
+       buf[buflen - 1] = '\0';
+       return 0;
+}
+#elif !defined(__linux__) || ((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 
600) && !defined(_GNU_SOURCE))
 
 /* XSI-compliant strerror_r */
 static inline int compat_strerror_r(int errnum, char *buf, size_t buflen)
@@ -17,6 +30,7 @@ static inline int compat_strerror_r(int errnum, char *buf, 
size_t buflen)
 static inline int compat_strerror_r(int errnum, char *buf, size_t buflen)
 {
        char * retbuf;
+
        retbuf = strerror_r(errnum, buf, buflen);
        if (retbuf != buf)
                strcpy(buf, retbuf);
-- 
1.8.1.msysgit.1


_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to