1 /* 2 * Copyright (c) 2022 Meta 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #include <errno.h> 8 #include <string.h> 9 10 #include <zephyr/sys/util.h> 11 12 /* 13 * See scripts/build/gen_strerror_table.py 14 * 15 * #define sys_nerr N 16 * const char *const sys_errlist[sys_nerr]; 17 * const uint8_t sys_errlen[sys_nerr]; 18 */ 19 #include "libc/minimal/strerror_table.h" 20 21 /* 22 * See https://pubs.opengroup.org/onlinepubs/9699919799/functions/strerror.html 23 */ strerror(int errnum)24char *strerror(int errnum) 25 { 26 if (IS_ENABLED(CONFIG_MINIMAL_LIBC_STRING_ERROR_TABLE) && 27 errnum >= 0 && errnum < sys_nerr) { 28 return (char *)sys_errlist[errnum]; 29 } 30 31 return (char *) ""; 32 } 33 34 /* 35 * See 36 * https://pubs.opengroup.org/onlinepubs/9699919799/functions/strerror_r.html 37 */ strerror_r(int errnum,char * strerrbuf,size_t buflen)38int strerror_r(int errnum, char *strerrbuf, size_t buflen) 39 { 40 const char *msg; 41 size_t msg_len; 42 43 if (errnum >= 0 && errnum < sys_nerr) { 44 if (IS_ENABLED(CONFIG_MINIMAL_LIBC_STRING_ERROR_TABLE)) { 45 msg = sys_errlist[errnum]; 46 msg_len = sys_errlen[errnum]; 47 } else { 48 msg = ""; 49 msg_len = 1; 50 } 51 52 if (buflen < msg_len) { 53 return ERANGE; 54 } 55 56 strncpy(strerrbuf, msg, msg_len); 57 } 58 59 if (errnum < 0 || errnum >= sys_nerr) { 60 return EINVAL; 61 } 62 63 return 0; 64 } 65