| | |
| | | char * |
| | | bus_strerror(int err) |
| | | { |
| | | int s, eindex; |
| | | int s; |
| | | char *buf; |
| | | eindex = err - EBUS_BASE; |
| | | /* Make first caller allocate key for thread-specific data */ |
| | | |
| | | s = pthread_once(&once, createKey); |
| | |
| | | err_exit(s, "pthread_setspecific"); |
| | | } |
| | | |
| | | if (eindex < 0 || eindex >= _bus_nerr || _bus_errlist[eindex] == NULL) |
| | | { |
| | | snprintf(buf, MAX_ERROR_LEN, "Unknown error %d", eindex); |
| | | } |
| | | else |
| | | { |
| | | strncpy(buf, _bus_errlist[eindex], MAX_ERROR_LEN - 1); |
| | | buf[MAX_ERROR_LEN - 1] = '\0'; /* Ensure null termination */ |
| | | |
| | | if(err < EBUS_BASE) { |
| | | // libc错误 |
| | | if (err < 0 || err >= _sys_nerr || _sys_errlist[err] == NULL) |
| | | { |
| | | snprintf(buf, MAX_ERROR_LEN, "Unknown error %d", err); |
| | | } |
| | | else |
| | | { |
| | | strncpy(buf, _sys_errlist[err], MAX_ERROR_LEN - 1); |
| | | buf[MAX_ERROR_LEN - 1] = '\0'; /* Ensure null termination */ |
| | | } |
| | | } else { |
| | | //自定义错误 |
| | | err -= EBUS_BASE; |
| | | if (err < 0 || err >= _bus_nerr || _bus_errlist[err] == NULL) |
| | | { |
| | | snprintf(buf, MAX_ERROR_LEN, "Unknown error %d", err); |
| | | } |
| | | else |
| | | { |
| | | strncpy(buf, _bus_errlist[err], MAX_ERROR_LEN - 1); |
| | | buf[MAX_ERROR_LEN - 1] = '\0'; /* Ensure null termination */ |
| | | } |
| | | |
| | | } |
| | | |
| | | return buf; |