static void freeFiletriggers(/*@only@*/ miRE matches_any, int nft, /*@only@*/ struct filetrigger * list) /*@modifies matches_any, list @*/ { int i; matches_any = mireFree(matches_any); for (i = 0; i < nft; i++) { list[i].mire = mireFree(list[i].mire); list[i].name = _free(list[i].name); } list = _free(list); }
static rpmRC tagValidate(Spec spec, rpmTag tag, const char * value) /*@*/ { const char * tagN = tagName(tag); const char * pattern = rpmExpand("%{?pattern_", tagN, "}", NULL); rpmRC ec = RPMRC_OK; if (pattern && *pattern) { miRE mire; int xx; mire = mireNew(RPMMIRE_REGEX, tag); xx = mireSetCOptions(mire, RPMMIRE_REGEX, 0, 0, NULL); if (!xx) xx = mireRegcomp(mire, pattern); if (!xx) xx = mireRegexec(mire, value, strlen(value)); if (!xx) ec = RPMRC_OK; else { rpmlog(RPMLOG_ERR, _("line %d: invalid tag value(\"%s\") %s: %s\n"), spec->lineNum, pattern, tagN, spec->line); ec = RPMRC_FAIL; } mire = mireFree(mire); } pattern = _free(pattern); return ec; }
static void compileFiletriggersRegexp(/*@only@*/ char * raw, miRE mire) /*@modifies raw, mire @*/ { static int options = REG_NOSUB | REG_EXTENDED | REG_NEWLINE; int xx; xx = mireSetCOptions(mire, RPMMIRE_REGEX, 0, options, NULL); if (mireRegcomp(mire, raw) != 0) { rpmlog(RPMLOG_ERR, "failed to compile filetrigger filter: %s\n", raw); mire = mireFree(mire); } raw = _free(raw); }
poptContext rpmcliFini(poptContext optCon) /*@globals keyids @*/ /*@modifies keyids @*/ { /*@-nestedextern@*/ extern rpmioPool _rpmjsPool; extern rpmioPool _rpmrubyPool; extern rpmioPool _headerPool; extern rpmioPool _rpmmiPool; extern rpmioPool _dbiPool; extern rpmioPool _rpmdbPool; extern rpmioPool _rpmrepoPool; extern rpmioPool _rpmwfPool; extern const char * evr_tuple_order; extern const char * evr_tuple_match; extern miRE evr_tuple_mire; /*@=nestedextern@*/ /*@-mods@*/ evr_tuple_order = _free(evr_tuple_order); evr_tuple_match = _free(evr_tuple_match); evr_tuple_mire = mireFree(evr_tuple_mire); /*@-onlyunqglobaltrans@*/ /* Realease (and dereference) embedded interpreter global objects first. */ _rpmjsI = rpmjsFree(_rpmjsI); _rpmjsPool = rpmioFreePool(_rpmjsPool); _rpmrubyI = rpmrubyFree(_rpmrubyI); _rpmrubyPool = rpmioFreePool(_rpmrubyPool); _rpmgiPool = rpmioFreePool(_rpmgiPool); _rpmmiPool = rpmioFreePool(_rpmmiPool); _psmPool = rpmioFreePool(_psmPool); _rpmtsiPool = rpmioFreePool(_rpmtsiPool); _rpmtsPool = rpmioFreePool(_rpmtsPool); _rpmtePool = rpmioFreePool(_rpmtePool); _rpmpsPool = rpmioFreePool(_rpmpsPool); _rpmfcPool = rpmioFreePool(_rpmfcPool); rpmnsClean(); _rpmdsPool = rpmioFreePool(_rpmdsPool); _rpmfiPool = rpmioFreePool(_rpmfiPool); _rpmwfPool = rpmioFreePool(_rpmwfPool); _rpmdbPool = rpmioFreePool(_rpmdbPool); _rpmrepoPool = rpmioFreePool(_rpmrepoPool); _dbiPool = rpmioFreePool(_dbiPool); _headerPool = rpmioFreePool(_headerPool); /*@=onlyunqglobaltrans@*/ /*@=mods@*/ /* XXX this should be done in the rpmioClean() wrapper. */ /* keeps memory leak checkers quiet */ rpmFreeMacros(NULL); /*@i@*/ rpmFreeMacros(rpmCLIMacroContext); rpmFreeRpmrc(); /* XXX mireFreeAll(platpat) before rpmioFreePool. */ rpmFreeFilesystems(); /*@i@*/ rpmcliTargets = _free(rpmcliTargets); keyids = _free(keyids); tagClean(NULL); /* Free header tag indices. */ rpmioClean(); /* XXX rpmioFreePool()'s after everything else. */ optCon = poptFreeContext(optCon); #if defined(HAVE_MCHECK_H) && defined(HAVE_MTRACE) /*@-noeffect@*/ muntrace(); /* Trace malloc only if MALLOC_TRACE=mtrace-output-file. */ /*@=noeffect@*/ #endif /*@-globstate@*/ return NULL; /*@=globstate@*/ }