diff options
author | Jiri Moskovcak <jmoskovc@redhat.com> | 2009-08-20 00:03:56 +0200 |
---|---|---|
committer | Jiri Moskovcak <jmoskovc@redhat.com> | 2009-08-20 00:03:56 +0200 |
commit | 73964caa019cc58e166b491ddf4f489845d248c0 (patch) | |
tree | a394478636bcae5666a84ed21b46abbc1aaf791c /lib/MiddleWare | |
parent | cba5b047558b7f0d9643a84a6257adf1a7f41086 (diff) | |
download | abrt-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.cpp | 23 | ||||
-rw-r--r-- | lib/MiddleWare/RPM.h | 8 |
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_ */ |