
/*
 * Copyright (C) Igor Sysoev
 */


#include <ngx_config.h>
#include <ngx_core.h>


#if (NGX_STRERROR_R)

u_char *ngx_strerror_r(int err, u_char *errstr, size_t size)
{
    if (size == 0) {
        return 0;
    }

    errstr[0] = '\0';

    strerror_r(err, (char *) errstr, size);

    while (*errstr && size) {
        errstr++;
        size--;
    }

    return errstr;
}

#elif (NGX_GNU_STRERROR_R)

/* Linux strerror_r() */

u_char *ngx_strerror_r(int err, u_char *errstr, size_t size)
{
    char    *str;
    size_t   len;

    if (size == 0) {
        return 0;
    }

    errstr[0] = '\0';

    str = strerror_r(err, (char *) errstr, size);

    if (str != (char *) errstr) {
        return ngx_cpystrn(errstr, (u_char *) str, size);
    }

    while (*errstr && size) {
        errstr++;
        size--;
    }

    return errstr;
}

#endif
