mirror of https://github.com/vmware/tdnf.git
refactor - reduce api.c move out common functions to get package info
This commit is contained in:
parent
8cdaa8c602
commit
761c9d1bd8
149
client/api.c
149
client/api.c
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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) \
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Reference in New Issue