| 372 | ****************************************************************************/ |
| 373 | |
| 374 | FAR char *strerror(int errnum) |
| 375 | { |
| 376 | #ifdef CONFIG_LIBC_STRERROR_ERRNUM |
| 377 | static char s_err[STRERROR_BUFSIZE]; |
| 378 | #endif |
| 379 | #ifdef CONFIG_LIBC_STRERROR |
| 380 | int ndxlow = 0; |
| 381 | int ndxhi = NERRNO_STRS - 1; |
| 382 | int ndxmid; |
| 383 | |
| 384 | do |
| 385 | { |
| 386 | ndxmid = (ndxlow + ndxhi) >> 1; |
| 387 | if (errnum > g_errnomap[ndxmid].errnum) |
| 388 | { |
| 389 | ndxlow = ndxmid + 1; |
| 390 | } |
| 391 | else if (errnum < g_errnomap[ndxmid].errnum) |
| 392 | { |
| 393 | ndxhi = ndxmid - 1; |
| 394 | } |
| 395 | else |
| 396 | { |
| 397 | return g_errnomap[ndxmid].str; |
| 398 | } |
| 399 | } |
| 400 | while (ndxlow <= ndxhi); |
| 401 | #endif |
| 402 | #ifdef CONFIG_LIBC_STRERROR_ERRNUM |
| 403 | if (snprintf(s_err, sizeof(s_err), STRERROR_UNKNOWN " %d", errnum) |
| 404 | < sizeof(s_err)) |
| 405 | { |
| 406 | return s_err; |
| 407 | } |
| 408 | #elif !defined(CONFIG_LIBC_STRERROR) |
| 409 | UNUSED(errnum); |
| 410 | #endif |
| 411 | |
| 412 | return STRERROR_UNKNOWN; |
| 413 | } |
no test coverage detected