asm for memmove on i386 and x86_64
[musl] / src / string / strerror_r.c
index 6fdd4ce..907dcf0 100644 (file)
@@ -4,8 +4,14 @@
 int strerror_r(int err, char *buf, size_t buflen)
 {
        char *msg = strerror(err);
-       if (strlen(msg) >= buflen)
+       size_t l = strlen(msg);
+       if (l >= buflen) {
+               if (buflen) {
+                       memcpy(buf, msg, buflen-1);
+                       buf[buflen-1] = 0;
+               }
                return ERANGE;
-       strcpy(buf, msg);
+       }
+       memcpy(buf, msg, l+1);
        return 0;
 }