1 #include <stdio.h>
2 #include <string.h>
3 #include "vars.h"
4
5 #define MAX 1024
6
7 /***********************************************
8 ******* SIMPLE COMPARE URLS FOR SORT **********/
cmp_urls(const void * arg1,const void * arg2)9 int cmp_urls(const void *arg1, const void *arg2)
10 {
11 char *s1,*s2;
12 s1=*(char **)arg1;
13 s2=*(char **)arg2;
14
15 while (1)
16 {
17
18 if (*s1==0 && *s2==0)
19 {
20 #ifdef DEBUG_URLS_CMP
21 fprintf (stderr,"cmp: %s == %s \n",*(char **)arg1,*(char **)arg2);
22 #endif
23 return (0);
24 }
25 if (*s1==*s2) {s1++;s2++;continue;}
26 if (*s1<*s2)
27 {
28 #ifdef DEBUG_URLS_CMP
29 fprintf (stderr,"cmp: %s < %s \n",*(char **)arg1,*(char **)arg2);
30 #endif
31 return(-1);
32 }
33 else
34 {
35 #ifdef DEBUG_URLS_CMP
36 fprintf (stderr,"cmp: %s > %s \n",*(char **)arg1,*(char **)arg2);
37 #endif
38 return (1);
39 }
40 }
41 }
42
43
44 /********************************************
45 ******* COMPARE FINISHED IN 0x1 ***********/
46
cmp_urls_bs(const void * arg1,const void * arg2)47 int cmp_urls_bs(const void *arg1, const void *arg2)
48 {
49 char *s1,*s2;
50 s1=(char *)arg1;
51 s2=*(char **)arg2;
52
53
54 // printf ("cmp: %s ? %s \n",(char *)arg1,*(char**)arg2);
55
56 while (1)
57 {
58
59 if (*s1==0 && (*s2==0 || *s2==1))
60 {
61 #ifdef DEBUG_URLS_CMP
62 fprintf (stderr,"cmp: %s == %s \n",(char *)arg1,*(char **)arg2);
63 #endif
64 return (0);
65 }
66 if (*s1==*s2) {s1++;s2++;continue;}
67 if (*s1<*s2)
68 {
69 #ifdef DEBUG_URLS_CMP
70 fprintf (stderr,"cmp: %s < %s \n",(char *)arg1,*(char **)arg2);
71 #endif
72 return(-1);
73 }
74 else
75 {
76 #ifdef DEBUG_URLS_CMP
77 fprintf (stderr,"cmp: %s > %s \n",(char *)arg1,*(char **)arg2);
78 #endif
79 return (1);
80 }
81 }
82 }
83
84 /********************************
85 ******* COMPARE PORT ***********/
86
cmp_urls_port(const void * arg1,const void * arg2)87 int cmp_urls_port(const void *arg1, const void *arg2)
88 {
89 char *s1,*s2;
90 s1=(char *)arg1;
91 s2=(char *)arg2;
92
93 // printf ("cmp port: %s ? %s \n",(char *)arg1,(char*)arg2);
94
95 while (1)
96 {
97
98 if (*s1==0 && (*s2==0 || *s2==1))
99 {
100 #ifdef DEBUG_URLS_CMP
101 fprintf (stderr,"cmp: %s == %s \n",(char *)arg1,(char *)arg2);
102 #endif
103 return (0);
104 }
105 if (*s1==*s2) {s1++;s2++;continue;}
106 if (*s1<*s2)
107 {
108 #ifdef DEBUG_URLS_CMP
109 fprintf (stderr,"cmp: %s < %s \n",(char *)arg1,(char *)arg2);
110 #endif
111 return(-1);
112 }
113 else
114 {
115 #ifdef DEBUG_URLS_CMP
116 fprintf (stderr,"cmp: %s > %s \n",(char *)arg1,(char *)arg2);
117 #endif
118 return (1);
119 }
120 }
121 }
122
123 /********************************************
124 *********** COMPARE SUBDOMEN ***************/
cmp_urls_sub(const void * arg1,const void * arg2)125 int cmp_urls_sub(const void *arg1, const void *arg2)
126 {
127 char *s1,*s2,*e1,*e2;
128 s1=(char *)arg1;
129 s2=(char *)arg2;
130 e1=strchr(s1,0)-1;
131 e2=strchr(s2,1)-1;
132
133 // printf ("cmp: %s ? %s\n", (char *)arg1, (char *)arg2);
134
135 while (1)
136 {
137 // printf("%c ? %c\n",*e1,*e2);
138
139 if ((e1==s1-1 || *e1=='.') && (e2==s2-1))
140 {
141 #ifdef DEBUG_URLS_CMP
142 fprintf (stderr,"cmp: %s == %s \n",(char *)arg1,(char *)arg2);
143 #endif
144 return (0);
145 }
146
147 if (e1==s1-1 && e2!=s2-1)
148 {
149 #ifdef DEBUG_URLS_CMP
150 fprintf (stderr,"cmp: %s < %s (first string ended)\n",(char *)arg1,(char *)arg2);
151 #endif
152 return(-1);
153 }
154
155 if (e1!=s1-1 && e2==s2-1)
156 {
157 #ifdef DEBUG_URLS_CMP
158 fprintf (stderr,"cmp: %s > %s (second string ended)\n",(char *)arg1,(char *)arg2);
159 #endif
160 return(1);
161 }
162
163 if (*e1==*e2) {e1--;e2--;continue;}
164 if (*e1<*e2)
165 {
166 #ifdef DEBUG_URLS_CMP
167 fprintf (stderr,"cmp: %s < %s \n",(char *)arg1,(char *)arg2);
168 #endif
169 return(-1);
170 }
171 else
172 {
173 #ifdef DEBUG_URLS_CMP
174 fprintf (stderr,"cmp: %s > %s \n",(char *)arg1,(char *)arg2);
175 #endif
176 return (1);
177 }
178 return(0);
179 }
180 }
181
182 /********************************************
183 ************* COMPARE DIRS *****************/
184
cmp_urls_dirs(const void * arg1,const void * arg2)185 int cmp_urls_dirs(const void *arg1, const void *arg2)
186 {
187 char *s1,*s2;
188 s1=(char *)arg1;
189 s2=(char *)arg2;
190
191 // printf ("cmp dirs: %s ? %s \n",(char *)arg1,(char *)arg2);
192
193 while (1)
194 {
195
196 if ((*s1==0 || *s1=='/' || *s1=='?') && (*s2==0 || *s2==1))
197 {
198 #ifdef DEBUG_URLS_CMP
199 fprintf (stderr,"cmp: %s == %s \n",(char *)arg1,(char *)arg2);
200 #endif
201 return (0);
202 }
203 if (*s1==*s2) {s1++;s2++;continue;}
204 if (*s1<*s2)
205 {
206 #ifdef DEBUG_URLS_CMP
207 fprintf (stderr,"cmp: %s < %s \n",(char *)arg1,(char *)arg2);
208 #endif
209 return(-1);
210 }
211 else
212 {
213 #ifdef DEBUG_URLS_CMP
214 fprintf (stderr,"cmp: %s > %s \n",(char *)arg1,(char *)arg2);
215 #endif
216 return (1);
217 }
218 }
219 }
220