view src/os/win32/ngx_errno.c @ 7003:7943298d4ac0

Contrib: proper syntax parsing in vim syntax highlighting. Instead of highlighting directives in arbitrary positions, proper parsing of nginx.conf syntax was implemented, matching what nginx does internally. This allows vim to correctly highlight various complex cases, including: return 301 http://example.com/path#fragment"; and also avoids highlighting of parameters as directives, as in server_name missing.semicolon.example.com index index.php; where "index" is not a directive but a parameter of the "server_name" directive due to missing semicolon. Most important downside of this approach seems to be that there is no easy way to introduce directive-specific parameters. As such, only "listen" directive parameters were preserved.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 22 May 2017 16:34:47 +0300
parents f1a0de6eb505
children 746567d633ac
line wrap: on
line source


/*
 * Copyright (C) Igor Sysoev
 * Copyright (C) Nginx, Inc.
 */


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


u_char *
ngx_strerror(ngx_err_t err, u_char *errstr, size_t size)
{
    u_int          len;
    static u_long  lang = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US);

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

    len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                        NULL, err, lang, (char *) errstr, size, NULL);

    if (len == 0 && lang && GetLastError() == ERROR_RESOURCE_LANG_NOT_FOUND) {

        /*
         * Try to use English messages first and fallback to a language,
         * based on locale: non-English Windows have no English messages
         * at all.  This way allows to use English messages at least on
         * Windows with MUI.
         */

        lang = 0;

        len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
                            NULL, err, lang, (char *) errstr, size, NULL);
    }

    if (len == 0) {
        return ngx_snprintf(errstr, size,
                            "FormatMessage() error:(%d)", GetLastError());
    }

    /* remove ".\r\n\0" */
    while (errstr[len] == '\0' || errstr[len] == CR
           || errstr[len] == LF || errstr[len] == '.')
    {
        --len;
    }

    return &errstr[++len];
}


ngx_int_t
ngx_strerror_init(void)
{
    return NGX_OK;
}