|
Packit Service |
def718 |
#define STRERROR_OVERRIDE_IMPL 1
|
|
Packit Service |
def718 |
#include "strerror_override.h"
|
|
Packit Service |
def718 |
|
|
Packit Service |
def718 |
/*
|
|
Packit Service |
def718 |
* Override strerror() to get consistent output across platforms.
|
|
Packit Service |
def718 |
*/
|
|
Packit Service |
def718 |
|
|
Packit Service |
def718 |
static struct {
|
|
Packit Service |
def718 |
int errno_value;
|
|
Packit Service |
def718 |
const char *errno_str;
|
|
Packit Service |
def718 |
} errno_list[] = {
|
|
Packit Service |
def718 |
#define STRINGIFY(x) #x
|
|
Packit Service |
def718 |
#define ENTRY(x) {x, &STRINGIFY(undef_ ## x)[6]}
|
|
Packit Service |
def718 |
ENTRY(EPERM),
|
|
Packit Service |
def718 |
ENTRY(ENOENT),
|
|
Packit Service |
def718 |
ENTRY(ESRCH),
|
|
Packit Service |
def718 |
ENTRY(EINTR),
|
|
Packit Service |
def718 |
ENTRY(EIO),
|
|
Packit Service |
def718 |
ENTRY(ENXIO),
|
|
Packit Service |
def718 |
ENTRY(E2BIG),
|
|
Packit Service |
def718 |
ENTRY(ENOEXEC),
|
|
Packit Service |
def718 |
ENTRY(EBADF),
|
|
Packit Service |
def718 |
ENTRY(ECHILD),
|
|
Packit Service |
def718 |
ENTRY(EDEADLK),
|
|
Packit Service |
def718 |
ENTRY(ENOMEM),
|
|
Packit Service |
def718 |
ENTRY(EACCES),
|
|
Packit Service |
def718 |
ENTRY(EFAULT),
|
|
Packit Service |
def718 |
#ifdef ENOTBLK
|
|
Packit Service |
def718 |
ENTRY(ENOTBLK),
|
|
Packit Service |
def718 |
#endif
|
|
Packit Service |
def718 |
ENTRY(EBUSY),
|
|
Packit Service |
def718 |
ENTRY(EEXIST),
|
|
Packit Service |
def718 |
ENTRY(EXDEV),
|
|
Packit Service |
def718 |
ENTRY(ENODEV),
|
|
Packit Service |
def718 |
ENTRY(ENOTDIR),
|
|
Packit Service |
def718 |
ENTRY(EISDIR),
|
|
Packit Service |
def718 |
ENTRY(EINVAL),
|
|
Packit Service |
def718 |
ENTRY(ENFILE),
|
|
Packit Service |
def718 |
ENTRY(EMFILE),
|
|
Packit Service |
def718 |
ENTRY(ENOTTY),
|
|
Packit Service |
def718 |
#ifdef ETXTBSY
|
|
Packit Service |
def718 |
ENTRY(ETXTBSY),
|
|
Packit Service |
def718 |
#endif
|
|
Packit Service |
def718 |
ENTRY(EFBIG),
|
|
Packit Service |
def718 |
ENTRY(ENOSPC),
|
|
Packit Service |
def718 |
ENTRY(ESPIPE),
|
|
Packit Service |
def718 |
ENTRY(EROFS),
|
|
Packit Service |
def718 |
ENTRY(EMLINK),
|
|
Packit Service |
def718 |
ENTRY(EPIPE),
|
|
Packit Service |
def718 |
ENTRY(EDOM),
|
|
Packit Service |
def718 |
ENTRY(ERANGE),
|
|
Packit Service |
def718 |
ENTRY(EAGAIN),
|
|
Packit Service |
def718 |
{ 0, (char *)0 }
|
|
Packit Service |
def718 |
};
|
|
Packit Service |
def718 |
|
|
Packit Service |
def718 |
// Enabled during tests
|
|
Packit Service |
def718 |
int _json_c_strerror_enable = 0;
|
|
Packit Service |
def718 |
|
|
Packit Service |
def718 |
#define PREFIX "ERRNO="
|
|
Packit Service |
def718 |
static char errno_buf[128] = PREFIX;
|
|
Packit Service |
def718 |
char *_json_c_strerror(int errno_in)
|
|
Packit Service |
def718 |
{
|
|
Packit Service |
def718 |
int start_idx;
|
|
Packit Service |
def718 |
char digbuf[20];
|
|
Packit Service |
def718 |
int ii, jj;
|
|
Packit Service |
def718 |
|
|
Packit Service |
def718 |
if (!_json_c_strerror_enable)
|
|
Packit Service |
def718 |
return strerror(errno_in);
|
|
Packit Service |
def718 |
|
|
Packit Service |
def718 |
// Avoid standard functions, so we don't need to include any
|
|
Packit Service |
def718 |
// headers, or guess at signatures.
|
|
Packit Service |
def718 |
|
|
Packit Service |
def718 |
for (ii = 0; errno_list[ii].errno_str != (char *)0; ii++)
|
|
Packit Service |
def718 |
{
|
|
Packit Service |
def718 |
const char *errno_str = errno_list[ii].errno_str;
|
|
Packit Service |
def718 |
if (errno_list[ii].errno_value != errno_in)
|
|
Packit Service |
def718 |
continue;
|
|
Packit Service |
def718 |
|
|
Packit Service |
def718 |
for (start_idx = sizeof(PREFIX) - 1, jj = 0; errno_str[jj] != '\0'; jj++, start_idx++)
|
|
Packit Service |
def718 |
{
|
|
Packit Service |
def718 |
errno_buf[start_idx] = errno_str[jj];
|
|
Packit Service |
def718 |
}
|
|
Packit Service |
def718 |
errno_buf[start_idx] = '\0';
|
|
Packit Service |
def718 |
return errno_buf;
|
|
Packit Service |
def718 |
}
|
|
Packit Service |
def718 |
|
|
Packit Service |
def718 |
// It's not one of the known errno values, return the numeric value.
|
|
Packit Service |
def718 |
for (ii = 0; errno_in > 10; errno_in /= 10, ii++)
|
|
Packit Service |
def718 |
{
|
|
Packit Service |
def718 |
digbuf[ii] = "0123456789"[(errno_in % 10)];
|
|
Packit Service |
def718 |
}
|
|
Packit Service |
def718 |
digbuf[ii] = "0123456789"[(errno_in % 10)];
|
|
Packit Service |
def718 |
|
|
Packit Service |
def718 |
// Reverse the digits
|
|
Packit Service |
def718 |
for (start_idx = sizeof(PREFIX) - 1 ; ii >= 0; ii--, start_idx++)
|
|
Packit Service |
def718 |
{
|
|
Packit Service |
def718 |
errno_buf[start_idx] = digbuf[ii];
|
|
Packit Service |
def718 |
}
|
|
Packit Service |
def718 |
return errno_buf;
|
|
Packit Service |
def718 |
}
|
|
Packit Service |
def718 |
|