MIRROR: javascript for ๐Ÿœ's, a tiny runtime with big ambitions
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

bring path module closer to spec

+17 -4
+17 -4
src/modules/path.c
··· 332 332 } 333 333 334 334 if (pos == 0) result[pos++] = '.'; 335 - result[pos] = '\0'; 335 + if (path_len > root_len && path_is_sep(style, path[path_len - 1]) 336 + && pos > 0 && !path_is_sep(style, result[pos - 1])) { 337 + result = realloc(result, pos + 2); 338 + if (!result) goto fail; 339 + result[pos++] = sep; 340 + } 336 341 342 + result[pos] = '\0'; 337 343 free(segments); 338 344 free(seg_lens); 339 345 free(normalized); 346 + 340 347 return result; 341 348 342 349 fail: ··· 413 420 if (i > 0 && path_is_sep(style, segments[i][0])) start = 1; 414 421 415 422 size_t seg_len = lengths[i]; 416 - while (seg_len > start && path_is_sep(style, segments[i][seg_len - 1])) seg_len--; 423 + while (seg_len > start + 1 && path_is_sep(style, segments[i][seg_len - 1])) seg_len--; 417 424 418 425 if (seg_len > start) { 419 426 memcpy(result + pos, segments[i] + start, seg_len - start); ··· 421 428 } 422 429 } 423 430 424 - result[pos] = '\0'; 431 + if ( 432 + valid_segments > 0 && lengths[valid_segments - 1] > 0 433 + && path_is_sep(style, segments[valid_segments - 1][lengths[valid_segments - 1] - 1]) 434 + && pos > 0 && !path_is_sep(style, result[pos - 1]) 435 + ) result[pos++] = sep; 425 436 437 + result[pos] = '\0'; 426 438 char *normalized = normalize_path_full(style, result, pos); 439 + 427 440 free(result); 428 441 free(segments); 429 442 free(lengths); 430 443 431 444 if (!normalized) return js_mkerr(js, "Out of memory"); 432 - 433 445 ant_value_t ret = js_mkstr(js, normalized, strlen(normalized)); 434 446 free(normalized); 447 + 435 448 return ret; 436 449 } 437 450