Loading src/urlglob.c +35 −14 Original line number Original line Diff line number Diff line Loading @@ -86,13 +86,21 @@ static GlobCode glob_set(URLGlob *glob, char *pattern, case ',': case ',': case '}': /* set element completed */ case '}': /* set element completed */ *buf = '\0'; *buf = '\0'; if(pat->content.Set.elements) if(pat->content.Set.elements) { pat->content.Set.elements = char **new_arr = realloc(pat->content.Set.elements, realloc(pat->content.Set.elements, (pat->content.Set.size + 1) * sizeof(char*)); (pat->content.Set.size + 1) * sizeof(char*)); if(!new_arr) { short elem; for(elem = 0; elem < pat->content.Set.size; elem++) free(pat->content.Set.elements[elem]); free(pat->content.Set.elements); pat->content.Set.ptr_s = 0; pat->content.Set.size = 0; } pat->content.Set.elements = new_arr; } else else pat->content.Set.elements = pat->content.Set.elements = malloc(sizeof(char*)); malloc((pat->content.Set.size + 1) * sizeof(char*)); if(!pat->content.Set.elements) { if(!pat->content.Set.elements) { snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory"); snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory"); return GLOB_ERROR; return GLOB_ERROR; Loading @@ -100,6 +108,13 @@ static GlobCode glob_set(URLGlob *glob, char *pattern, pat->content.Set.elements[pat->content.Set.size] = pat->content.Set.elements[pat->content.Set.size] = strdup(glob->glob_buffer); strdup(glob->glob_buffer); if(!pat->content.Set.elements[pat->content.Set.size]) { if(!pat->content.Set.elements[pat->content.Set.size]) { short elem; for(elem = 0; elem < pat->content.Set.size; elem++) free(pat->content.Set.elements[elem]); free(pat->content.Set.elements); pat->content.Set.elements = NULL; pat->content.Set.ptr_s = 0; pat->content.Set.size = 0; snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory"); snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory"); return GLOB_ERROR; return GLOB_ERROR; } } Loading Loading @@ -405,7 +420,8 @@ char *glob_next_url(URLGlob *glob) pat = &glob->pattern[i]; pat = &glob->pattern[i]; switch (pat->type) { switch (pat->type) { case UPTSet: case UPTSet: if(++pat->content.Set.ptr_s == pat->content.Set.size) { if((pat->content.Set.elements) && (++pat->content.Set.ptr_s == pat->content.Set.size)) { pat->content.Set.ptr_s = 0; pat->content.Set.ptr_s = 0; carry = TRUE; carry = TRUE; } } Loading Loading @@ -445,11 +461,13 @@ char *glob_next_url(URLGlob *glob) pat = &glob->pattern[j/2]; pat = &glob->pattern[j/2]; switch(pat->type) { switch(pat->type) { case UPTSet: case UPTSet: if(pat->content.Set.elements) { len = strlen(pat->content.Set.elements[pat->content.Set.ptr_s]); len = strlen(pat->content.Set.elements[pat->content.Set.ptr_s]); snprintf(buf, buflen, "%s", snprintf(buf, buflen, "%s", pat->content.Set.elements[pat->content.Set.ptr_s]); pat->content.Set.elements[pat->content.Set.ptr_s]); buf += len; buf += len; buflen -= len; buflen -= len; } break; break; case UPTCharRange: case UPTCharRange: *buf++ = pat->content.CharRange.ptr_c; *buf++ = pat->content.CharRange.ptr_c; Loading Loading @@ -501,8 +519,11 @@ char *glob_match_url(char *filename, URLGlob *glob) URLPattern pat = glob->pattern[i]; URLPattern pat = glob->pattern[i]; switch (pat.type) { switch (pat.type) { case UPTSet: case UPTSet: if(pat.content.Set.elements) { appendthis = pat.content.Set.elements[pat.content.Set.ptr_s]; appendthis = pat.content.Set.elements[pat.content.Set.ptr_s]; appendlen = strlen(pat.content.Set.elements[pat.content.Set.ptr_s]); appendlen = strlen(pat.content.Set.elements[pat.content.Set.ptr_s]); } break; break; case UPTCharRange: case UPTCharRange: numbuf[0]=pat.content.CharRange.ptr_c; numbuf[0]=pat.content.CharRange.ptr_c; Loading Loading
src/urlglob.c +35 −14 Original line number Original line Diff line number Diff line Loading @@ -86,13 +86,21 @@ static GlobCode glob_set(URLGlob *glob, char *pattern, case ',': case ',': case '}': /* set element completed */ case '}': /* set element completed */ *buf = '\0'; *buf = '\0'; if(pat->content.Set.elements) if(pat->content.Set.elements) { pat->content.Set.elements = char **new_arr = realloc(pat->content.Set.elements, realloc(pat->content.Set.elements, (pat->content.Set.size + 1) * sizeof(char*)); (pat->content.Set.size + 1) * sizeof(char*)); if(!new_arr) { short elem; for(elem = 0; elem < pat->content.Set.size; elem++) free(pat->content.Set.elements[elem]); free(pat->content.Set.elements); pat->content.Set.ptr_s = 0; pat->content.Set.size = 0; } pat->content.Set.elements = new_arr; } else else pat->content.Set.elements = pat->content.Set.elements = malloc(sizeof(char*)); malloc((pat->content.Set.size + 1) * sizeof(char*)); if(!pat->content.Set.elements) { if(!pat->content.Set.elements) { snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory"); snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory"); return GLOB_ERROR; return GLOB_ERROR; Loading @@ -100,6 +108,13 @@ static GlobCode glob_set(URLGlob *glob, char *pattern, pat->content.Set.elements[pat->content.Set.size] = pat->content.Set.elements[pat->content.Set.size] = strdup(glob->glob_buffer); strdup(glob->glob_buffer); if(!pat->content.Set.elements[pat->content.Set.size]) { if(!pat->content.Set.elements[pat->content.Set.size]) { short elem; for(elem = 0; elem < pat->content.Set.size; elem++) free(pat->content.Set.elements[elem]); free(pat->content.Set.elements); pat->content.Set.elements = NULL; pat->content.Set.ptr_s = 0; pat->content.Set.size = 0; snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory"); snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory"); return GLOB_ERROR; return GLOB_ERROR; } } Loading Loading @@ -405,7 +420,8 @@ char *glob_next_url(URLGlob *glob) pat = &glob->pattern[i]; pat = &glob->pattern[i]; switch (pat->type) { switch (pat->type) { case UPTSet: case UPTSet: if(++pat->content.Set.ptr_s == pat->content.Set.size) { if((pat->content.Set.elements) && (++pat->content.Set.ptr_s == pat->content.Set.size)) { pat->content.Set.ptr_s = 0; pat->content.Set.ptr_s = 0; carry = TRUE; carry = TRUE; } } Loading Loading @@ -445,11 +461,13 @@ char *glob_next_url(URLGlob *glob) pat = &glob->pattern[j/2]; pat = &glob->pattern[j/2]; switch(pat->type) { switch(pat->type) { case UPTSet: case UPTSet: if(pat->content.Set.elements) { len = strlen(pat->content.Set.elements[pat->content.Set.ptr_s]); len = strlen(pat->content.Set.elements[pat->content.Set.ptr_s]); snprintf(buf, buflen, "%s", snprintf(buf, buflen, "%s", pat->content.Set.elements[pat->content.Set.ptr_s]); pat->content.Set.elements[pat->content.Set.ptr_s]); buf += len; buf += len; buflen -= len; buflen -= len; } break; break; case UPTCharRange: case UPTCharRange: *buf++ = pat->content.CharRange.ptr_c; *buf++ = pat->content.CharRange.ptr_c; Loading Loading @@ -501,8 +519,11 @@ char *glob_match_url(char *filename, URLGlob *glob) URLPattern pat = glob->pattern[i]; URLPattern pat = glob->pattern[i]; switch (pat.type) { switch (pat.type) { case UPTSet: case UPTSet: if(pat.content.Set.elements) { appendthis = pat.content.Set.elements[pat.content.Set.ptr_s]; appendthis = pat.content.Set.elements[pat.content.Set.ptr_s]; appendlen = strlen(pat.content.Set.elements[pat.content.Set.ptr_s]); appendlen = strlen(pat.content.Set.elements[pat.content.Set.ptr_s]); } break; break; case UPTCharRange: case UPTCharRange: numbuf[0]=pat.content.CharRange.ptr_c; numbuf[0]=pat.content.CharRange.ptr_c; Loading