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 // example: Thu, 29 Nov 2012 21:35:35 GMT 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 // add base url -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 // remove trailing slash -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 //printf("token: {%.*s}\n", token.length, token.ptr); 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 }