Thanks Dindinx, Pixel, Geoffrey :-) Yupe, it's gonna work with RPM 4
now. But I haven't uploaded the code yet.. I'm still fixing the bug in
rpm transaction and proxy/firewall support, and will probably finish it
by this Friday :-)
in the "engine.h":
#ifdef RPMDBI_PACKAGES
#define RPM_VERSION_4
#else
#define RPM_VERSION_3
#endif
in the "engine.cpp":
bool drakupdate::is_rpm_package_installed (string *rpm_package, string
*version,
string *release, string
*architecture)
// Is the package with this name already installed?
// Returns version & release by pointer
{
bool return_value = false;
#ifdef RPM_VERSION_3
dbiIndexSet matches;
#else
rpmdbMatchIterator iterator;
#endif
Header rpm_header;
struct headerTagTableEntry tags;
char *pkg_name, *pkg_version, *pkg_release, *pkg_architecture;
string *rpm_package_name = new string(*rpm_package);
get_rpm_package_name_only (rpm_package_name);
// Process it here
#ifdef RPM_VERSION_3
if (rpmdbFindPackage(*rpmdatabase,rpm_package_name->c_str(),
&matches) == 0)
{
if (matches.count > 0)
{
rpm_header = rpmdbGetRecord(*rpmdatabase,
matches.recs[0].recOffset);
#else
iterator = rpmdbInitIterator(*rpmdatabase, RPMTAG_NAME,
rpm_package_name->c_str(), 0);
if (iterator)
{
if (iterator)
{
rpm_header = rpmdbNextIterator(iterator)
#endif
if (rpm_header)
{
headerGetEntry(rpm_header, RPMTAG_NAME, NULL, (void **)
&pkg_name, NULL);
headerGetEntry(rpm_header, RPMTAG_VERSION, NULL, (void **)
&pkg_version, NULL);
headerGetEntry(rpm_header, RPMTAG_RELEASE, NULL, (void **)
&pkg_release, NULL);
headerGetEntry(rpm_header, RPMTAG_ARCH, NULL, (void **)
&pkg_architecture, NULL);
*version = pkg_version;
*release = pkg_release;
*architecture = pkg_architecture;
return_value = true;
headerFree(rpm_header);
} // end (if rpm_header)
#ifdef RPM_VERSION_3
dbiFreeIndexRecord(matches);
#else
rpmdbFreeIterator(iterator);
#endif
} // end if (matches.count > 0)
} // end if (rpmdbFindPackage == 0) -- RPM4: end if iterator
// End RPM
#ifdef HARD_DEBUG
logfile << "is_rpm_package_installed (" << *rpm_package << ")";
if (return_value)
logfile << "=true" << endl;
else
logfile << "=false" << endl;
#endif
delete rpm_package_name;
return return_value;
}
Thanks,
Prana
--
Prana <[EMAIL PROTECTED]>
http://www.cyest.org
My GnuPG Key ID: 0x33343FD3 (2000-07-21)
Key fingerprint = F1FB 1F76 8866 0F40 A801 D9DA 6BED 6641 3334 3FD3
http://blackhole.pca.dfn.de:11371/pks/lookup?op=get&search=0x33343FD3