⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ngx_buf.c

📁 Nginx是一个高性能的HTTP和反向代理服务器
💻 C
字号:
/* * Copyright (C) Igor Sysoev */#include <ngx_config.h>#include <ngx_core.h>ngx_buf_t *ngx_create_temp_buf(ngx_pool_t *pool, size_t size){    ngx_buf_t *b;    b = ngx_calloc_buf(pool);    if (b == NULL) {        return NULL;    }    b->start = ngx_palloc(pool, size);    if (b->start == NULL) {        return NULL;    }    /*     * set by ngx_calloc_buf():     *     *     b->file_pos = 0;     *     b->file_last = 0;     *     b->file = NULL;     *     b->shadow = NULL;     *     b->tag = 0;     *     and flags     */    b->pos = b->start;    b->last = b->start;    b->end = b->last + size;    b->temporary = 1;    return b;}ngx_chain_t *ngx_alloc_chain_link(ngx_pool_t *pool){    ngx_chain_t  *cl;    cl = pool->chain;    if (cl) {        pool->chain = cl->next;        return cl;    }    cl = ngx_palloc(pool, sizeof(ngx_chain_t));    if (cl == NULL) {        return NULL;    }    return cl;}ngx_chain_t *ngx_create_chain_of_bufs(ngx_pool_t *pool, ngx_bufs_t *bufs){    u_char       *p;    ngx_int_t     i;    ngx_buf_t    *b;    ngx_chain_t  *chain, *cl, **ll;    p = ngx_palloc(pool, bufs->num * bufs->size);    if (p == NULL) {        return NULL;    }    ll = &chain;    for (i = 0; i < bufs->num; i++) {        b = ngx_calloc_buf(pool);        if (b == NULL) {            return NULL;        }        /*         * set by ngx_calloc_buf():         *         *     b->file_pos = 0;         *     b->file_last = 0;         *     b->file = NULL;         *     b->shadow = NULL;         *     b->tag = 0;         *     and flags         *         */        b->pos = p;        b->last = p;        b->temporary = 1;        b->start = p;        p += bufs->size;        b->end = p;        cl = ngx_alloc_chain_link(pool);        if (cl == NULL) {            return NULL;        }        cl->buf = b;        *ll = cl;        ll = &cl->next;    }    *ll = NULL;    return chain;}ngx_int_tngx_chain_add_copy(ngx_pool_t *pool, ngx_chain_t **chain, ngx_chain_t *in){    ngx_chain_t  *cl, **ll;    ll = chain;    for (cl = *chain; cl; cl = cl->next) {        ll = &cl->next;    }    while (in) {        cl = ngx_alloc_chain_link(pool);        if (cl == NULL) {            return NGX_ERROR;        }        cl->buf = in->buf;        *ll = cl;        ll = &cl->next;        in = in->next;    }    *ll = NULL;    return NGX_OK;}ngx_chain_t *ngx_chain_get_free_buf(ngx_pool_t *p, ngx_chain_t **free){    ngx_chain_t  *cl;    if (*free) {        cl = *free;        *free = cl->next;        cl->next = NULL;        return cl;    }    cl = ngx_alloc_chain_link(p);    if (cl == NULL) {        return NULL;    }    cl->buf = ngx_calloc_buf(p);    if (cl->buf == NULL) {        return NULL;    }    cl->next = NULL;    return cl;}voidngx_chain_update_chains(ngx_chain_t **free, ngx_chain_t **busy,    ngx_chain_t **out, ngx_buf_tag_t tag){    ngx_chain_t  *cl;    if (*busy == NULL) {        *busy = *out;    } else {        for (cl = *busy; cl->next; cl = cl->next) { /* void */ }        cl->next = *out;    }    *out = NULL;    while (*busy) {        if (ngx_buf_size((*busy)->buf) != 0) {            break;        }#if (NGX_HAVE_WRITE_ZEROCOPY)        if ((*busy)->buf->zerocopy_busy) {            break;        }#endif        if ((*busy)->buf->tag != tag) {            *busy = (*busy)->next;            continue;        }        (*busy)->buf->pos = (*busy)->buf->start;        (*busy)->buf->last = (*busy)->buf->start;        cl = *busy;        *busy = cl->next;        cl->next = *free;        *free = cl;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -