ngx_save_Argvメソッドの詳細

1906 ワード

ngx_save_argv法はsrc/core/nginxである.cで定義され、init_へのパラメータのバックアップに使用されます.cycleで.
この関数の主な役割は、パラメータの個数とパラメータの情報をngx_にバックアップすることです.Argcとngx_argv変数では、この2つの変数はsrc/os/unix/ngx_process.cで定義されています.
int              ngx_argc;                                                                                                                                                  
char           **ngx_argv;                                                                                                                                                  
char           **ngx_os_argv;

次の関数の詳細コードを示します.
static ngx_int_t
ngx_save_argv(ngx_cycle_t *cycle, int argc, char *const *argv)
{
#if (NGX_FREEBSD)

    ngx_os_argv = (char **) argv;
    ngx_argc = argc;
    ngx_argv = (char **) argv;

#else
    size_t     len;
    ngx_int_t  i;

    ngx_os_argv = (char **) argv;
    ngx_argc = argc;

    ngx_argv = ngx_alloc((argc + 1) * sizeof(char *), cycle->log);
    if (ngx_argv == NULL) {
        return NGX_ERROR;
    }

    for (i = 0; i < argc; i++) {
        len = ngx_strlen(argv[i]) + 1;

        ngx_argv[i] = ngx_alloc(len, cycle->log);
        if (ngx_argv[i] == NULL) {
            return NGX_ERROR;
        }

        (void) ngx_cpystrn((u_char *) ngx_argv[i], (u_char *) argv[i], len);
    }

    ngx_argv[i] = NULL;

#endif

    ngx_os_environ = environ;

    return NGX_OK;
}

ここでngx_allocメソッドは、最下位オペレーティングシステムのメモリ割り当てメソッドmalloc()のパッケージです.
void *
ngx_alloc(size_t size, ngx_log_t *log)
{
    void  *p;
    // ,ngx_alloc malloc 。
    p = malloc(size);
    if (p == NULL) {
        ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
                      "malloc(%uz) failed", size);
    }

    ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, log, 0, "malloc: %p:%uz", p, size);

    return p;
}