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

Reply via email to