[code]calltree -gb -np -m *.c |more[/code][code]
main [test.c:71]:
| DEBUGP
| HYPHENP
| S_ISREG
| _
| _fileno
| _setmode
| all_tests [test.c:53]
| | mu_run_test
| .......
[/code]这个all_tests实在是可怕,不停的检查。。。。。。应用程序是从main开始的,所以这就是全部程序的开始,由它不停的生长,直至吃掉所有文件的定义和函数。[code]
52 all_tests()
53 {
54 mu_run_test (test_parse_content_disposition); /*解析路径内容*/
55 mu_run_test (test_subdir_p);
56 mu_run_test (test_dir_matches_p);
57 mu_run_test (test_commands_sorted);
58 mu_run_test (test_cmd_spec_restrict_file_names);
59 mu_run_test (test_path_simplify);
60 mu_run_test (test_append_uri_pathel);
61 mu_run_test (test_are_urls_equal);
62 mu_run_test (test_is_robots_txt_url);
63
64 return NULL;
65 }
[/code]test_parse_content_disposition( )_____------>______extract_param( ) /*解析网站路径。包括处理=前面的部分,和后面的。 */
分析路径时,用到数据结构[code]
typedef struct {
/*A token consists of characters in the[b, e) range.: 此标记包含两部分的字符串*/
const char *b, *e; /*此指针指向的内容只读*/
}param_token;
[/code]处理字符串时,使用了很有意思的一种用法,不得不说一下:
[code]
/src/http.c
extract_param( )
{
.......
value->b = p;
while( *p && *p != separator) ++p;
value->e = p;
while (value->e != value->b && c_isspace (value->e[-1]))
--value->e;
if (*p == separator) ++p;
.........}
这个e[-1]一开始认为可能是错误的用法,但是此处e是指针类型,e[-1]并不会出现越界,因为这是___________________________
_|____|___|___|____|____|___|____| 、e指向不是个数组,所以根据指针运算,此会取道e前面元素。
e___|
后面的value只是消除separator(分隔符)。这就是前面主要名称,和提取的区别,以=号作为分隔*/
>----------------------------------<
阅读(1942) | 评论(0) | 转发(0) |