• Home
  • Raw
  • Download

Lines Matching +full:is +full:- +full:glob

10  * This software is licensed as described in the file COPYING, which
15 * copies of the Software, and permit persons to whom the Software is
18 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21 * SPDX-License-Identifier: curl
38 glob->error = string, glob->pos = column, code
40 static CURLcode glob_fixed(struct URLGlob *glob, char *fixed, size_t len) in glob_fixed() argument
42 struct URLPattern *pat = &glob->pattern[glob->size]; in glob_fixed()
43 pat->type = UPTSet; in glob_fixed()
44 pat->content.Set.size = 1; in glob_fixed()
45 pat->content.Set.ptr_s = 0; in glob_fixed()
46 pat->globindex = -1; in glob_fixed()
48 pat->content.Set.elements = malloc(sizeof(char *)); in glob_fixed()
50 if(!pat->content.Set.elements) in glob_fixed()
53 pat->content.Set.elements[0] = malloc(len + 1); in glob_fixed()
54 if(!pat->content.Set.elements[0]) in glob_fixed()
57 memcpy(pat->content.Set.elements[0], fixed, len); in glob_fixed()
58 pat->content.Set.elements[0][len] = 0; in glob_fixed()
90 static CURLcode glob_set(struct URLGlob *glob, char **patternp, in glob_set() argument
95 ','-separated elements are collected until the next closing '}' in glob_set()
99 char *buf = glob->glob_buffer; in glob_set()
102 size_t opos = *posp-1; in glob_set()
104 pat = &glob->pattern[glob->size]; in glob_set()
106 pat->type = UPTSet; in glob_set()
107 pat->content.Set.size = 0; in glob_set()
108 pat->content.Set.ptr_s = 0; in glob_set()
109 pat->content.Set.elements = NULL; in glob_set()
110 pat->globindex = globindex; in glob_set()
127 if(multiply(amount, pat->content.Set.size + 1)) in glob_set()
134 if(pat->content.Set.elements) { in glob_set()
135 char **new_arr = realloc(pat->content.Set.elements, in glob_set()
136 (size_t)(pat->content.Set.size + 1) * in glob_set()
141 pat->content.Set.elements = new_arr; in glob_set()
144 pat->content.Set.elements = malloc(sizeof(char *)); in glob_set()
146 if(!pat->content.Set.elements) in glob_set()
149 pat->content.Set.elements[pat->content.Set.size] = in glob_set()
150 strdup(glob->glob_buffer); in glob_set()
151 if(!pat->content.Set.elements[pat->content.Set.size]) in glob_set()
153 ++pat->content.Set.size; in glob_set()
161 buf = glob->glob_buffer; in glob_set()
185 static CURLcode glob_range(struct URLGlob *glob, char **patternp, in glob_range() argument
190 - char range: e.g. "a-z]", "B-Q]" in glob_range()
191 - num range: e.g. "0-9]", "17-2000]" in glob_range()
192 - num range with leading zeros: e.g. "001-999]" in glob_range()
193 expression is checked for well-formedness and collected until the next ']' in glob_range()
200 pat = &glob->pattern[glob->size]; in glob_range()
201 pat->globindex = globindex; in glob_range()
210 pat->type = UPTCharRange; in glob_range()
212 rc = sscanf(pattern, "%c-%c%c", &min_c, &max_c, &end_c); in glob_range()
225 /* then this is wrong */ in glob_range()
232 *posp += (pattern - *patternp); in glob_range()
236 (min_c != max_c && (min_c > max_c || step > (unsigned)(max_c - min_c) || in glob_range()
237 (max_c - min_c) > ('z' - 'a')))) in glob_range()
238 /* the pattern is not well-formed */ in glob_range()
242 pat->content.CharRange.step = (int)step; in glob_range()
243 pat->content.CharRange.ptr_c = pat->content.CharRange.min_c = min_c; in glob_range()
244 pat->content.CharRange.max_c = max_c; in glob_range()
246 if(multiply(amount, ((pat->content.CharRange.max_c - in glob_range()
247 pat->content.CharRange.min_c) / in glob_range()
248 pat->content.CharRange.step + 1))) in glob_range()
258 pat->type = UPTNumRange; in glob_range()
259 pat->content.NumRange.padlength = 0; in glob_range()
266 ++pat->content.NumRange.padlength; /* padding length is set for all in glob_range()
276 if(*endp != '-') in glob_range()
310 *posp += (pattern - *patternp); in glob_range()
314 (min_n != max_n && (min_n > max_n || step_n > (max_n - min_n)))) in glob_range()
315 /* the pattern is not well-formed */ in glob_range()
320 pat->content.NumRange.ptr_n = pat->content.NumRange.min_n = min_n; in glob_range()
321 pat->content.NumRange.max_n = max_n; in glob_range()
322 pat->content.NumRange.step = step_n; in glob_range()
324 if(multiply(amount, ((pat->content.NumRange.max_n - in glob_range()
325 pat->content.NumRange.min_n) / in glob_range()
326 pat->content.NumRange.step + 1))) in glob_range()
342 * - Valid globs contain a hyphen and <= 1 colon. in peek_ipv6()
343 * - IPv6 literals contain no hyphens and >= 2 colons. in peek_ipv6()
353 hlen = endbr - str + 1; in peek_ipv6()
373 static CURLcode glob_parse(struct URLGlob *glob, char *pattern, in glob_parse() argument
385 char *buf = glob->glob_buffer; in glob_parse()
420 /* we got a literal string, add it as a single-item list */ in glob_parse()
422 res = glob_fixed(glob, glob->glob_buffer, sublen); in glob_parse()
433 res = glob_set(glob, &pattern, &pos, amount, globindex++); in glob_parse()
440 res = glob_range(glob, &pattern, &pos, amount, globindex++); in glob_parse()
445 if(++glob->size >= GLOB_PATTERN_NUM) in glob_parse()
451 CURLcode glob_url(struct URLGlob **glob, char *url, curl_off_t *urlnum, in glob_url() argument
455 * We can deal with any-size, just make a buffer with the same length in glob_url()
463 *glob = NULL; in glob_url()
475 glob_expand->urllen = strlen(url); in glob_url()
476 glob_expand->glob_buffer = glob_buffer; in glob_url()
482 if(error && glob_expand->error) { in glob_url()
485 if(glob_expand->pos) { in glob_url()
487 glob_expand->error, in glob_url()
488 glob_expand->pos, url, (int)glob_expand->pos - 1, " "); in glob_url()
492 t = glob_expand->error; in glob_url()
494 /* send error description to the error-stream */ in glob_url()
503 *glob = glob_expand; in glob_url()
507 void glob_cleanup(struct URLGlob *glob) in glob_cleanup() argument
512 if(!glob) in glob_cleanup()
515 for(i = 0; i < glob->size; i++) { in glob_cleanup()
516 if((glob->pattern[i].type == UPTSet) && in glob_cleanup()
517 (glob->pattern[i].content.Set.elements)) { in glob_cleanup()
518 for(elem = glob->pattern[i].content.Set.size - 1; in glob_cleanup()
520 --elem) { in glob_cleanup()
521 Curl_safefree(glob->pattern[i].content.Set.elements[elem]); in glob_cleanup()
523 Curl_safefree(glob->pattern[i].content.Set.elements); in glob_cleanup()
526 Curl_safefree(glob->glob_buffer); in glob_cleanup()
527 Curl_safefree(glob); in glob_cleanup()
530 CURLcode glob_next_url(char **globbed, struct URLGlob *glob) in glob_next_url() argument
535 size_t buflen = glob->urllen + 1; in glob_next_url()
536 char *buf = glob->glob_buffer; in glob_next_url()
540 if(!glob->beenhere) in glob_next_url()
541 glob->beenhere = 1; in glob_next_url()
547 for(i = 0; carry && (i < glob->size); i++) { in glob_next_url()
549 pat = &glob->pattern[glob->size - 1 - i]; in glob_next_url()
550 switch(pat->type) { in glob_next_url()
552 if((pat->content.Set.elements) && in glob_next_url()
553 (++pat->content.Set.ptr_s == pat->content.Set.size)) { in glob_next_url()
554 pat->content.Set.ptr_s = 0; in glob_next_url()
559 pat->content.CharRange.ptr_c = in glob_next_url()
560 (char)(pat->content.CharRange.step + in glob_next_url()
561 (int)((unsigned char)pat->content.CharRange.ptr_c)); in glob_next_url()
562 if(pat->content.CharRange.ptr_c > pat->content.CharRange.max_c) { in glob_next_url()
563 pat->content.CharRange.ptr_c = pat->content.CharRange.min_c; in glob_next_url()
568 pat->content.NumRange.ptr_n += pat->content.NumRange.step; in glob_next_url()
569 if(pat->content.NumRange.ptr_n > pat->content.NumRange.max_n) { in glob_next_url()
570 pat->content.NumRange.ptr_n = pat->content.NumRange.min_n; in glob_next_url()
575 printf("internal error: invalid pattern type (%d)\n", (int)pat->type); in glob_next_url()
584 for(i = 0; i < glob->size; ++i) { in glob_next_url()
585 pat = &glob->pattern[i]; in glob_next_url()
586 switch(pat->type) { in glob_next_url()
588 if(pat->content.Set.elements) { in glob_next_url()
590 pat->content.Set.elements[pat->content.Set.ptr_s]); in glob_next_url()
593 buflen -= len; in glob_next_url()
598 *buf++ = pat->content.CharRange.ptr_c; in glob_next_url()
600 buflen--; in glob_next_url()
605 pat->content.NumRange.padlength, in glob_next_url()
606 pat->content.NumRange.ptr_n); in glob_next_url()
609 buflen -= len; in glob_next_url()
612 printf("internal error: invalid pattern type (%d)\n", (int)pat->type); in glob_next_url()
617 *globbed = strdup(glob->glob_buffer); in glob_next_url()
626 CURLcode glob_match_url(char **result, char *filename, struct URLGlob *glob) in glob_match_url() argument
646 if(num && (num < glob->size)) { in glob_match_url()
648 num--; /* make it zero based */ in glob_match_url()
649 /* find the correct glob entry */ in glob_match_url()
650 for(i = 0; i<glob->size; i++) { in glob_match_url()
651 if(glob->pattern[i].globindex == (int)num) { in glob_match_url()
652 pat = &glob->pattern[i]; in glob_match_url()
659 switch(pat->type) { in glob_match_url()
661 if(pat->content.Set.elements) { in glob_match_url()
662 appendthis = pat->content.Set.elements[pat->content.Set.ptr_s]; in glob_match_url()
664 strlen(pat->content.Set.elements[pat->content.Set.ptr_s]); in glob_match_url()
668 numbuf[0] = pat->content.CharRange.ptr_c; in glob_match_url()
675 pat->content.NumRange.padlength, in glob_match_url()
676 pat->content.NumRange.ptr_n); in glob_match_url()
682 (int)pat->type); in glob_match_url()