本文整理汇总了C++中rpmtdFreeData函数的典型用法代码示例。如果您正苦于以下问题:C++ rpmtdFreeData函数的具体用法?C++ rpmtdFreeData怎么用?C++ rpmtdFreeData使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了rpmtdFreeData函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: rpmScriptFromTriggerTag
rpmScript rpmScriptFromTriggerTag(Header h, rpmTagVal triggerTag, uint32_t ix)
{
rpmScript script = NULL;
struct rpmtd_s tscripts, tprogs, tflags;
headerGetFlags hgflags = HEADERGET_MINMEM;
headerGet(h, RPMTAG_TRIGGERSCRIPTS, &tscripts, hgflags);
headerGet(h, RPMTAG_TRIGGERSCRIPTPROG, &tprogs, hgflags);
headerGet(h, RPMTAG_TRIGGERSCRIPTFLAGS, &tflags, hgflags);
if (rpmtdSetIndex(&tscripts, ix) >= 0 && rpmtdSetIndex(&tprogs, ix) >= 0) {
rpmscriptFlags sflags = 0;
const char *prog = rpmtdGetString(&tprogs);
if (rpmtdSetIndex(&tflags, ix) >= 0)
sflags = rpmtdGetNumber(&tflags);
script = rpmScriptNew(h, triggerTag, rpmtdGetString(&tscripts), sflags);
/* hack up a hge-style NULL-terminated array */
script->args = xmalloc(2 * sizeof(*script->args) + strlen(prog) + 1);
script->args[0] = (char *)(script->args + 2);
script->args[1] = NULL;
strcpy(script->args[0], prog);
}
rpmtdFreeData(&tscripts);
rpmtdFreeData(&tprogs);
rpmtdFreeData(&tflags);
return script;
}
开发者ID:pombredanne,项目名称:rpm-4,代码行数:32,代码来源:rpmscript.c
示例2: unloadImmutableRegion
static void unloadImmutableRegion(Header *hdrp, rpmTagVal tag)
{
struct rpmtd_s copytd, td;
rpmtd utd = &td;
Header nh;
Header oh;
HeaderIterator hi;
if (headerGet(*hdrp, tag, utd, HEADERGET_DEFAULT)) {
nh = headerNew();
oh = headerCopyLoad(utd->data);
hi = headerInitIterator(oh);
while (headerNext(hi, ©td)) {
if (copytd.data)
headerPut(nh, ©td, HEADERPUT_DEFAULT);
rpmtdFreeData(©td);
}
headerFreeIterator(hi);
headerFree(oh);
rpmtdFreeData(utd);
headerFree(*hdrp);
*hdrp = headerLink(nh);
headerFree(nh);
}
}
开发者ID:jwakely,项目名称:rpm,代码行数:27,代码来源:rpmgensig.c
示例3: headerFindSpec
int headerFindSpec(Header h)
{
struct rpmtd_s filenames;
int specix = -1;
if (headerGet(h, RPMTAG_BASENAMES, &filenames, HEADERGET_MINMEM)) {
struct rpmtd_s td;
const char *str;
/* Try to find spec by file flags */
if (headerGet(h, RPMTAG_FILEFLAGS, &td, HEADERGET_MINMEM)) {
rpmfileAttrs *flags;
while (specix < 0 && (flags = rpmtdNextUint32(&td))) {
if (*flags & RPMFILE_SPECFILE)
specix = rpmtdGetIndex(&td);
}
rpmtdFreeData(&td);
}
/* Still no spec? Look by filename. */
while (specix < 0 && (str = rpmtdNextString(&filenames))) {
if (rpmFileHasSuffix(str, ".spec"))
specix = rpmtdGetIndex(&filenames);
}
rpmtdFreeData(&filenames);
}
return specix;
}
开发者ID:Distrotech,项目名称:rpm,代码行数:27,代码来源:relocation.c
示例4: rpmMergeHeaders
/**
* This assumes the order of list matches the order of the new headers, and
* throws an exception if that isn't true.
*/
static int rpmMergeHeaders(PyObject * list, FD_t fd, int matchTag)
{
Header h;
HeaderIterator hi;
rpmTagVal newMatch, oldMatch;
hdrObject * hdr;
rpm_count_t count = 0;
int rc = 1; /* assume failure */
rpmtd td = rpmtdNew();
Py_BEGIN_ALLOW_THREADS
h = headerRead(fd, HEADER_MAGIC_YES);
Py_END_ALLOW_THREADS
while (h) {
if (!headerGet(h, matchTag, td, HEADERGET_MINMEM)) {
PyErr_SetString(pyrpmError, "match tag missing in new header");
goto exit;
}
newMatch = rpmtdTag(td);
rpmtdFreeData(td);
hdr = (hdrObject *) PyList_GetItem(list, count++);
if (!hdr) goto exit;
if (!headerGet(hdr->h, matchTag, td, HEADERGET_MINMEM)) {
PyErr_SetString(pyrpmError, "match tag missing in new header");
goto exit;
}
oldMatch = rpmtdTag(td);
rpmtdFreeData(td);
if (newMatch != oldMatch) {
PyErr_SetString(pyrpmError, "match tag mismatch");
goto exit;
}
for (hi = headerInitIterator(h); headerNext(hi, td); rpmtdFreeData(td))
{
/* could be dupes */
headerDel(hdr->h, rpmtdTag(td));
headerPut(hdr->h, td, HEADERPUT_DEFAULT);
}
headerFreeIterator(hi);
h = headerFree(h);
Py_BEGIN_ALLOW_THREADS
h = headerRead(fd, HEADER_MAGIC_YES);
Py_END_ALLOW_THREADS
}
rc = 0;
exit:
rpmtdFree(td);
return rc;
}
开发者ID:kaltsi,项目名称:rpm,代码行数:61,代码来源:header-py.c
示例5: addPrefixes
static int addPrefixes(Header h, rpmRelocation *relocations, int numRelocations)
{
struct rpmtd_s validRelocs;
const char *validprefix;
const char ** actualRelocations;
int numActual = 0;
headerGet(h, RPMTAG_PREFIXES, &validRelocs, HEADERGET_MINMEM);
/*
* If no relocations are specified (usually the case), then return the
* original header. If there are prefixes, however, then INSTPREFIXES
* should be added for RPM_INSTALL_PREFIX environ variables in scriptlets,
* but, since relocateFileList() can be called more than once for
* the same header, don't bother if already present.
*/
if (relocations == NULL || numRelocations == 0) {
if (rpmtdCount(&validRelocs) > 0) {
if (!headerIsEntry(h, RPMTAG_INSTPREFIXES)) {
rpmtdSetTag(&validRelocs, RPMTAG_INSTPREFIXES);
headerPut(h, &validRelocs, HEADERPUT_DEFAULT);
}
rpmtdFreeData(&validRelocs);
}
return 0;
}
actualRelocations = xmalloc(rpmtdCount(&validRelocs) * sizeof(*actualRelocations));
rpmtdInit(&validRelocs);
while ((validprefix = rpmtdNextString(&validRelocs))) {
int j;
for (j = 0; j < numRelocations; j++) {
if (relocations[j].oldPath == NULL || /* XXX can't happen */
!rstreq(validprefix, relocations[j].oldPath))
continue;
/* On install, a relocate to NULL means skip the path. */
if (relocations[j].newPath) {
actualRelocations[numActual] = relocations[j].newPath;
numActual++;
}
break;
}
if (j == numRelocations) {
actualRelocations[numActual] = validprefix;
numActual++;
}
}
rpmtdFreeData(&validRelocs);
if (numActual) {
headerPutStringArray(h, RPMTAG_INSTPREFIXES, actualRelocations, numActual);
}
free(actualRelocations);
/* When any relocations are present there'll be more work to do */
return 1;
}
开发者ID:Distrotech,项目名称:rpm,代码行数:55,代码来源:relocation.c
示例6: rpmfiNewPool
rpmfi rpmfiNewPool(rpmstrPool pool, Header h, rpmTagVal tagN, rpmfiFlags flags)
{
rpmfi fi = xcalloc(1, sizeof(*fi));
struct rpmtd_s bn, dn, dx;
fi->magic = RPMFIMAGIC;
fi->i = -1;
fi->fiflags = flags;
/*
* Grab and validate file triplet data. Headers with no files simply
* fall through here and an empty file set is returned.
*/
if (headerGet(h, RPMTAG_BASENAMES, &bn, HEADERGET_MINMEM)) {
headerGet(h, RPMTAG_DIRNAMES, &dn, HEADERGET_MINMEM);
headerGet(h, RPMTAG_DIRINDEXES, &dx, HEADERGET_ALLOC);
if (indexSane(&bn, &dn, &dx)) {
/* private or shared pool? */
fi->pool = (pool != NULL) ? rpmstrPoolLink(pool) :
rpmstrPoolCreate();
/* init the file triplet data */
fi->fc = rpmtdCount(&bn);
fi->dc = rpmtdCount(&dn);
fi->bnid = rpmtdToPool(&bn, fi->pool);
fi->dnid = rpmtdToPool(&dn, fi->pool);
/* steal index data from the td (pooh...) */
fi->dil = dx.data;
dx.data = NULL;
/* populate the rest of the stuff */
rpmfiPopulate(fi, h, flags);
/* freeze the pool to save memory, but only if private pool */
if (fi->pool != pool)
rpmstrPoolFreeze(fi->pool, 0);
fi->h = (fi->fiflags & RPMFI_KEEPHEADER) ? headerLink(h) : NULL;
} else {
/* broken data, free and return NULL */
fi = _free(fi);
}
rpmtdFreeData(&bn);
rpmtdFreeData(&dn);
rpmtdFreeData(&dx);
}
return rpmfiLink(fi);
}
开发者ID:devzero2000,项目名称:RPM,代码行数:50,代码来源:rpmfi.c
示例7: printSize
/**
* Print package size (debug purposes only)
* @param fd package file handle
* @param sigh signature header
*/
static void printSize(FD_t fd, Header sigh)
{
struct stat st;
int fdno = Fileno(fd);
size_t siglen = headerSizeof(sigh, HEADER_MAGIC_YES);
size_t pad = (8 - (siglen % 8)) % 8; /* 8-byte pad */
struct rpmtd_s sizetag;
rpm_loff_t datalen = 0;
/* Print package component sizes. */
if (headerGet(sigh, RPMSIGTAG_LONGSIZE, &sizetag, HEADERGET_DEFAULT)) {
rpm_loff_t *tsize = rpmtdGetUint64(&sizetag);
datalen = (tsize) ? *tsize : 0;
} else if (headerGet(sigh, RPMSIGTAG_SIZE, &sizetag, HEADERGET_DEFAULT)) {
rpm_off_t *tsize = rpmtdGetUint32(&sizetag);
datalen = (tsize) ? *tsize : 0;
}
rpmtdFreeData(&sizetag);
rpmlog(RPMLOG_DEBUG,
"Expected size: %12" PRIu64 \
" = lead(%d)+sigs(%zd)+pad(%zd)+data(%" PRIu64 ")\n",
RPMLEAD_SIZE+siglen+pad+datalen,
RPMLEAD_SIZE, siglen, pad, datalen);
if (fstat(fdno, &st) == 0) {
rpmlog(RPMLOG_DEBUG,
" Actual size: %12" PRIu64 "\n", (rpm_loff_t) st.st_size);
}
}
开发者ID:ignatenkobrain,项目名称:rpm,代码行数:35,代码来源:signature.c
示例8: isNewDep
static int isNewDep(rpmds *dsp, rpmds bds,
Header h, rpmTagVal indextag, uint32_t index)
{
int isnew = 1;
if (!indextag) {
/* With normal deps, we can just merge and see if anything got added */
isnew = (rpmdsMerge(dsp, bds) > 0);
} else {
struct rpmtd_s idx;
rpmds ads = *dsp;
headerGet(h, indextag, &idx, HEADERGET_MINMEM);
/* rpmdsFind/Merge() probably isn't realiable with triggers... */
rpmdsInit(ads);
while (isnew && rpmdsNext(ads) >= 0) {
if (!rstreq(rpmdsN(ads), rpmdsN(bds))) continue;
if (!rstreq(rpmdsEVR(ads), rpmdsEVR(bds))) continue;
if (rpmdsFlags(ads) != rpmdsFlags(bds)) continue;
if (indextag && rpmtdSetIndex(&idx, rpmdsIx(ads)) >= 0 &&
rpmtdGetNumber(&idx) != index) continue;
isnew = 0;
}
rpmtdFreeData(&idx);
rpmdsMerge(dsp, bds);
}
return isnew;
}
开发者ID:boklm,项目名称:rpm,代码行数:29,代码来源:reqprov.c
示例9: get64
/*
* Helper to convert 32bit tag to 64bit version.
* If header has new 64bit tag then just return the data,
* otherwise convert 32bit old tag data to 64bit values.
* For consistency, always return malloced data.
*/
static int get64(Header h, rpmtd td, rpmTag newtag, rpmTag oldtag)
{
int rc;
if (headerIsEntry(h, newtag)) {
rc = headerGet(h, newtag, td, HEADERGET_ALLOC);
} else {
struct rpmtd_s olddata;
uint32_t *d32 = NULL;
uint64_t *d64 = NULL;
headerGet(h, oldtag, &olddata, HEADERGET_MINMEM);
if (rpmtdType(&olddata) == RPM_INT32_TYPE) {
td->type = RPM_INT64_TYPE;
td->count = olddata.count;
td->flags = RPMTD_ALLOCED;
td->data = xmalloc(sizeof(*d64) * td->count);
d64 = td->data;
while ((d32 = rpmtdNextUint32(&olddata))) {
*d64++ = *d32;
}
}
rpmtdFreeData(&olddata);
rc = d64 ? 1 : 0;
}
return rc;
}
开发者ID:Distrotech,项目名称:rpm,代码行数:34,代码来源:tagexts.c
示例10: rpmInstallLoadMacros
/**
* Define or undefine per-header macros.
* @param h header
* @param define define/undefine?
* @return 0 always
*/
static void rpmInstallLoadMacros(Header h, int define)
{
const struct tagMacro * tagm;
for (tagm = tagMacros; tagm->macroname != NULL; tagm++) {
struct rpmtd_s td;
char *body;
if (!headerGet(h, tagm->tag, &td, HEADERGET_DEFAULT))
continue;
/*
* Undefine doesn't need the actual data for anything, but
* this way ensures we only undefine what was defined earlier.
*/
switch (rpmtdType(&td)) {
default:
if (define) {
body = rpmtdFormat(&td, RPMTD_FORMAT_STRING, NULL);
addMacro(NULL, tagm->macroname, NULL, body, -1);
free(body);
} else {
delMacro(NULL, tagm->macroname);
}
break;
case RPM_NULL_TYPE:
break;
}
rpmtdFreeData(&td);
}
}
开发者ID:Distrotech,项目名称:rpm,代码行数:36,代码来源:relocation.c
示例11: rpmRelocateSrpmFileList
/*
* Source rpms only contain basenames, on install the full paths are
* constructed with %{_specdir} and %{_sourcedir} macros. Because
* of that regular relocation wont work, we need to do it the hard
* way. Return spec file index on success, -1 on errors.
*/
int rpmRelocateSrpmFileList(Header h, const char *rootDir)
{
int specix = headerFindSpec(h);
if (specix >= 0) {
const char *bn;
struct rpmtd_s filenames;
/* save original file names */
saveOrig(h);
headerDel(h, RPMTAG_BASENAMES);
headerDel(h, RPMTAG_DIRNAMES);
headerDel(h, RPMTAG_DIRINDEXES);
/* Macros need to be added before trying to create directories */
rpmInstallLoadMacros(h, 1);
/* ALLOC is needed as we modify the header */
headerGet(h, RPMTAG_ORIGBASENAMES, &filenames, HEADERGET_ALLOC);
for (int i = 0; (bn = rpmtdNextString(&filenames)); i++) {
int spec = (i == specix);
char *fn = rpmGenPath(rootDir,
spec ? "%{_specdir}" : "%{_sourcedir}", bn);
headerPutString(h, RPMTAG_OLDFILENAMES, fn);
free(fn);
}
rpmtdFreeData(&filenames);
headerConvert(h, HEADERCONV_COMPRESSFILELIST);
rpmInstallLoadMacros(h, 0);
}
return specix;
}
开发者ID:Distrotech,项目名称:rpm,代码行数:39,代码来源:relocation.c
示例12: triggertypeTag
/**
* Retrieve trigger type info.
* @param h header
* @retval td tag data container
* @return 1 on success
*/
static int triggertypeTag(Header h, rpmtd td, headerGetFlags hgflags)
{
int i;
char ** conds;
struct rpmtd_s indices, flags, scripts;
if (!headerGet(h, RPMTAG_TRIGGERINDEX, &indices, HEADERGET_MINMEM)) {
return 0;
}
headerGet(h, RPMTAG_TRIGGERFLAGS, &flags, HEADERGET_MINMEM);
headerGet(h, RPMTAG_TRIGGERSCRIPTS, &scripts, HEADERGET_MINMEM);
td->flags = RPMTD_ALLOCED | RPMTD_PTR_ALLOCED;
td->count = rpmtdCount(&scripts);
td->data = conds = xmalloc(sizeof(*conds) * td->count);
td->type = RPM_STRING_ARRAY_TYPE;
while ((i = rpmtdNext(&scripts)) >= 0) {
rpm_flag_t *flag;
rpmtdInit(&indices); rpmtdInit(&flags);
while (rpmtdNext(&indices) >= 0 && rpmtdNext(&flags) >= 0) {
if (*rpmtdGetUint32(&indices) != i)
continue;
flag = rpmtdGetUint32(&flags);
if (*flag & RPMSENSE_TRIGGERPREIN)
conds[i] = xstrdup("prein");
else if (*flag & RPMSENSE_TRIGGERIN)
conds[i] = xstrdup("in");
else if (*flag & RPMSENSE_TRIGGERUN)
conds[i] = xstrdup("un");
else if (*flag & RPMSENSE_TRIGGERPOSTUN)
conds[i] = xstrdup("postun");
else
conds[i] = xstrdup("");
break;
}
}
rpmtdFreeData(&indices);
rpmtdFreeData(&flags);
rpmtdFreeData(&scripts);
return 1;
}
开发者ID:OlegGirko,项目名称:rpm,代码行数:52,代码来源:tagexts.c
示例13: rpmtd_dealloc
/** \ingroup py_c
*/
static void rpmtd_dealloc(rpmtdObject * s)
{
if (s) {
rpmtdFreeData(s->td);
rpmtdFree(s->td);
PyObject_Del(s);
}
}
开发者ID:avokhmin,项目名称:RPM5,代码行数:10,代码来源:rpmtd-py.c
示例14: rpmdsNewPool
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;
}
开发者ID:PerilousApricot,项目名称:rpm,代码行数:45,代码来源:rpmds.c
示例15: runImmedTriggers
/**
* Run triggers from this header that are fired by headers in the database.
* @param psm package state machine data
* @param sense trigger type
* @return 0 on success
*/
static rpmRC runImmedTriggers(rpmpsm psm, rpmsenseFlags sense)
{
const rpmts ts = psm->ts;
unsigned char * triggersRun;
struct rpmtd_s tnames, tindexes;
Header h = rpmteHeader(psm->te);
int nerrors = 0;
if (!(headerGet(h, RPMTAG_TRIGGERNAME, &tnames, HEADERGET_MINMEM) &&
headerGet(h, RPMTAG_TRIGGERINDEX, &tindexes, HEADERGET_MINMEM))) {
goto exit;
}
triggersRun = xcalloc(rpmtdCount(&tindexes), sizeof(*triggersRun));
{ Header sourceH = NULL;
const char *trigName;
rpm_count_t *triggerIndices = tindexes.data;
while ((trigName = rpmtdNextString(&tnames))) {
rpmdbMatchIterator mi;
int i = rpmtdGetIndex(&tnames);
if (triggersRun[triggerIndices[i]] != 0) continue;
mi = rpmtsInitIterator(ts, RPMDBI_NAME, trigName, 0);
while((sourceH = rpmdbNextIterator(mi)) != NULL) {
nerrors += handleOneTrigger(psm->ts, psm->te,
sense, sourceH, h,
psm->countCorrection,
rpmdbGetIteratorCount(mi),
triggersRun);
}
rpmdbFreeIterator(mi);
}
}
rpmtdFreeData(&tnames);
rpmtdFreeData(&tindexes);
free(triggersRun);
exit:
headerFree(h);
return (nerrors == 0) ? RPMRC_OK : RPMRC_FAIL;
}
开发者ID:fingunter,项目名称:rpm,代码行数:51,代码来源:psm.c
示例16: saveOrig
static void saveOrig(Header h)
{
struct rpmtd_s td;
headerGet(h, RPMTAG_BASENAMES, &td, HEADERGET_MINMEM);
rpmtdSetTag(&td, RPMTAG_ORIGBASENAMES);
headerPut(h, &td, HEADERPUT_DEFAULT);
rpmtdFreeData(&td);
headerGet(h, RPMTAG_DIRNAMES, &td, HEADERGET_MINMEM);
rpmtdSetTag(&td, RPMTAG_ORIGDIRNAMES);
headerPut(h, &td, HEADERPUT_DEFAULT);
rpmtdFreeData(&td);
headerGet(h, RPMTAG_DIRINDEXES, &td, HEADERGET_MINMEM);
rpmtdSetTag(&td, RPMTAG_ORIGDIRINDEXES);
headerPut(h, &td, HEADERPUT_DEFAULT);
rpmtdFreeData(&td);
}
开发者ID:Distrotech,项目名称:rpm,代码行数:18,代码来源:relocation.c
示例17: tag2pool
static rpmsid * tag2pool(rpmstrPool pool, Header h, rpmTag tag)
{
rpmsid *sids = NULL;
struct rpmtd_s td;
if (headerGet(h, tag, &td, HEADERGET_MINMEM)) {
sids = rpmtdToPool(&td, pool);
rpmtdFreeData(&td);
}
return sids;
}
开发者ID:devzero2000,项目名称:RPM,代码行数:10,代码来源:rpmfi.c
示例18: makeHDRDigest
static int makeHDRDigest(Header sigh, const char * file, rpmTagVal sigTag)
{
Header h = NULL;
FD_t fd = NULL;
char * SHA1 = NULL;
int ret = -1; /* assume failure. */
switch (sigTag) {
case RPMSIGTAG_SHA1:
fd = Fopen(file, "r.fdio");
if (fd == NULL || Ferror(fd))
goto exit;
h = headerRead(fd, HEADER_MAGIC_YES);
if (h == NULL)
goto exit;
if (headerIsEntry(h, RPMTAG_HEADERIMMUTABLE)) {
DIGEST_CTX ctx;
struct rpmtd_s utd;
if (!headerGet(h, RPMTAG_HEADERIMMUTABLE, &utd, HEADERGET_DEFAULT)
|| utd.data == NULL)
{
rpmlog(RPMLOG_ERR,
_("Immutable header region could not be read. "
"Corrupted package?\n"));
goto exit;
}
ctx = rpmDigestInit(PGPHASHALGO_SHA1, RPMDIGEST_NONE);
(void) rpmDigestUpdate(ctx, rpm_header_magic, sizeof(rpm_header_magic));
(void) rpmDigestUpdate(ctx, utd.data, utd.count);
(void) rpmDigestFinal(ctx, (void **)&SHA1, NULL, 1);
rpmtdFreeData(&utd);
} else {
rpmlog(RPMLOG_ERR, _("Cannot sign RPM v3 packages\n"));
goto exit;
}
if (SHA1 == NULL)
goto exit;
if (!sighdrPut(sigh, RPMSIGTAG_SHA1, RPM_STRING_TYPE, SHA1, 1))
goto exit;
ret = 0;
break;
default:
break;
}
exit:
free(SHA1);
headerFree(h);
if (fd != NULL) (void) Fclose(fd);
return ret;
}
开发者ID:ereshetova,项目名称:rpm,代码行数:54,代码来源:signature.c
示例19: getSig
/**
* Retrieve signature from header tag
* @param sigh signature header
* @param sigtag signature tag
* @return parsed pgp dig or NULL
*/
static pgpDigParams getSig(Header sigh, rpmTagVal sigtag)
{
struct rpmtd_s pkt;
pgpDigParams sig = NULL;
if (headerGet(sigh, sigtag, &pkt, HEADERGET_DEFAULT) && pkt.data != NULL) {
pgpPrtParams(pkt.data, pkt.count, PGPTAG_SIGNATURE, &sig);
rpmtdFreeData(&pkt);
}
return sig;
}
开发者ID:jwakely,项目名称:rpm,代码行数:17,代码来源:rpmgensig.c
示例20: hdrGetTag
static PyObject * hdrGetTag(Header h, rpmTagVal tag)
{
PyObject *res = NULL;
struct rpmtd_s td;
/* rpmtd_AsPyObj() knows how to handle empty containers and all */
(void) headerGet(h, tag, &td, HEADERGET_EXT);
res = rpmtd_AsPyobj(&td);
rpmtdFreeData(&td);
return res;
}
开发者ID:kaltsi,项目名称:rpm,代码行数:11,代码来源:header-py.c
注:本文中的rpmtdFreeData函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论