- 论坛徽章:
- 0
|
不知道这个match(...)什么意思?????
调用该函数如下:
match( cgi_pattern, file ) file // cgi_pattern在conf文件或main参数中设定 file: home/www/aaa
match( "**MSIE**", useragent ) // useragent Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
match( url_pattern, path ) // path = /home/www/xxx.html
match( lp, refhost ) // refrence不知
match( url_pattern, path )
请大家帮我看看这个函数作用???代码如下:
- int
- match( const char* pattern, const char* string )
- {
- const char* or;
- for (;;)
- {
- or = strchr( pattern, '|' );
- if ( or == (char*) 0 )
- return match_one( pattern, strlen( pattern ), string );
- if ( match_one( pattern, or - pattern, string ) )
- return 1;
- pattern = or + 1;
- }
- }
- 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 >= 0; --i )
- if ( match_one( p, pl, &(string[i]) ) )
- return 1;
- return 0;
- }
- if ( *p != *string )
- return 0;
- }
- if ( *string == '\0' )
- return 1;
- return 0;
- }
复制代码
[ 本帖最后由 bullity 于 2009-5-12 12:39 编辑 ] |
|