diff -r 98adda6171d1 -r 2c8514b3891b test/gs/ctest.html
--- a/test/gs/ctest.html Sun Mar 02 12:47:31 2025 +0100
+++ b/test/gs/ctest.html Sun Mar 02 16:06:24 2025 +0100
@@ -33,6 +33,9 @@
span.c2html-string {
color: darkorange;
}
+ span.c2html-number {
+ color: dodgerblue;
+ }
span.c2html-comment {
color: grey;
}
@@ -101,7 +104,7 @@
48 #include "crypto.h"
49 #include "webdav.h"
50
- 51 #define MACRO1337 1337L
+ 51 #define MACRO1337 1337L
52
53 static const char* continuation_test = "this is a string\
54 with a continuation";
@@ -120,44 +123,44 @@
67 time_t util_parse_lastmodified(char *str) {
68
69 if(!str) {
- 70 return 0;
+ 70 return 0;
71 } else {
72 return curl_getdate(str, NULL);
73 }
74 }
75
76 int util_getboolean(char *v) {
- 77 if(v[0] == 'T' || v[0] == 't') {
- 78 return 1;
+ 77 if(v[0] == 'T' || v[0] == 't') {
+ 78 return 1;
79 }
- 80 return 0;
+ 80 return 0;
81 }
82
83 int util_strtoint(char *str, int64_t *value) {
84 char *end;
- 85 int64_t val = strtoll(str, &end, 0);
- 86 if(strlen(end) == 0) {
+ 85 int64_t val = strtoll(str, &end, 0);
+ 86 if(strlen(end) == 0) {
87 *value = val;
- 88 return 1;
+ 88 return 1;
89 } else {
- 90 return 0;
+ 90 return 0;
91 }
92 }
93
94 char* util_url_path(char *url) {
95 char *path = NULL;
96 size_t len = strlen(url);
- 97 int slashcount = 0;
+ 97 int slashcount = 0;
98 int slmax;
- 99 if(len > 7 && !strncasecmp(url, "http://", 7)) {
-100 slmax = 3;
-101 } else if(len > 8 && !strncasecmp(url, "https://", 8)) {
-102 slmax = 3;
+ 99 if(len > 7 && !strncasecmp(url, "http://", 7)) {
+100 slmax = 3;
+101 } else if(len > 8 && !strncasecmp(url, "https://", 8)) {
+102 slmax = 3;
103 } else {
-104 slmax = 1;
+104 slmax = 1;
105 }
106 char c;
-107 for(int i=0;i<len;i++) {
+107 for(int i=0;i<len;i++) {
108 c = url[i];
109 if(c == '/') {
110 slashcount++;
@@ -178,24 +181,24 @@
125 }
126
127 char* util_resource_name(char *url) {
-128 int si = 0;
-129 int osi = 0;
-130 int i = 0;
-131 int p = 0;
+128 int si = 0;
+129 int osi = 0;
+130 int i = 0;
+131 int p = 0;
132 char c;
-133 while((c = url[i]) != 0) {
+133 while((c = url[i]) != 0) {
134 if(c == '/') {
135 osi = si;
136 si = i;
-137 p = 1;
+137 p = 1;
138 }
139 i++;
140 }
141
142 char *name = url + si + p;
-143 if(name[0] == 0) {
+143 if(name[0] == 0) {
144 name = url + osi + p;
-145 if(name[0] == 0) {
+145 if(name[0] == 0) {
146 return url;
147 }
148 }
@@ -217,25 +220,25 @@
164 if(p) {
165 path = sstr(p);
166 } else {
-167 path = sstrn("", 0);
+167 path = sstrn("", 0);
168 }
169
-170 int add_separator = 0;
-171 if(base.ptr[base.length-1] == '/') {
-172 if(path.ptr[0] == '/') {
+170 int add_separator = 0;
+171 if(base.ptr[base.length-1] == '/') {
+172 if(path.ptr[0] == '/') {
173 base.length--;
174 }
175 } else {
-176 if(path.length == 0 || path.ptr[0] != '/') {
-177 add_separator = 1;
+176 if(path.length == 0 || path.ptr[0] != '/') {
+177 add_separator = 1;
178 }
179 }
180
181 sstr_t url;
182 if(add_separator) {
-183 url = sstrcat(3, base, sstr("/"), path);
+183 url = sstrcat(3, base, sstr("/"), path);
184 } else {
-185 url = sstrcat(2, base, path);
+185 url = sstrcat(2, base, path);
186 }
187
188 return url.ptr;
@@ -248,40 +251,40 @@
195 char *base_path = util_url_path(sn->base_url);
196 base.length -= strlen(base_path);
197
-198 sstr_t url = sstrcat(2, base, href_str);
+198 sstr_t url = sstrcat(2, base, href_str);
199
200 curl_easy_setopt(sn->handle, CURLOPT_URL, url.ptr);
201 free(url.ptr);
202 }
203
204 char* util_path_to_url(DavSession *sn, char *path) {
-205 char *space = malloc(256);
-206 UcxBuffer *url = ucx_buffer_new(space, 256, CX_BUFFER_AUTO_EXTEND);
+205 char *space = malloc(256);
+206 UcxBuffer *url = ucx_buffer_new(space, 256, CX_BUFFER_AUTO_EXTEND);
207
208
-209 ucx_buffer_write(sn->base_url, 1, strlen(sn->base_url), url);
+209 ucx_buffer_write(sn->base_url, 1, strlen(sn->base_url), url);
210
-211 ucx_buffer_seek(url, -1, SEEK_CUR);
+211 ucx_buffer_seek(url, -1, SEEK_CUR);
212
213 sstr_t p = sstr(path);
-214 ssize_t ntk = 0;
+214 ssize_t ntk = 0;
215 sstr_t *tks = sstrsplit(p, S("/"), &ntk);
216
-217 for(int i=0;i<ntk;i++) {
+217 for(int i=0;i<ntk;i++) {
218 sstr_t node = tks[i];
-219 if(node.length > 0) {
+219 if(node.length > 0) {
220 char *esc = curl_easy_escape(sn->handle, node.ptr, node.length);
221 ucx_buffer_putc(url, '/');
-222 ucx_buffer_write(esc, 1, strlen(esc), url);
+222 ucx_buffer_write(esc, 1, strlen(esc), url);
223 curl_free(esc);
224 }
225 free(node.ptr);
226 }
227 free(tks);
-228 if(path[p.length-1] == '/') {
+228 if(path[p.length-1] == '/') {
229 ucx_buffer_putc(url, '/');
230 }
-231 ucx_buffer_putc(url, 0);
+231 ucx_buffer_putc(url, 0);
232
233 space = url->space;
234 ucx_buffer_free(url);
@@ -294,7 +297,7 @@
241 size_t namelen = strlen(name);
242 size_t pathlen = strlen(path);
243 size_t parentlen = pathlen - namelen;
-244 char *parent = malloc(parentlen + 1);
+244 char *parent = malloc(parentlen + 1);
245 memcpy(parent, path, parentlen);
246 parent[parentlen] = '\0';
247 return parent;
@@ -314,13 +317,13 @@
261
262
263 char* util_base64decode(char *in) {
-264 int len = 0;
+264 int len = 0;
265 return util_base64decode_len(in, &len);
266 }
267
268 char* util_base64decode_len(char* in, int *outlen) {
269 size_t len = strlen(in);
-270 char *out = calloc(1, len);
+270 char *out = calloc(1, len);
271
272 BIO* b = BIO_new_mem_buf(in, len);
273 BIO *d = BIO_new(BIO_f_base64());
@@ -347,8 +350,8 @@
294
295 BIO_get_mem_ptr(e, &mem);
296 char *out = malloc(mem->length);
-297 memcpy(out, mem->data, mem->length -1);
-298 out[mem->length - 1] = '\0';
+297 memcpy(out, mem->data, mem->length -1);
+298 out[mem->length - 1] = '\0';
299
300 BIO_free_all(e);
301
@@ -384,8 +387,8 @@
331
332
333 char* util_random_str() {
-334 unsigned char *str = malloc(25);
-335 str[24] = '\0';
+334 unsigned char *str = malloc(25);
+335 str[24] = '\0';
336
337 sstr_t t = S(
338 "01234567890"
@@ -393,8 +396,8 @@
340 "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
341 const unsigned char *table = (const unsigned char*)t.ptr;
342
-343 RAND_pseudo_bytes(str, 24);
-344 for(int i=0;i<24;i++) {
+343 RAND_pseudo_bytes(str, 24);
+344 for(int i=0;i<24;i++) {
345 int c = str[i] % t.length;
346 str[i] = table[c];
347 }
@@ -409,30 +412,30 @@
356
357 sstr_t util_getsubstr_until_token(sstr_t str, sstr_t token, sstr_t *sub) {
358 int i;
-359 int token_start = -1;
-360 int token_end = -1;
-361 for(i=0;i<=str.length;i++) {
+359 int token_start = -1;
+360 int token_end = -1;
+361 for(i=0;i<=str.length;i++) {
362 int c;
363 if(i == str.length) {
364 c = ' ';
365 } else {
366 c = str.ptr[i];
367 }
-368 if(c < 33) {
-369 if(token_start != -1) {
+368 if(c < 33) {
+369 if(token_start != -1) {
370 token_end = i;
371 size_t len = token_end - token_start;
372 sstr_t tk = sstrsubsl(str, token_start, len);
373
374 if(!sstrcmp(tk, token)) {
-375 *sub = sstrtrim(sstrsubsl(str, 0, token_start));
+375 *sub = sstrtrim(sstrsubsl(str, 0, token_start));
376 break;
377 }
-378 token_start = -1;
-379 token_end = -1;
+378 token_start = -1;
+379 token_end = -1;
380 }
381 } else {
-382 if(token_start == -1) {
+382 if(token_start == -1) {
383 token_start = i;
384 }
385 }
@@ -442,7 +445,7 @@
389 return sstrtrim(sstrsubs(str, i));
390 } else {
391 str.ptr = NULL;
-392 str.length = 0;
+392 str.length = 0;
393 return str;
394 }
395 }