1 #include "cgichk.h"
2
3 /*----------------------------------------------------------------*/
4 // I'm going to keep the old code here...just in case.
5 // You know: for kids.
waitafew(unsigned int del)6 void waitafew(unsigned int del)
7 {
8 /*
9 clock_t prevtime = clock();
10
11 while(1)
12 {
13 if ((clock() - prevtime) >= (CLOCKS_PER_SEC * del)) return;
14 }
15 */
16 sleep(del);
17 }
18 /*----------------------------------------------------------------*/
PRINT(char * arg,...)19 void PRINT(char *arg, ...)
20 {
21 va_list v;
22 char *buff;
23
24 buff = (char*)malloc(8192);
25
26 va_start(v, arg);
27 vsprintf(buff, arg, v);
28 va_end(v);
29
30 fprintf(parms.OUTPUT, "%s", buff);
31 fflush(parms.OUTPUT);
32 free(buff);
33 }
34 /*----------------------------------------------------------------*/
CPRINT(char * arg,...)35 void CPRINT(char *arg, ...)
36 {
37 va_list v;
38 char *buff;
39
40 if (parms.OUTPUT != stdout)
41 return;
42
43 buff = (char*)malloc(8192);
44
45 va_start(v, arg);
46 vsprintf(buff, arg, v);
47 va_end(v);
48
49 printf("%s", buff);
50 fflush(parms.OUTPUT);
51 free(buff);
52 }
53
54 /*----------------------------------------------------------------*/
55
56 // _url = string containing full/partial URL
57 // _host = string to put host info in
58 // hl = max length of _host string
59 // _port = integer to recieve port #
60 // defport = default port #
61 // _path = string containing file path info
62 // pl = length of _path string
63
breakup_url(char * _url,char * _host,int hl,int * _port,int defport,char * _path,int pl)64 void breakup_url( char *_url,
65 char *_host, int hl,
66 int *_port, int defport,
67 char *_path, int pl)
68 {
69 char *u, *t;
70 int hasport = 0,
71 haspath = 0;
72 char *end;
73
74 // Check for null's
75 //if (_url == NULL || _host == NULL || _port == NULL || _path == NULL)
76 // return;
77
78 memset(_host, 0, hl);
79 memset(_path, 0, pl);
80
81 u = _url;
82 end = _url + strlen(_url);
83
84 *_port = defport;
85
86 if ((t = (char *)strstr(u, "://"))) // skip past http bit
87 u = t + 3;
88
89 // parse hostname and port
90
91 if ((t = (char *)index(u, ':'))) // does host have a port #?
92 hasport = 1;
93
94 if ((t = (char *)index(u, '/'))) // does host have path?
95 haspath = 1;
96
97 if (hasport)
98 t = (char *)index(u, ':');
99 else
100 t = (char *)index(u, '/');
101
102 if (t == NULL) // found neither :port nor /path
103 {
104 if (_host)
105 strcpy(_host, u);
106 return;
107 }
108
109 if (_host)
110 strncpy(_host, u, (t-u));
111
112 u = t;
113
114 // have hostname at this point
115
116 if (hasport)
117 {
118 if ((t = (char *)index(u, '/')) == NULL) // check for path seperator
119 t = end; // if none, grab to end of url
120 else
121 *t = 0;
122
123 u++;
124
125 if (_port)
126 *_port = atoi(u);
127
128 u = t;
129 // FIXME: Convert ascii to int and store in 'port'
130 }
131
132 if (u == end)
133 return; // had just host/port, shows over
134
135 if (*t == 0)
136 *t = '/'; // *snicker*
137 // have port at this point
138 if (_path)
139 strcpy(_path, u);
140 }
141
142 /*----------------------------------------------------------------
143 // FIXME: This needs to be rewritten, or at least have the port number
144 // be found in the right place.
145
146 void OLD_breakup_url(char *url, char *base, char *dir, unsigned int *port)
147 {
148 char *a, *b, *p;
149
150 if ((!url) || (!base) || (!dir) || (!port)) return;
151
152 a = (char*)strstr(url, "://");
153 if (a)
154 {
155 a+=3; // skip http://
156 }
157 else
158 {
159 a = url;
160 }
161 //FIXME: ports normally come after the
162 // domain name in URL's, not after dir
163 p = (char*)strchr(a, ':'); // look for port number
164 if (p)
165 {
166 *port = atoi(p+1);
167 }
168 else
169 {
170 *port = 80;
171 }
172
173 b = (char*)strchr(a, '/'); // look for first directory slash, if any
174 if (b) // has it
175 {
176 memcpy(base, a, b-a);
177 a = b;
178 if (p)
179 {
180 memcpy(dir, a, p - a);
181 }
182 else
183 {
184 memcpy(dir, a, strlen(a));
185 }
186 }
187 else // doesn't have it
188 {
189 if (p)
190 {
191 memcpy(base, a, p - a);
192 }
193 else
194 {
195 memcpy(base, a, strlen(a));
196 }
197 }
198 }
199 */
200 /*----------------------------------------------------------------*/
lowerstr(char * str)201 char *lowerstr(char *str)
202 {
203 int x;
204
205 for (x = 0; x < strlen(str); x++)
206 {
207 str[x] = tolower(str[x]);
208 }
209 return str;
210 }
211 /*----------------------------------------------------------------*/
cgichk_strnstr(const char * HAYSTACK,const char * NEEDLE)212 char *cgichk_strnstr(const char *HAYSTACK, const char *NEEDLE)
213 {
214 char *h, *n, *res;
215
216 h = (char *)strdup(HAYSTACK);
217 n = (char *)strdup(NEEDLE);
218 lowerstr(h);
219 lowerstr(n);
220
221 res = (char*)strstr(h, n);
222 free(h);
223 free(n);
224 return res;
225 }
226