rpmds rpmdsFree(rpmds ds) { rpmTagVal tagEVR, tagF; if (ds == NULL) return NULL; if (ds->nrefs > 1) return rpmdsUnlink(ds); if (dsType(ds->tagN, NULL, &tagEVR, &tagF)) return NULL; if (ds->Count > 0) { ds->N = _free(ds->N); ds->EVR = _free(ds->EVR); ds->Flags = _free(ds->Flags); } ds->DNEVR = _free(ds->DNEVR); ds->Color = _free(ds->Color); (void) rpmdsUnlink(ds); memset(ds, 0, sizeof(*ds)); /* XXX trash and burn */ ds = _free(ds); return NULL; }
static rpmds singleDSPool(rpmstrPool pool, rpmTagVal tagN, rpmsid N, rpmsid EVR, rpmsenseFlags Flags, unsigned int instance, rpm_color_t Color, int triggerIndex) { rpmds ds = NULL; const char * Type; rpmTagVal tagTi; if (dsType(tagN, &Type, NULL, NULL, &tagTi)) goto exit; ds = rpmdsCreate(pool, tagN, Type, 1, instance); ds->N = xmalloc(1 * sizeof(*ds->N)); ds->N[0] = N; ds->EVR = xmalloc(1 * sizeof(*ds->EVR)); ds->EVR[0] = EVR; ds->Flags = xmalloc(sizeof(*ds->Flags)); ds->Flags[0] = Flags; if (tagTi != RPMTAG_NOT_FOUND) { ds->ti = xmalloc(sizeof(*ds->ti)); ds->ti[0] = triggerIndex; } ds->i = 0; if (Color) rpmdsSetColor(ds, Color); exit: return ds; }
static rpmds singleDS(rpmTagVal tagN, const char * N, const char * EVR, rpmsenseFlags Flags, unsigned int instance, rpm_color_t Color) { rpmds ds = NULL; const char * Type; if (dsType(tagN, &Type, NULL, NULL)) goto exit; ds = xcalloc(1, sizeof(*ds)); ds->Type = Type; ds->tagN = tagN; ds->Count = 1; ds->nopromote = _rpmds_nopromote; ds->instance = instance; ds->N = rpmdsDupArgv(&N, 1); ds->EVR = rpmdsDupArgv(&EVR, 1); ds->Flags = xmalloc(sizeof(*ds->Flags)); ds->Flags[0] = Flags; ds->i = 0; if (Color) rpmdsSetColor(ds, Color); exit: return rpmdsLink(ds); }
rpmTagVal rpmdsTagTi(const rpmds ds) { rpmTagVal tagTi = RPMTAG_NOT_FOUND; if (ds != NULL) dsType(ds->tagN, NULL, NULL, NULL, &tagTi); return tagTi; }
rpmTagVal rpmdsTagEVR(const rpmds ds) { rpmTagVal tagEVR = RPMTAG_NOT_FOUND; if (ds != NULL) dsType(ds->tagN, NULL, &tagEVR, NULL, NULL); return tagEVR; }
rpmds rpmdsNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, int flags) { rpmTagVal tagEVR, tagF, tagTi; rpmds ds = NULL; const char * Type; struct rpmtd_s names; if (dsType(tagN, &Type, &tagEVR, &tagF, &tagTi)) goto exit; if (headerGet(h, tagN, &names, HEADERGET_MINMEM)) { struct rpmtd_s evr, flags, tindices; ds = rpmdsCreate(pool, tagN, Type, rpmtdCount(&names), headerGetInstance(h)); ds->N = rpmtdToPool(&names, ds->pool); headerGet(h, tagEVR, &evr, HEADERGET_MINMEM); ds->EVR = rpmtdToPool(&evr, ds->pool); headerGet(h, tagF, &flags, HEADERGET_ALLOC); ds->Flags = flags.data; if (tagTi != RPMTAG_NOT_FOUND) { headerGet(h, tagTi, &tindices, HEADERGET_ALLOC); ds->ti = tindices.data; } /* ensure rpmlib() requires always have RPMSENSE_RPMLIB flag set */ if (tagN == RPMTAG_REQUIRENAME && ds->Flags) { for (int i = 0; i < ds->Count; i++) { if (!(rpmdsFlagsIndex(ds, i) & RPMSENSE_RPMLIB)) { const char *N = rpmdsNIndex(ds, i); if (rstreqn(N, "rpmlib(", sizeof("rpmlib(")-1)) ds->Flags[i] |= RPMSENSE_RPMLIB; } } } rpmtdFreeData(&names); rpmtdFreeData(&evr); /* freeze the pool to save memory, but only if private pool */ if (ds->pool != pool) rpmstrPoolFreeze(ds->pool, 0); } exit: return ds; }
rpmds rpmdsNew(Header h, rpmTagVal tagN, int flags) { rpmTagVal tagEVR, tagF; rpmds ds = NULL; const char * Type; struct rpmtd_s names; headerGetFlags hgflags = HEADERGET_ALLOC|HEADERGET_ARGV; if (dsType(tagN, &Type, &tagEVR, &tagF)) goto exit; if (headerGet(h, tagN, &names, hgflags) && rpmtdCount(&names) > 0) { struct rpmtd_s evr, flags; ds = xcalloc(1, sizeof(*ds)); ds->Type = Type; ds->i = -1; ds->DNEVR = NULL; ds->tagN = tagN; ds->N = names.data; ds->Count = rpmtdCount(&names); ds->nopromote = _rpmds_nopromote; ds->instance = headerGetInstance(h); headerGet(h, tagEVR, &evr, hgflags); ds->EVR = evr.data; headerGet(h, tagF, &flags, hgflags); ds->Flags = flags.data; /* ensure rpmlib() requires always have RPMSENSE_RPMLIB flag set */ if (tagN == RPMTAG_REQUIRENAME && ds->Flags) { for (int i = 0; i < ds->Count; i++) { if (!(ds->Flags[i] & RPMSENSE_RPMLIB) && rstreqn(ds->N[i], "rpmlib(", sizeof("rpmlib(")-1)) ds->Flags[i] |= RPMSENSE_RPMLIB; } } ds = rpmdsLink(ds); } exit: return ds; }
QString GraphDs::fileName() { QString ret = QString("/mnt/x5/snafu/munin/entityfx.com/%1-%2-%3-%4.rrd").arg(host().name()).arg(graphds()).arg(varname()).arg(dsType()); return ret; }