
/*
 * Copyright (C) Igor Sysoev
 */


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


#if (HAVE_STRERROR_R)

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

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

    errstr[0] = '\0';

    strerror_r(err, errstr, size);

    for (len = 0; len < size; len++) {
        if (errstr[len] == '\0') {
            break;
        }
    }

    return len;
}

#elif (HAVE_GNU_STRERROR_R)

/* Linux strerror_r() */

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

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

    errstr[0] = '\0';

    str = strerror_r(err, errstr, size);

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

    for (len = 0; len < size; len++) {
        if (errstr[len] == '\0') {
            break;
        }
    }

    return len;
}

#endif
