[Rpm-maint] how to free memory after querying installed pkgs....
Pazzo Da Legare
pazzodalegare at gmail.com
Wed Dec 19 11:58:10 UTC 2007
Dear all,
I want to make simple query on pkgs in rpmdb. I wrote this simple
function...but I don't understand how to free resources. I tried this
function on every package querying for pkg description and pkg
summary...but I have a memory leakage. Could you help me? If I use the
headerFree() function after rpmdbFreeIterator() I got a segmentation
fault...
Tnx,
pazzodalegare
char *queryPackage(char *pkgName, const char *query, char **perrMsg){
Header h;
rpmts ts;
int rc;
char *sResult=NULL, *errMsg=NULL;
//necessario per impostare il dbpath
rpmReadConfigFiles( NULL, NULL );
ts = rpmtsCreate();
rc = rpmtsOpenDB(ts, O_RDONLY);
if( rc != 0 ) {
fprintf( stderr, "cannot open RPM database.\n" );
*perrMsg = (char *)rpmErrorString();
return ( NULL );
}
rpmdbMatchIterator mi = rpmtsInitIterator(ts, RPMTAG_NAME, pkgName, 0);
while( (h=rpmdbNextIterator(mi) )!=NULL ) {
sResult = headerSprintf(h, query, rpmTagTable, rpmHeaderFormats,
(errmsg_t *)&errMsg);
if(!errMsg){
if(sResult)
break; //only one pkg with pkgName
}
rpmdbFreeIterator(mi);
//headerFree(h) //<- this give me a segmentation fault
rpmtsCloseDB(ts);
ts = rpmtsFree(ts);
*perrMsg = errMsg;
return sResult;
}
More information about the Rpm-maint
mailing list