Chinaunix首页 | 论坛 | 博客

分类: LINUX

2011-10-02 11:45:32

<---------_______________
关于test_path_simplify()这个函数是将路径化简为最有效并且等价的路径。也是为了减少运输的数据量,具体的各个模式化简方式以后讨论。
all_tests()

. . . . . .
mu_run_test(test_append_uri_pathel);  /*1、_______________----------->/usr/url.c*/
. . . . . .
}
1、_______________-------------->
const char *test_append_uri_pathel()
{
2212 {
2213   int i;
2214   struct {
2215     char *original_url;
2216     char *input;
2217     bool escaped;
2218     char *expected_result;
2219   } test_array[] = {
2220     { "", "somepage.html", false, "somepage.html" },
2221   };
2222 /*这里就检测一个url路径*/
2223   for (i = 0; i < sizeof(test_array)/sizeof(test_array[0]); ++i)
2224     {
2225       struct growable dest; /* 此和4的一样*/
2226       const char *p = test_array[i].input;
2227
2228       memset (&dest, 0, sizeof (dest));  /*这个lib库的函数*/
2229
2230       append_string (test_array[i].original_url, &dest); /*2、_____________------------>/src/url.c*/
2231       append_uri_pathel (p, p + strlen(p), test_array[i].escaped, &dest); /*3、___________---------->*/
2232       append_char ('\0', &dest);
2233
2234       mu_assert ("test_append_uri_pathel: wrong result",
2235                  strcmp (dest.base, test_array[i].expected_result) == 0);
2236     }
2237
2238   return NULL;
2239 }
2、_____________---------------->
1274 static void
1275 append_string (const char *str, struct growable *dest)
1276 {
1277   int l = strlen (str);  /*获得字符串长度*/
1278   GROW (dest, l);/*3、___________________------------->/src/url.c*/
1279   memcpy (TAIL (dest), str, l);/*7、_______------------>/src/url.c虽然分配了空间,但是还没有赋值所以末尾值还是0*/
1280   TAIL_INCR (dest, l); /*8、___________------------->/src/url.c,改变tail 的值*/
1281 }
3、___________________------------------->
1260 #define GROW(g, append_size) do {                                            \
1261   struct growable *G_ = g;  /*4、___________------------> /src/url.c*/                                                \
1262   DO_REALLOC (G_->base, G_->size, G_->tail + append_size, char); /*5 、____---->            \
1263 } while (0)
4、______________------------->
struct growable{
char *base;
int size;  /*初始化是这些值都是0*/
int tail;
}
5、_______________------------------->
#define DO_REALLOC(basevar, sizevar, needed_size, type) do{
299   long DR_needed_size = (needed_size);    /*这里是一个式子*/                              \
300   long DR_newsize = 0;                                                  \
301   while ((sizevar) < (DR_needed_size)) {                                \
302     DR_newsize = sizevar << 1;     /* 分配的大小是2^n,至少16个字节*/                               \
303     if (DR_newsize < 16)                                                \
304       DR_newsize = 16;                                                  \
305     (sizevar) = DR_newsize;                                             \
306   }                                                                     \
307   if (DR_newsize)                                                       \
308     basevar = xrealloc (basevar, DR_newsize * sizeof (type));  /*分配大小,这里出现了c++的类和c,当然我选择的是c6、____---------->lib/xmalloc.c* /         /*type 本来就是char 类型,为什么还要sizeof(type)?我觉得为了少出人为的错*/\
309 } while (0)
310
6、_______-------------->
52 void *
53 xrealloc (void *p, size_t n)
54 {
55   if (!n && p)
56     {
57      
59       free (p);
60       return NULL;
61     }
62
63   p = realloc (p, n);    /*分配在这里*/
64   if (!p && n)
65     xalloc_die ();  /*abort()*/
66   return p;
67 }
<---------------------------____________________________
GROW调用后,dest被初始化,类型中既有地址,而且有大小*/
7、_______________---------------->
#define TAIL(r) ((r)->base + (r)->tail)
8、_______------------>
#define  #define TAIL_INCR(r, append_count) ((r)->tail += append_count)
<------------------------------------______________________________________________
返回到 mu_run_test(test_append_uri_pathel()函数中
append_uri_pathel() _________----------->9、/src/url.c*/
阅读(598) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~