view src/os/unix/ngx_errno.c @ 3435:d65ba5392f59 stable-0.7

merge r3138, r3139, r3157, r3158, r3159, r3164, r3165, r3202, r3203, r3383, r3388, r3417, r3418: Win32 (mostly) and some Unix file related fixes: *) preserve errno while ngx_free() *) win32 ngx_file_info() utf8 support *) delete Win95 code *) log file name for read/write errors *) test incomplete WriteFile() *) handle short pwrite() to log an error cause: ENOSPC, EDQUOT, or EFBIG *) uniform ngx_directio_on/off() interface with other file functions *) do not create Win32 drive letter in ngx_create_full_path() *) ignore EACCES errors for top level directories in ngx_create_full_path() *) fix Win32 error messages when an temporary file replaces an existent file: *) do not rename an already renamed file *) now ngx_win32_rename_file() returns error code *) do not log failure inside ngx_win32_rename_file() *) fix Win32 error message when an temporary file replaces an existent file: return at once if ngx_win32_rename_file() was not failed and do not try to delete already the renamed temporary file *) skip URI trailing spaces under Win32 *) disable Win32 short file names
author Igor Sysoev <igor@sysoev.ru>
date Mon, 01 Feb 2010 15:06:25 +0000
parents 3d8ab5957202
children e294f37401c0
line wrap: on
line source


/*
 * Copyright (C) Igor Sysoev
 */


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


#if (NGX_HAVE_STRERROR_R)

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

    errstr[0] = '\0';

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

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

    return errstr;
}

#elif (NGX_HAVE_GNU_STRERROR_R)

/* Linux strerror_r() */

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

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

    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