refactor - reduce api.c move out common functions to get package info

This commit is contained in:
Priyesh Padmavilasom 2015-04-06 09:08:05 -04:00
parent 8cdaa8c602
commit 761c9d1bd8
4 changed files with 213 additions and 100 deletions

View File

@ -164,12 +164,34 @@ TDNFCheckUpdates(
uint32_t* pdwCount
)
{
return TDNFList(
uint32_t dwError = 0;
if(!pTdnf || !ppszPackageNameSpecs || !ppPkgInfo || !pdwCount)
{
dwError = ERROR_TDNF_INVALID_PARAMETER;
BAIL_ON_TDNF_ERROR(dwError);
}
dwError = TDNFList(
pTdnf,
SCOPE_UPGRADES,
ppszPackageNameSpecs,
ppPkgInfo,
pdwCount);
cleanup:
return dwError;
error:
if(ppPkgInfo)
{
*ppPkgInfo = NULL;
}
if(pdwCount)
{
*pdwCount = 0;
}
goto cleanup;
}
@ -278,17 +300,12 @@ TDNFInfo(
uint32_t* pdwCount
)
{
HyQuery hQuery = NULL;
HyPackageList hPkgList = NULL;
HyPackage hPkg = NULL;
uint32_t dwError = 0;
uint32_t dwCount = 0;
int nIndex = 0;
HyQuery hQuery = NULL;
HyPackageList hPkgList = NULL;
PTDNF_PKG_INFO pPkgInfo = NULL;
if(!pTdnf || !pdwCount || !ppPkgInfo)
{
dwError = ERROR_TDNF_INVALID_PARAMETER;
@ -315,58 +332,13 @@ TDNFInfo(
BAIL_ON_TDNF_HAWKEY_ERROR(dwError);
}
dwCount = hy_packagelist_count(hPkgList);
if(dwCount == 0)
{
dwError = ERROR_TDNF_NO_MATCH;
BAIL_ON_TDNF_ERROR(dwError);
}
dwError = TDNFAllocateMemory(
sizeof(TDNF_PKG_INFO) * dwCount,
(void**)&pPkgInfo);
dwError = TDNFPopulatePkgInfoArray(
hPkgList,
DETAIL_INFO,
&pPkgInfo,
&dwCount);
BAIL_ON_TDNF_ERROR(dwError);
for(nIndex = 0; (hPkg = hy_packagelist_get(hPkgList, nIndex)) != NULL; ++nIndex)
{
PTDNF_PKG_INFO pPkg = &pPkgInfo[nIndex];
pPkg->dwEpoch = hy_package_get_epoch(hPkg);
pPkg->dwInstallSizeBytes = hy_package_get_installsize(hPkg);
dwError = TDNFUtilsFormatSize(pPkg->dwInstallSizeBytes, &pPkg->pszFormattedSize);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(hy_package_get_name(hPkg), &pPkg->pszName);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(hy_package_get_arch(hPkg), &pPkg->pszArch);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(hy_package_get_version(hPkg), &pPkg->pszVersion);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(hy_package_get_release(hPkg), &pPkg->pszRelease);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(hy_package_get_reponame(hPkg), &pPkg->pszRepoName);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(hy_package_get_summary(hPkg), &pPkg->pszSummary);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(hy_package_get_url(hPkg), &pPkg->pszURL);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(hy_package_get_license(hPkg), &pPkg->pszLicense);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(hy_package_get_description(hPkg), &pPkg->pszDescription);
BAIL_ON_TDNF_ERROR(dwError);
//Should not free package as packagelist is freed below.
}
*ppPkgInfo = pPkgInfo;
*pdwCount = dwCount;
@ -389,8 +361,11 @@ error:
if(pdwCount)
{
*pdwCount = 0;
}
TDNFFreePackageInfoArray(pPkgInfo, dwCount);
}
if(pPkgInfo)
{
TDNFFreePackageInfoArray(pPkgInfo, dwCount);
}
goto cleanup;
}
@ -403,14 +378,10 @@ TDNFList(
uint32_t* pdwCount
)
{
HyQuery hQuery = NULL;
HyPackageList hPkgList = NULL;
HyPackage hPkg = NULL;
uint32_t dwError = 0;
uint32_t dwCount = 0;
int nIndex = 0;
HyQuery hQuery = NULL;
HyPackageList hPkgList = NULL;
PTDNF_PKG_INFO pPkgInfo = NULL;
if(!pTdnf || !ppszPackageNameSpecs || !ppPkgInfo || !pdwCount)
@ -435,42 +406,17 @@ TDNFList(
hPkgList = hy_query_run(hQuery);
if(!hPkgList)
{
dwError = HY_E_IO;
BAIL_ON_TDNF_HAWKEY_ERROR(dwError);
dwError = HY_E_IO;
BAIL_ON_TDNF_HAWKEY_ERROR(dwError);
}
dwCount = hy_packagelist_count(hPkgList);
if(dwCount == 0)
{
dwError = ERROR_TDNF_NO_MATCH;
BAIL_ON_TDNF_ERROR(dwError);
}
dwError = TDNFAllocateMemory(
sizeof(TDNF_PKG_INFO) * dwCount,
(void**)&pPkgInfo);
dwError = TDNFPopulatePkgInfoArray(
hPkgList,
DETAIL_LIST,
&pPkgInfo,
&dwCount);
BAIL_ON_TDNF_ERROR(dwError);
for(nIndex = 0; (hPkg = hy_packagelist_get(hPkgList, nIndex)) != NULL; ++nIndex)
{
PTDNF_PKG_INFO pPkg = &pPkgInfo[nIndex];
dwError = TDNFSafeAllocateString(hy_package_get_name(hPkg), &pPkg->pszName);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(hy_package_get_version(hPkg), &pPkg->pszVersion);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(hy_package_get_release(hPkg), &pPkg->pszRelease);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(hy_package_get_arch(hPkg), &pPkg->pszArch);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(hy_package_get_reponame(hPkg), &pPkg->pszRepoName);
BAIL_ON_TDNF_ERROR(dwError);
//Should not free package as packagelist is freed below.
}
*ppPkgInfo = pPkgInfo;
*pdwCount = dwCount;
@ -494,7 +440,10 @@ error:
{
*pdwCount = 0;
}
TDNFFreePackageInfoArray(pPkgInfo, dwCount);
if(pPkgInfo)
{
TDNFFreePackageInfoArray(pPkgInfo, dwCount);
}
goto cleanup;
}

View File

@ -21,6 +21,13 @@ uint32_t
HyQuery,
const char*);
typedef enum
{
DETAIL_LIST,
DETAIL_INFO
}TDNF_PKG_DETAIL;
#define IsNullOrEmptyString(str) (!(str) || !(*str))
#define BAIL_ON_TDNF_ERROR(dwError) \

View File

@ -381,3 +381,152 @@ error:
}
goto cleanup;
}
//
uint32_t
TDNFPopulatePkgInfoArray(
HyPackageList hPkgList,
TDNF_PKG_DETAIL nDetail,
PTDNF_PKG_INFO* ppPkgInfo,
uint32_t* pdwCount
)
{
uint32_t dwError = 0;
uint32_t dwCount = 0;
int nIndex = 0;
HyPackage hPkg = NULL;
PTDNF_PKG_INFO pPkgInfo = NULL;
if(!hPkgList || !ppPkgInfo || !pdwCount)
{
dwError = ERROR_TDNF_INVALID_PARAMETER;
BAIL_ON_TDNF_ERROR(dwError);
}
if(nDetail != DETAIL_INFO && nDetail != DETAIL_LIST)
{
dwError = ERROR_TDNF_INVALID_PARAMETER;
BAIL_ON_TDNF_ERROR(dwError);
}
dwCount = hy_packagelist_count(hPkgList);
if(dwCount == 0)
{
dwError = ERROR_TDNF_NO_MATCH;
BAIL_ON_TDNF_ERROR(dwError);
}
dwError = TDNFAllocateMemory(
sizeof(TDNF_PKG_INFO) * dwCount,
(void**)&pPkgInfo);
BAIL_ON_TDNF_ERROR(dwError);
for(nIndex = 0; (hPkg = hy_packagelist_get(hPkgList, nIndex)) != NULL; ++nIndex)
{
PTDNF_PKG_INFO pPkg = &pPkgInfo[nIndex];
if(nDetail == DETAIL_INFO)
{
pPkg->dwEpoch = hy_package_get_epoch(hPkg);
pPkg->dwInstallSizeBytes = hy_package_get_installsize(hPkg);
dwError = TDNFUtilsFormatSize(
pPkg->dwInstallSizeBytes,
&pPkg->pszFormattedSize);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(
hy_package_get_name(hPkg),
&pPkg->pszName);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(
hy_package_get_arch(hPkg),
&pPkg->pszArch);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(
hy_package_get_version(hPkg),
&pPkg->pszVersion);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(
hy_package_get_release(hPkg),
&pPkg->pszRelease);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(
hy_package_get_reponame(hPkg),
&pPkg->pszRepoName);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(
hy_package_get_summary(hPkg),
&pPkg->pszSummary);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(
hy_package_get_url(hPkg),
&pPkg->pszURL);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(
hy_package_get_license(hPkg),
&pPkg->pszLicense);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(
hy_package_get_description(hPkg),
&pPkg->pszDescription);
BAIL_ON_TDNF_ERROR(dwError);
}
else if(nDetail == DETAIL_LIST)
{
dwError = TDNFSafeAllocateString(
hy_package_get_name(hPkg),
&pPkg->pszName);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(
hy_package_get_arch(hPkg),
&pPkg->pszArch);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(
hy_package_get_version(hPkg),
&pPkg->pszVersion);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(
hy_package_get_release(hPkg),
&pPkg->pszRelease);
BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFSafeAllocateString(
hy_package_get_reponame(hPkg),
&pPkg->pszRepoName);
BAIL_ON_TDNF_ERROR(dwError);
}
//Should not free package as packagelist is freed below.
}
*pdwCount = dwCount;
*ppPkgInfo = pPkgInfo;
cleanup:
return dwError;
error:
if(ppPkgInfo)
{
*ppPkgInfo = NULL;
}
if(pdwCount)
{
*pdwCount = 0;
}
if(pPkgInfo)
{
TDNFFreePackageInfoArray(pPkgInfo, dwCount);
}
goto cleanup;
}

View File

@ -192,6 +192,14 @@ TDNFPopulatePkgInfos(
PTDNF_PKG_INFO* ppPkgInfos
);
uint32_t
TDNFPopulatePkgInfoArray(
HyPackageList hPkgList,
TDNF_PKG_DETAIL nDetail,
PTDNF_PKG_INFO* ppPkgInfo,
uint32_t* pdwCount
);
//goal.c
uint32_t
TDNFGoalGetResultsIgnoreNoData(