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