<-------------___________________
返回到all_tests()
{
. . . . .
mu_run_test(test_are_urls_equal); /*1、_______------->/src/url.c */
. . . . . .
}
1、____________------------>
2241 const char*
2242 test_are_urls_equal()
2243 {
2244 int i;
2245 struct {
2246 char *url1;
2247 char *url2;
2248 bool expected_result;
2249 } test_array[] = {
2250 { "", "", true },
2251 { "", "", false },
2252 { "", "", false },
2253 { "~path/", "%7epath/", true },/*%7e为特殊用法见上节分析*/
2254 { "longer-path/", "path/", false },
2255 { "path%2f", "path/", false },
2256 };
2257
2258 for (i = 0; i < sizeof(test_array)/sizeof(test_array[0]); ++i)
2259 {
2260 mu_assert ("test_are_urls_equal: wrong result",
2261 are_urls_equal (test_array[i].url1,
test_array[i].url2) == test_array[i ].expected_result);
/*2、_______________----------->src/url.c*/
2262 }
2263
2264 return NULL;
2265 }
2_______________------------------>
2094 bool
2095 are_urls_equal (const char *u1, const char *u2)
2096 {
2097 const char *p, *q;
2098 int pp, qq;
2099 char ch1, ch2;
2100 assert(u1 && u2);
2101
2102 p = u1;
2103 q = u2;
2104
2105 while (*p && *q
2106 && (pp = getchar_from_escaped_string (p, &ch1)) /*3、________-------->/src/url.c*/
2107 && (qq = getchar_from_escaped_string (q, &ch2))
2108 && (c_tolower(ch1) == c_tolower(ch2))) /*两个字符是否向等*/
2109 {
2110 p += pp;
2111 q += qq; /*依次递增值,刚才返回*/
2112 }
2113
2114 return (*p == 0 && *q == 0 ? true : false); /*看最后返回的是否两个字符串都到末尾*/
3、______________-------------------->
2056 static int
2057 getchar_from_escaped_string (const char *str, char *c)
2058 {
2059 const char *p = str;
2060
2061 assert (str && *str);
2062 assert (c);
2063
2064 if (p[0] == '%')
2065 {
2066 if (!c_isxdigit(p[1]) || !c_isxdigit(p[2]))/*如果是16进制的数什么也不做*/
2067 {
2068 *c = '%';
2069 return 1;
2070 }
2071 else
2072 {
2073 if (p[2] == 0)
2074 return 0; /* error: invalid string */
2075
2076 *c = X2DIGITS_TO_NUM (p[1], p[2]); /*将其转化成0-15之间对应的数,并存放在c指向的地址*/
2077 if (URL_RESERVED_CHAR(*c)) /*4、_______------------>src/url.c*/
2078 {
2079 *c = '%';
2080 return 1;
2081 }
2082 else
2083 return 3;
2084 }
2085 }
2086 else
2087 {
2087 {
2088 *c = p[0]; /*正常的赋值*/
2089 }
2090
2091 return 1;
2092 }
4、__________________----------------->
122 #define URL_RESERVED_CHAR(c) urlchr_test(c, urlchr_reserved)
121 #define urlchr_test(c, mask) (urlchr_table[(unsigned char)(c)]
&(mask)) /*去一个数组里面检查这个字符的真实含义 如果返回为空的话,那么就说明这是%xx格式,要返回3个字节*/
<--------------_______________________
返回all_test()
检查url是否等价完毕
阅读(569) | 评论(0) | 转发(0) |