<---------_______________
关于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*/
阅读(683) | 评论(0) | 转发(0) |