Sophie

Sophie

distrib > Mageia > 6 > armv7hl > by-pkgid > dc8dae32011891fc29c92809e6cef332 > files > 18

apt-0.5.15lorg3.94-26.mga6.src.rpm

--- apt-0.5.15lorg3.94pt/apt-pkg/rpm/rpmcfgbackup.cc	2012-01-29 19:50:39.627475571 +0100
+++ apt-rpm/apt-pkg/rpm/rpmcfgbackup.cc	2010-09-09 13:08:28.000000000 +0200
@@ -96,64 +96,77 @@
 
 bool pkgRPMCfgBackup::GetCfgFileList(const char *pkgName,vector<string> &FileList, string &pkgVersion, string &pkgRelease)
 {   
-   rpmdb DB;
-   int Rc = 0;
    
-   DB = NULL;
+  stringstream rpmDbDump;
+  rpmReadConfigFiles(NULL, NULL);
+  rpmts ts = rpmtsCreate();
+  Header hdr;
+  rpmfi fi = NULL;
+  int scareMem = 0;
+  int i;
    
-   rpmReadConfigFiles(NULL,NULL);
-   Rc = rpmdbOpen(NULL,&DB,O_RDONLY,0644);
+  rpmtsSetRootDir(ts, "/");
    
-   if(Rc)
-      return false;
+  if (rpmtsGetRdb(ts) == NULL) {
+    int rc = rpmtsOpenDB(ts, O_RDONLY);
+  }
 
-   if(DB == NULL)
-      return false;
+  // Sanitize package name - removing architecture ".x86-64 .."                       
+  char *tmpName=(char *)malloc(strlen(pkgName)+1);
+  char *ptrTmpName;
+  strncpy(tmpName, pkgName,strlen(pkgName));
    
-   Header h;
-   raptHeader header(h);
-   vector<string> FileNames;
-   vector<string> DirNames;
-   int CountF = 0;
-   int CountD = 0;
-   vector<raptInt> DirIndexes;
-   vector<raptInt> FileFlags; 
+  if ((ptrTmpName=strchr(tmpName,'.')) != NULL) {
+    *ptrTmpName=0;
+  }
 
-   string S;
-   rpmdbMatchIterator MI;
    
-   MI = rpmdbInitIterator(DB, RPMTAG_NAME, pkgName,0);
-   if(MI == NULL)
-      return false;
+  rpmdbMatchIterator Iter = rpmtsInitIterator(ts, RPMTAG_NAME, tmpName, 0);
 
-   h = rpmdbNextIterator(MI);
-   if( h == NULL)
-      return false;
+  while ((hdr = rpmdbNextIterator(Iter)) != NULL)
+    {
 
-   S = header.format("%{VERSION}");
-   pkgVersion = S.c_str();
-   S = header.format("%{RELEASE}");
-   pkgRelease = S.c_str();
 
+      rpmtd tagdata = rpmtdNew();
 
-   header.getTag(RPMTAG_BASENAMES,FileNames);
-   header.getTag(RPMTAG_DIRNAMES,DirNames);
-   header.getTag(RPMTAG_DIRINDEXES,DirIndexes);
-   header.getTag(RPMTAG_FILEFLAGS,FileFlags);
+      if (headerGet(hdr, RPMTAG_VERSION, tagdata, HEADERGET_RAW)) {
+  	pkgVersion = rpmtdGetString(tagdata);
+      }
+      if (headerGet(hdr, RPMTAG_RELEASE, tagdata, HEADERGET_RAW)) {
+  	pkgRelease = rpmtdGetString(tagdata);
+      }
    
-   for(int i = 0 ; i < DirIndexes.size(); i++)
-   {
-      if(FileFlags[i] & RPMFILE_CONFIG)
-      {
-	 string FilePath = string(DirNames[DirIndexes[i]]) + string(FileNames[i]);
-	 FileList.push_back(FilePath);
+      fi = rpmfiNew(ts, hdr, RPMTAG_BASENAMES, scareMem);
+      if (rpmfiFC(fi) <= 0) {
+  	rpmtdFreeData(tagdata);
+  	rpmtdFree(tagdata);
+
+  	break;
       }
+
+      fi = rpmfiInit(fi, 0);
+      while ((i = rpmfiNext(fi)) >= 0) {
+        const char *fn = rpmfiFN(fi);
+        rpmfileAttrs fflags = rpmfiFFlags(fi);
+  	if ((fflags & RPMFILE_CONFIG)) {
+  	  FileList.push_back(fn);
    }
 
-   rpmdbFreeIterator(MI);
-   rpmdbClose(DB);
+	
+      }
+      rpmtdFreeData(tagdata);
+      rpmtdFree(tagdata);
+
+    }
+
+  Iter = rpmdbFreeIterator(Iter);
+  fi = rpmfiFree(fi);  
+
+  int rc=rpmtsCloseDB(ts);
 
    return true;
+
+
 }
 
 /*
--- apt-0.5.15lorg3.94pt/tools/genpkglist.cc.cm-rpm4.9	2012-02-05 03:28:08.028709840 +0100
+++ apt-0.5.15lorg3.94pt/tools/genpkglist.cc	2012-02-05 03:31:08.980432278 +0100
@@ -254,11 +254,11 @@
       raptTagData dnameval, bnameval, dindexval;
       int res;
    
-      res = headerGetEntry(h, RPMTAG_DIRNAMES, &type1, 
+      res = headerGetEntry(h, RPMTAG_DIRNAMES, (rpm_tagtype_t*)&type1, 
 			   &dnameval, &count1);
-      res = headerGetEntry(h, RPMTAG_BASENAMES, &type2, 
+      res = headerGetEntry(h, RPMTAG_BASENAMES, (rpm_tagtype_t*)&type2, 
 			   &bnameval, &count2);
-      res = headerGetEntry(h, RPMTAG_DIRINDEXES, &type3, 
+      res = headerGetEntry(h, RPMTAG_DIRINDEXES, (rpm_tagtype_t*)&type3, 
 			   &dindexval, &count3);
 
       dnames = (char **)dnameval;
@@ -282,9 +282,9 @@
       char *srpm, *name;
       int res;
       
-      res = headerGetEntry(h, RPMTAG_NAME, &type, 
+      res = headerGetEntry(h, RPMTAG_NAME, (rpm_tagtype_t*)&type, 
 			   &nameval, &count);
-      res = headerGetEntry(h, RPMTAG_SOURCERPM, &type, 
+      res = headerGetEntry(h, RPMTAG_SOURCERPM, (rpm_tagtype_t*)&type, 
 			   &srpmval, &count);
       name = (char *)nameval;
       srpm = (char *)srpmval;