当前位置: 首页 > news >正文

ngx_regex_create_conf

ngx_regex_create_conf

定义在 src/core/ngx_regex.c

static void *
ngx_regex_create_conf(ngx_cycle_t *cycle)
{
    ngx_regex_conf_t    *rcf;
    ngx_pool_cleanup_t  *cln;

    rcf = ngx_pcalloc(cycle->pool, sizeof(ngx_regex_conf_t));
    if (rcf == NULL) {
        return NULL;
    }

    rcf->pcre_jit = NGX_CONF_UNSET;

    cln = ngx_pool_cleanup_add(cycle->pool, 0);
    if (cln == NULL) {
        return NULL;
    }

    cln->handler = ngx_regex_cleanup;
    cln->data = rcf;

    rcf->studies = ngx_list_create(cycle->pool, 8, sizeof(ngx_regex_elt_t));
    if (rcf->studies == NULL) {
        return NULL;
    }

    ngx_regex_studies = rcf->studies;

    return rcf;
}

ngx_regex_create_conf 函数是 Nginx 的一部分,用于创建正则表达式的配置结构体 ngx_regex_conf_t


static void *
ngx_regex_create_conf(ngx_cycle_t *cycle)
  • 函数声明:定义一个静态函数 ngx_regex_create_conf,它接受一个指向 ngx_cycle_t 结构的指针作为参数,并返回一个指向 void 的指针。这里的 cycle 代表当前的 Nginx 运行周期。

{
    ngx_regex_conf_t    *rcf;
    ngx_pool_cleanup_t  *cln;
  • 变量声明:声明两个指针变量:

    • rcf:指向 ngx_regex_conf_t 结构的指针,用于保存正则表达式的配置信息。

    • cln:指向 ngx_pool_cleanup_t 结构的指针,用于处理内存清理。

    rcf = ngx_pcalloc(cycle->pool, sizeof(ngx_regex_conf_t));
  • 内存分配:使用 ngx_pcalloc 函数在 Nginx 的内存池中分配 ngx_regex_conf_t 结构的内存。

  • ngx_pcalloc 会清零分配的内存,确保结构中的所有字段初始化为零或空值。

    if (rcf == NULL) {
        return NULL;
    }
  • 空指针检查:检查内存分配是否成功。

  • 如果 rcf 为 NULL,则返回 NULL,表示配置创建失败。这是一个重要的错误处理步骤。

    rcf->pcre_jit = NGX_CONF_UNSET;
  • 初始化配置字段:将 rcf 中的 pcre_jit 字段初始化为 NGX_CONF_UNSET,表示该字段尚未被设置。

  • 这是为了在后续的配置解析中能够判断是否对该字段进行了修改。

    cln = ngx_pool_cleanup_add(cycle->pool, 0);
  • 添加清理处理:在内存池中添加一个清理处理。

  • 如果 cycle->pool 被销毁时,这个清理处理会被调用。第二个参数 0 表示这个清理处理的优先级。

    if (cln == NULL) {
        return NULL;
    }
  • 清理处理检查:检查 cln 是否为 NULL,如果是,则返回 NULL,表示添加清理处理失败。

    cln->handler = ngx_regex_cleanup;
  • 设置清理处理函数:将清理处理的 handler 指定为 ngx_regex_cleanup

  • 这个函数将在内存池被释放时调用,用于释放与正则表达式配置相关的资源。

    cln->data = rcf;
  • 设置清理数据:将清理处理的数据字段设置为 rcf,这样在清理函数中可以访问到正则表达式的配置结构。

    rcf->studies = ngx_list_create(cycle->pool, 8, sizeof(ngx_regex_elt_t));
  • 创建正则表达式研究列表:在内存池中创建一个 ngx_list_t 结构,用于存储正则表达式的研究。这里设置初始大小为 8,每个元素的大小为 ngx_regex_elt_t。这个列表将用于存放与正则表达式相关的研究数据。

    if (rcf->studies == NULL) {
        return NULL;
    }
  • 研究列表检查:检查 rcf->studies 是否为 NULL,如果是,则返回 NULL,表示创建研究列表失败。

    ngx_regex_studies = rcf->studies;
  • 全局变量赋值:将全局变量 ngx_regex_studies 指向当前配置的研究列表。这使得其他部分的代码可以访问到这个列表。

    return rcf;
}
  • 返回配置结构:最后,返回指向 ngx_regex_conf_t 结构的指针 rcf,表示成功创建并初始化正则表达式的配置。

总结

这个函数的设计思想是通过动态内存分配和清理机制创建和管理正则表达式的配置。它确保了在程序执行期间,正则表达式相关的资源被正确分配和释放。每一步都有错误处理,以确保系统的稳定性和可靠性。

相关文章:

  • Git(一)
  • leetcode hot100--动态规划【五步总纲】
  • 文本对抗样本系列的论文阅读笔记(整理合订)
  • 学习笔记11——并发编程之并发关键字
  • ArcGIS Pro中字段的新建方法与应用
  • 从新手到专家:嵌入式代码空间优化技巧
  • C++ Primer Plus第十二章课后习题总结
  • 【二分算法】-- 三种二分模板总结
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-5.1.2基于Painless脚本的日志告警
  • 空指针异常的触发
  • 论文阅读分享——UMDF(AAAI-24)
  • 用Haskell语言和wreq库配合HTTP写个爬虫程序
  • Java学习--Redis
  • vulnhub靶场【digitalworld.local系列】的electrical靶机
  • Rabbitmq--延迟消息
  • HTML星球大冒险之路线图
  • 程序设计语言基础知识概述
  • 微服务项目如何部署?
  • 程序化广告知识入门与Python基础数据处理实践
  • 【C++】 —— 笔试刷题day_1
  • 2人恶意传播刘国梁谣言被处罚,媒体:以法律利剑劈谣斩邪,加快推进依法治体
  • 习近平向第三十四届阿拉伯国家联盟首脑理事会会议致贺信
  • 菲律宾选举委员会公布中期选举结果,马科斯阵营选情未达预期
  • 福州一宋代古墓被指沦为露天厕所,仓山区博物馆:已设置围挡
  • 浙江省委金融办原副主任潘广恩被“双开”
  • 张家界一铁路致17人身亡,又有15岁女孩殒命,已开始加装护栏