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

📄 ngx_array.c

📁 Nginx是一个高性能的HTTP和反向代理服务器
💻 C
字号:
/* * Copyright (C) Igor Sysoev */#include <ngx_config.h>#include <ngx_core.h>ngx_array_t *ngx_array_create(ngx_pool_t *p, ngx_uint_t n, size_t size){    ngx_array_t *a;    a = ngx_palloc(p, sizeof(ngx_array_t));    if (a == NULL) {        return NULL;    }    a->elts = ngx_palloc(p, n * size);    if (a->elts == NULL) {        return NULL;    }    a->nelts = 0;    a->size = size;    a->nalloc = n;    a->pool = p;    return a;}voidngx_array_destroy(ngx_array_t *a){    ngx_pool_t  *p;    p = a->pool;    if ((u_char *) a->elts + a->size * a->nalloc == p->last) {        p->last -= a->size * a->nalloc;    }    if ((u_char *) a + sizeof(ngx_array_t) == p->last) {        p->last = (u_char *) a;    }}void *ngx_array_push(ngx_array_t *a){    void        *elt, *new;    size_t       size;    ngx_pool_t  *p;    if (a->nelts == a->nalloc) {        /* the array is full */        size = a->size * a->nalloc;        p = a->pool;        if ((u_char *) a->elts + size == p->last && p->last + a->size <= p->end)        {            /*             * the array allocation is the last in the pool             * and there is space for new allocation             */            p->last += a->size;            a->nalloc++;        } else {            /* allocate a new array */            new = ngx_palloc(p, 2 * size);            if (new == NULL) {                return NULL;            }            ngx_memcpy(new, a->elts, size);            a->elts = new;            a->nalloc *= 2;        }    }    elt = (u_char *) a->elts + a->size * a->nelts;    a->nelts++;    return elt;}void *ngx_array_push_n(ngx_array_t *a, ngx_uint_t n){    void        *elt, *new;    size_t       size;    ngx_uint_t   nalloc;    ngx_pool_t  *p;    size = n * a->size;    if (a->nelts + n > a->nalloc) {        /* the array is full */        p = a->pool;        if ((u_char *) a->elts + a->size * a->nalloc == p->last            && p->last + size <= p->end)        {            /*             * the array allocation is the last in the pool             * and there is space for new allocation             */            p->last += size;            a->nalloc += n;        } else {            /* allocate a new array */            nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);            new = ngx_palloc(p, nalloc * a->size);            if (new == NULL) {                return NULL;            }            ngx_memcpy(new, a->elts, a->nelts * a->size);            a->elts = new;            a->nalloc = nalloc;        }    }    elt = (u_char *) a->elts + a->size * a->nelts;    a->nelts += n;    return elt;}

⌨️ 快捷键说明

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