summaryrefslogtreecommitdiffstats
path: root/lib/MiddleWare
diff options
context:
space:
mode:
authorJiri Moskovcak <jmoskovc@redhat.com>2009-08-20 00:03:56 +0200
committerJiri Moskovcak <jmoskovc@redhat.com>2009-08-20 00:03:56 +0200
commit73964caa019cc58e166b491ddf4f489845d248c0 (patch)
treea394478636bcae5666a84ed21b46abbc1aaf791c /lib/MiddleWare
parentcba5b047558b7f0d9643a84a6257adf1a7f41086 (diff)
downloadabrt-73964caa019cc58e166b491ddf4f489845d248c0.tar.gz
abrt-73964caa019cc58e166b491ddf4f489845d248c0.tar.xz
abrt-73964caa019cc58e166b491ddf4f489845d248c0.zip
RPM: added GetComponent method which finds the bz component to given filename
Diffstat (limited to 'lib/MiddleWare')
-rw-r--r--lib/MiddleWare/RPM.cpp23
-rw-r--r--lib/MiddleWare/RPM.h8
2 files changed, 30 insertions, 1 deletions
diff --git a/lib/MiddleWare/RPM.cpp b/lib/MiddleWare/RPM.cpp
index ff41852a..7a773184 100644
--- a/lib/MiddleWare/RPM.cpp
+++ b/lib/MiddleWare/RPM.cpp
@@ -119,7 +119,29 @@ std::string CRPM::GetDescription(const std::string& pPackage)
rpmtsFree(ts);
return pDescription;
}
+std::string CRPM::GetComponent(const std::string& pFileName)
+{
+ std::string ret = "";
+ rpmts ts = rpmtsCreate();
+ rpmdbMatchIterator iter = rpmtsInitIterator(ts, RPMTAG_BASENAMES, pFileName.c_str(), 0);
+ Header header;
+ if ((header = rpmdbNextIterator(iter)) != NULL)
+ {
+ rpmtd td = rpmtdNew();
+ headerGet(header,RPMTAG_SOURCERPM, td, HEADERGET_DEFAULT);
+ const char * srpm = rpmtdGetString(td);
+ if (srpm != NULL)
+ {
+ std::string srcrpm(srpm);
+ ret = srcrpm.erase(srcrpm.rfind('-',srcrpm.rfind('-')-1));
+ }
+ rpmtdFree(td);
+ }
+ rpmdbFreeIterator(iter);
+ rpmtsFree(ts);
+ return ret;
+}
std::string CRPM::GetPackage(const std::string& pFileName)
{
std::string ret = "";
@@ -140,4 +162,3 @@ std::string CRPM::GetPackage(const std::string& pFileName)
rpmtsFree(ts);
return ret;
}
-
diff --git a/lib/MiddleWare/RPM.h b/lib/MiddleWare/RPM.h
index 4a0f0f46..4fe1eab4 100644
--- a/lib/MiddleWare/RPM.h
+++ b/lib/MiddleWare/RPM.h
@@ -87,6 +87,14 @@ class CRPM
* @return A package name.
*/
std::string GetPackage(const std::string& pFileName);
+ /**
+ * A method to find a main package for given file. This package contains particular
+ * file. If the file doesn't belong to any package, empty string is
+ * returned.
+ * @param pFileName A file name.
+ * @return A package name.
+ */
+ std::string GetComponent(const std::string& pFileName);
};
#endif /* RPMINFO_H_ */