]> granicus.if.org Git - p11-kit/commitdiff
common: Fixed implementation of strerror_r for WinXP
authorPavel A <pavel_a at live.com>
Tue, 1 Jul 2014 06:00:11 +0000 (08:00 +0200)
committerStef Walter <stef@thewalter.net>
Tue, 1 Jul 2014 06:00:19 +0000 (08:00 +0200)
ie: when streror_s is missing in msvcrt.dll

https://bugs.freedesktop.org/show_bug.cgi?id=76594

common/compat.c

index 85a33c81ce6393442f46933e39b25b9b574d9255..fef618b42f0c6c5899ac6b93b2521e0ca196a8cf 100644 (file)
@@ -844,7 +844,22 @@ strerror_r (int errnum,
             size_t buflen)
 {
 #ifdef OS_WIN32
+#if _WIN32_WINNT < 0x502 /* WinXP or older */
+       int n = sys_nerr;
+       const char *p;
+       if (errnum < 0 || errnum >= n)
+               p = sys_errlist[n];
+       else
+               p = sys_errlist[errnum];
+       if (buf == NULL || buflen == 0)
+               return EINVAL;
+       strncpy(buf, p, buflen);
+       buf[buflen-1] = 0;
+       return 0;
+#else /* Server 2003 or newer */
        return strerror_s (buf, buflen, errnum);
+#endif /*_WIN32_WINNT*/
+
 #else
        #error no strerror_r implementation
 #endif