- if (errnum < 0 || errnum >= _sys_nerr_internal
- || _sys_errlist_internal[errnum] == NULL)
- return EINVAL;
-
- assert (estr != buf);
-/* Terminate the string in any case. */
- *((char *) __mempcpy (buf, estr, MIN (buflen - 1, estrlen))) = '\0';
+ if (estr == buf)
+ {
+ assert (errnum < 0 || errnum >= _sys_nerr_internal
+ || _sys_errlist_internal[errnum] == NULL);
+ return EINVAL;
+ }
+ assert (errnum >= 0 && errnum < _sys_nerr_internal
+ && _sys_errlist_internal[errnum] != NULL);
+
+ /* Terminate the string in any case. */
+ if (buflen > 0)
+ *((char *) __mempcpy (buf, estr, MIN (buflen - 1, estrlen))) = '\0';