24 #define ENABLE_CURLX_PRINTF 34 #define GLOBERROR(string, column, code) \ 35 glob->error = string, glob->pos = column, code 66 static int multiply(
unsigned long *amount,
long with)
68 unsigned long sum = *amount * with;
73 if(sum/with != *amount)
80 size_t *posp,
unsigned long *amount,
89 char *pattern = *patternp;
90 char *opattern = pattern;
91 size_t opos = *posp-1;
111 if(opattern == pattern)
112 return GLOBERROR(
"empty string within braces", *posp,
125 (pat->
content.
Set.size + 1) *
sizeof(
char *));
143 if(*pattern ==
'}') {
174 size_t *posp,
unsigned long *amount,
185 char *pattern = *patternp;
196 unsigned long step = 1;
200 rc = sscanf(pattern,
"%c-%c%c", &min_c, &max_c, &end_c);
206 step = strtoul(&pattern[4], &endp, 10);
207 if(errno || &pattern[4] == endp || *endp !=
']')
212 else if(end_c !=
']')
220 *posp += (pattern - *patternp);
222 if(rc != 3 || !step || step > (
unsigned)INT_MAX ||
223 (min_c == max_c && step != 1) ||
224 (min_c != max_c && (min_c > max_c || step > (
unsigned)(max_c - min_c) ||
225 (max_c - min_c) > (
'z' -
'a'))))
242 unsigned long max_n = 0;
243 unsigned long step_n = 0;
249 if(*pattern ==
'0') {
260 min_n = strtoul(pattern, &endp, 10);
261 if(errno || (endp == pattern))
268 while(*pattern &&
ISBLANK(*pattern))
275 max_n = strtoul(pattern, &endp, 10);
279 else if(*endp ==
':') {
282 step_n = strtoul(pattern, &endp, 10);
289 if(endp && (*endp ==
']')) {
298 *posp += (pattern - *patternp);
300 if(!endp || !step_n ||
301 (min_n == max_n && step_n != 1) ||
302 (min_n != max_n && (min_n > max_n || step_n > (max_n - min_n))))
333 if(str[i++] !=
'[') {
337 const char c = str[i++];
338 if(
ISALNUM(c) || c ==
'.' || c ==
'%') {
355 size_t pos,
unsigned long *amount)
365 while(*pattern && !res) {
368 while(*pattern && *pattern !=
'{') {
369 if(*pattern ==
'[') {
373 memcpy(buf, pattern, skip);
381 if(*pattern ==
'}' || *pattern ==
']')
382 return GLOBERROR(
"unmatched close brace/bracket", pos,
386 if(*pattern ==
'\\' &&
387 (*(pattern + 1) ==
'{' || *(pattern + 1) ==
'[' ||
388 *(pattern + 1) ==
'}' || *(pattern + 1) ==
']') ) {
412 res =
glob_set(glob, &pattern, &pos, amount, globindex++);
419 res =
glob_range(glob, &pattern, &pos, amount, globindex++);
438 unsigned long amount = 0;
444 glob_buffer =
malloc(strlen(url) + 1);
454 glob_expand->
urllen = strlen(url);
457 res =
glob_parse(glob_expand, url, 1, &amount);
461 if(error && glob_expand->
error) {
464 if(glob_expand->
pos) {
465 snprintf(text,
sizeof(text),
"%s in column %zu", glob_expand->
error,
470 t = glob_expand->
error;
473 fprintf(error,
"curl: (%d) [globbing] %s\n", res, t);
490 for(i = 0; i < glob->
size; i++) {
510 size_t buflen = glob->
urllen + 1;
522 for(i = 0; carry && (i < glob->
size); i++) {
550 printf(
"internal error: invalid pattern type (%d)\n", (
int)pat->
type);
560 for(i = 0; i < glob->
size; ++
i) {
588 printf(
"internal error: invalid pattern type (%d)\n", (
int)pat->
type);
605 char *appendthis = NULL;
606 size_t appendlen = 0;
607 size_t stringlen = 0;
615 allocsize = strlen(filename) + 1;
617 target =
malloc(allocsize);
622 if(*filename ==
'#' &&
ISDIGIT(filename[1])) {
624 char *
ptr = filename;
625 unsigned long num = strtoul(&filename[1], &filename, 10);
628 if(num < glob->
size) {
631 for(i = 0; i<glob->
size; i++) {
655 snprintf(numbuf,
sizeof(numbuf),
"%0*lu",
659 appendlen = strlen(numbuf);
662 fprintf(stderr,
"internal error: invalid pattern type (%d)\n",
671 appendthis = filename++;
676 appendthis = filename++;
679 if(appendlen + stringlen >= allocsize) {
683 allocsize = (appendlen + stringlen) * 2;
684 newstr =
realloc(target, allocsize + 1);
691 memcpy(&target[stringlen], appendthis, appendlen);
692 stringlen += appendlen;
694 target[stringlen]=
'\0';
696 #if defined(MSDOS) || defined(WIN32) 699 SANITIZEcode sc = sanitize_file_name(&sanitized, target,
700 (SANITIZE_ALLOW_PATH |
701 SANITIZE_ALLOW_RESERVED));
URLPattern pattern[GLOB_PATTERN_NUM]
struct URLPattern::@38::@39 Set
struct URLPattern::@38::@41 NumRange
UNITTEST_START char * ptr
union URLPattern::@38 content
#define realloc(ptr, size)
geometry_msgs::TransformStamped t
UNITTEST_START int result
memcpy(filename, filename1, strlen(filename1))
struct URLPattern::@38::@40 CharRange
#define Curl_safefree(ptr)
static void skip(const char **date)
#define calloc(nbelem, size)