int metadata_folder_to_season(const char *s, int *seasonp, rstr_t **titlep) { int i; for(i = 0; folder_to_season[i] != NULL; i++) { hts_regex_t re; if(!hts_regcomp(&re, folder_to_season[i])) { hts_regmatch_t matches[8]; if(!hts_regexec(&re, s, 8, matches, 0)) { hts_regfree(&re); if(seasonp != NULL) *seasonp = atoi(s + matches[2].rm_so); if(titlep != NULL) { int l = matches[1].rm_eo - matches[1].rm_so; if(l > 0) *titlep = rstr_allocl(s + matches[i].rm_so, l); else *titlep = NULL; } return 0; } hts_regfree(&re); } } return -1; }
static void es_route_destroy(es_resource_t *eres) { es_route_t *er = (es_route_t *)eres; es_root_unregister(eres->er_ctx->ec_duk, eres); hts_mutex_lock(&route_mutex); LIST_REMOVE(er, er_link); hts_mutex_unlock(&route_mutex); free(er->er_pattern); hts_regfree(&er->er_regex); es_resource_unlink(&er->super); }