Chinaunix首页 | 论坛 | 博客

分类: LINUX

2011-10-03 09:46:47

  <-------------___________________
返回到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是否等价完毕
阅读(541) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~