//字符串匹配,匹配返回 1,否则返回 0.

//pattern可以通过任意个 | 字符,组合match_one中pattern的功能
int
match(const char* pattern, const char* string)
{
const char* or; for (;;)
{
or = strchr(pattern, '|');
if (or == (char*))
return match_one(pattern, strlen(pattern), string);
if (match_one(pattern, or - pattern, string))
return ;
pattern = or + ;
}
} /* 对于pattern中的字符:
?:匹配任意单个字符
**:匹配任意长度字符串
*:匹配任意长度字符串,直到遇到 /
*/
static int
match_one(const char* pattern, int patternlen, const char* string)
{
const char* p; for (p = pattern; p - pattern < patternlen; ++p, ++string)
{
if (*p == '?' && *string != '\0')
continue;
if (*p == '*')
{
int i, pl;
++p;
if (*p == '*')
{
/* Double-wildcard matches anything. */
++p;
i = strlen(string);
}
else
/* Single-wildcard matches anything but slash. */
i = strcspn(string, "/");
pl = patternlen - (p - pattern);
for (; i >= ; --i)
if (match_one(p, pl, &(string[i])))
return ;
return ;
}
if (*p != *string)
return ;
}
if (*string == '\0')
return ;
return ;
}

mini-httpd源码分析-match.h的更多相关文章

  1. mini-httpd源码分析-port.h

    针对不同系统的宏定义,对于Linux而言 /* port.h - portability defines */ #elif defined(linux) # define OS_Linux # def ...

  2. mini-httpd源码分析-version.h

    /* version.h - version defines for mini_httpd */ #ifndef _VERSION_H_ #define _VERSION_H_ #define SER ...

  3. mini-httpd源码分析-tdate_parse.h

    ///关联字符串和整数 struct strlong { char* s; long l; }; ///将字符串中的大写字母转换成小写字母 static void pound_case(char* s ...

  4. RobHess的SIFT源码分析:imgfeatures.h和imgfeatures.c文件

    SIFT源码分析系列文章的索引在这里:RobHess的SIFT源码分析:综述 imgfeatures.h中有SIFT特征点结构struct feature的定义,除此之外还有一些特征点的导入导出以及特 ...

  5. iOS硬解H.264:-VideoToolboxDemo源码分析[草稿]

    来源:http://www.cnblogs.com/michaellfx/p/understanding_-VideoToolboxDemo.html iOS硬解H.264:-VideoToolbox ...

  6. u-boot源码分析之C语言段

    题外话: 最近一直在学习u-boot的源代码,从代码量到代码风格,都让我认识到什么才是真正的程序.以往我所学到的C语言知识和u-boot的源代码相比,实在不值一提.说到底,机器都是0和1控制的.感觉这 ...

  7. 【JUC】JDK1.8源码分析之SynchronousQueue(九)

    一.前言 本篇是在分析Executors源码时,发现JUC集合框架中的一个重要类没有分析,SynchronousQueue,该类在线程池中的作用是非常明显的,所以很有必要单独拿出来分析一番,这对于之后 ...

  8. SparkMLlib之 logistic regression源码分析

    最近在研究机器学习,使用的工具是spark,本文是针对spar最新的源码Spark1.6.0的MLlib中的logistic regression, linear regression进行源码分析,其 ...

  9. angular源码分析:angular的整个加载流程

    在前面,我们讲了angular的目录结构.JQLite以及依赖注入的实现,在这一期中我们将重点分析angular的整个框架的加载流程. 一.从源代码的编译顺序开始 下面是我们在目录结构哪一期理出的an ...

随机推荐

  1. Oracle触发器Trigger基础1

    /* Trigger是作用在表上,或是数据库上,或是用户上.当用户在表上(其他)做某些操作时,trigger将会自己执行. 可以在表上:insert,update,delete Trigger只对表的 ...

  2. [string]Roman to Integer,Integer to Roman

    一.Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within ...

  3. 快速学习javascript对象-遍历对象

    为了方便了解每个javascript对象包含的方法,我写一个函数. function GetCollection(obj){ try{ if(obj){ var sType=""; ...

  4. include的简单使用

    1.事前准备 <!--在res/values/styles.xml中--> <!--设置样式--> <style name="RemoteButton" ...

  5. React 同构

    React 同构 搬运 https://segmentfault.com/a/1190000004671209 究竟什么是同构呢? 同构就是希望前端 后端都使用同一套逻辑 同一套代码 Nodejs出现 ...

  6. 【Chromium中文文档】Chrome/Chromium沙箱 - 安全架构设计

    沙箱 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Sandbox.ht ...

  7. rabbitmq问题之HTTP access denied: user 'guest' - User can only log in via localhost

    问题: 昨天安装rabbitmq(3.3.4版本)服务,并启用rabbitmq_management插件去管理rabbitmq服务,但是在访问管理界面使用guest用户登录时出现login faile ...

  8. 转: JavaScript函数式编程(二)

    转: JavaScript函数式编程(二) 作者: Stark伟 上一篇文章里我们提到了纯函数的概念,所谓的纯函数就是,对于相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用,也不依赖外部环 ...

  9. 中国25位最具影响力的IC人物

    当今许多企业的领导者几乎已经成为其企业的代名词,而在芯片业,我们听说的更多的是“龙芯”.“国芯”,他们的领导者的声音却鲜有传出.芯片业透出的强烈的民族色彩,也使这些隐身的企业家们的注意力更聚集在研发上 ...

  10. mongodb与mysql相比的优缺点

    与关系型数据库相比,MongoDB的优点:①弱一致性(最终一致),更能保证用户的访问速度:举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精确值 ...