mirror of https://github.com/vmware/tdnf.git
support for setopt key value gathering
This commit is contained in:
parent
849222fa5a
commit
075d3c1dbb
17
client/api.c
17
client/api.c
|
@ -1014,6 +1014,7 @@ TDNFFreeCmdArgs(
|
|||
}
|
||||
TDNF_SAFE_FREE_MEMORY(pCmdArgs->pszInstallRoot);
|
||||
|
||||
TDNF_SAFE_FREE_MEMORY(pCmdArgs->pSetOpt);
|
||||
TDNF_SAFE_FREE_MEMORY(pCmdArgs);
|
||||
}
|
||||
|
||||
|
@ -1023,3 +1024,19 @@ TDNFGetVersion(
|
|||
{
|
||||
return PACKAGE_VERSION;
|
||||
}
|
||||
|
||||
void
|
||||
TDNFFreeCmdOpt(
|
||||
PTDNF_CMD_OPT pCmdOpt
|
||||
)
|
||||
{
|
||||
PTDNF_CMD_OPT pCmdOptTemp = NULL;
|
||||
while(pCmdOpt)
|
||||
{
|
||||
TDNF_SAFE_FREE_MEMORY(pCmdOpt->pszOptName);
|
||||
TDNF_SAFE_FREE_MEMORY(pCmdOpt->pszOptValue);
|
||||
pCmdOptTemp = pCmdOpt->pNext;
|
||||
TDNF_SAFE_FREE_MEMORY(pCmdOpt);
|
||||
pCmdOpt = pCmdOptTemp;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -622,6 +622,11 @@ TDNFFreeMemory(
|
|||
void* pMemory
|
||||
);
|
||||
|
||||
void
|
||||
TDNFFreeCmdOpt(
|
||||
PTDNF_CMD_OPT pCmdOpt
|
||||
);
|
||||
|
||||
//search.c
|
||||
uint32_t
|
||||
TDNFQueryTermsHelper(
|
||||
|
|
|
@ -255,6 +255,11 @@ TDNFFreeUpdateInfoSummary(
|
|||
PTDNF_UPDATEINFO_SUMMARY pSummary
|
||||
);
|
||||
|
||||
void
|
||||
TDNFFreeCmdOpt(
|
||||
PTDNF_CMD_OPT pCmdOpt
|
||||
);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -170,6 +170,13 @@ typedef struct _TDNF_SOLVED_PKG_INFO
|
|||
char** ppszPkgsNotResolved;
|
||||
}TDNF_SOLVED_PKG_INFO, *PTDNF_SOLVED_PKG_INFO;
|
||||
|
||||
typedef struct _TDNF_CMD_OPT
|
||||
{
|
||||
char* pszOptName;
|
||||
char* pszOptValue;
|
||||
struct _TDNF_CMD_OPT* pNext;
|
||||
}TDNF_CMD_OPT, *PTDNF_CMD_OPT;
|
||||
|
||||
typedef struct _TDNF_CMD_ARGS
|
||||
{
|
||||
//Represent options in the dnf cmd line.
|
||||
|
@ -199,6 +206,7 @@ typedef struct _TDNF_CMD_ARGS
|
|||
char** ppszEnabledRepos;
|
||||
//Disabled repositories
|
||||
char** ppszDisabledRepos;
|
||||
PTDNF_CMD_OPT pSetOpt;
|
||||
}TDNF_CMD_ARGS, *PTDNF_CMD_ARGS;
|
||||
|
||||
typedef struct _TDNF_CONF
|
||||
|
|
|
@ -12,6 +12,7 @@ tdnf_SOURCES = \
|
|||
parselistargs.c \
|
||||
parserepolistargs.c \
|
||||
parseupdateinfo.c \
|
||||
setopt.c \
|
||||
updateinfocmd.c
|
||||
tdnf_LDADD = \
|
||||
$(top_builddir)/client/libtdnfclient.la
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#define ERROR_TDNF_CLI_OPTION_NAME_INVALID (ERROR_TDNF_CLI_BASE + 8)
|
||||
#define ERROR_TDNF_CLI_OPTION_ARG_REQUIRED (ERROR_TDNF_CLI_BASE + 9)
|
||||
#define ERROR_TDNF_CLI_OPTION_ARG_UNEXPECTED (ERROR_TDNF_CLI_BASE + 10)
|
||||
#define ERROR_TDNF_CLI_SETOPT_NO_EQUALS (ERROR_TDNF_CLI_BASE + 11)
|
||||
|
||||
|
||||
#define IsNullOrEmptyString(str) (!(str) || !(*str))
|
||||
|
@ -67,4 +68,5 @@ typedef uint32_t (*PFN_CMD)(PTDNF, PTDNF_CMD_ARGS);
|
|||
{ERROR_TDNF_CLI_OPTION_ARG_UNEXPECTED, "ERROR_TDNF_CLI_OPTION_ARG_UNEXPECTED", "Command line error: argument was unexpected."}, \
|
||||
{ERROR_TDNF_CLI_CHECKLOCAL_EXPECT_DIR, "ERROR_TDNF_CLI_CHECKLOCAL_EXPECT_DIR", "check-local requires path to rpm directory as a parameter"}, \
|
||||
{ERROR_TDNF_CLI_PROVIDES_EXPECT_ARG, "ERROR_TDNF_CLI_PROVIDES_EXPECT_ARG", "Need an item to match."}, \
|
||||
{ERROR_TDNF_CLI_SETOPT_NO_EQUALS, "ERROR_TDNF_CLI_SETOPT_NO_EQUALS", "Missing equal sign in setopt argument. setopt requires an argument of the form key=value."}, \
|
||||
};
|
||||
|
|
|
@ -340,7 +340,8 @@ ParseOption(
|
|||
dwError = ERROR_TDNF_CLI_OPTION_ARG_REQUIRED;
|
||||
BAIL_ON_CLI_ERROR(dwError);
|
||||
}
|
||||
fprintf(stdout, "setopt: %s\n", optarg);
|
||||
dwError = AddSetOpt(pCmdArgs, optarg);
|
||||
BAIL_ON_CLI_ERROR(dwError);
|
||||
}
|
||||
cleanup:
|
||||
return dwError;
|
||||
|
|
|
@ -380,3 +380,16 @@ void
|
|||
TDNFFreeListArgs(
|
||||
PTDNF_LIST_ARGS pListArgs
|
||||
);
|
||||
|
||||
//setopt.c
|
||||
uint32_t
|
||||
AddSetOpt(
|
||||
PTDNF_CMD_ARGS pCmdArgs,
|
||||
const char* pszOptArg
|
||||
);
|
||||
|
||||
uint32_t
|
||||
GetOptionAndValue(
|
||||
const char* pszOptArg,
|
||||
PTDNF_CMD_OPT* ppCmdOpt
|
||||
);
|
||||
|
|
|
@ -0,0 +1,114 @@
|
|||
/*
|
||||
* Copyright (C) 2015 VMware, Inc. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the GNU General Public License v2 (the "License");
|
||||
* you may not use this file except in compliance with the License. The terms
|
||||
* of the License are located in the COPYING file of this distribution.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Module : setopt.c
|
||||
*
|
||||
* Abstract :
|
||||
*
|
||||
* tdnf
|
||||
*
|
||||
* command line tool
|
||||
*
|
||||
* Authors : Priyesh Padmavilasom (ppadmavilasom@vmware.com)
|
||||
*
|
||||
*/
|
||||
|
||||
#include "includes.h"
|
||||
|
||||
uint32_t
|
||||
AddSetOpt(
|
||||
PTDNF_CMD_ARGS pCmdArgs,
|
||||
const char* pszOptArg
|
||||
)
|
||||
{
|
||||
uint32_t dwError = 0;
|
||||
PTDNF_CMD_OPT pCmdOpt = NULL;
|
||||
PTDNF_CMD_OPT pCmdOptEnd = NULL;
|
||||
|
||||
if(!pCmdArgs || IsNullOrEmptyString(pszOptArg))
|
||||
{
|
||||
dwError = ERROR_TDNF_CLI_INVALID_ARGUMENT;
|
||||
BAIL_ON_CLI_ERROR(dwError);
|
||||
}
|
||||
dwError = GetOptionAndValue(pszOptArg, &pCmdOpt);
|
||||
BAIL_ON_CLI_ERROR(dwError);
|
||||
|
||||
pCmdOptEnd = pCmdArgs->pSetOpt;
|
||||
if(!pCmdOptEnd)
|
||||
{
|
||||
pCmdArgs->pSetOpt = pCmdOpt;
|
||||
}
|
||||
else
|
||||
{
|
||||
while(pCmdOptEnd->pNext)
|
||||
{
|
||||
pCmdOptEnd = pCmdOptEnd->pNext;
|
||||
}
|
||||
pCmdOptEnd->pNext = pCmdOpt;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
return dwError;
|
||||
|
||||
error:
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
GetOptionAndValue(
|
||||
const char* pszOptArg,
|
||||
PTDNF_CMD_OPT* ppCmdOpt
|
||||
)
|
||||
{
|
||||
uint32_t dwError = 0;
|
||||
const char* EQUAL_SIGN = "=";
|
||||
const char* pszIndex = NULL;
|
||||
PTDNF_CMD_OPT pCmdOpt = NULL;
|
||||
int nEqualsPos = -1;
|
||||
|
||||
if(IsNullOrEmptyString(pszOptArg) || !ppCmdOpt)
|
||||
{
|
||||
dwError = ERROR_TDNF_CLI_INVALID_ARGUMENT;
|
||||
BAIL_ON_CLI_ERROR(dwError);
|
||||
}
|
||||
|
||||
pszIndex = strstr(pszOptArg, EQUAL_SIGN);
|
||||
if(!pszIndex)
|
||||
{
|
||||
dwError = ERROR_TDNF_CLI_SETOPT_NO_EQUALS;
|
||||
BAIL_ON_CLI_ERROR(dwError);
|
||||
}
|
||||
|
||||
dwError = TDNFAllocateMemory(sizeof(TDNF_CMD_OPT), (void**)&pCmdOpt);
|
||||
BAIL_ON_CLI_ERROR(dwError);
|
||||
|
||||
dwError = TDNFAllocateString(pszOptArg, &pCmdOpt->pszOptName);
|
||||
BAIL_ON_CLI_ERROR(dwError);
|
||||
|
||||
nEqualsPos = pszIndex - pszOptArg;
|
||||
pCmdOpt->pszOptName[nEqualsPos] = '\0';
|
||||
|
||||
dwError = TDNFAllocateString(pszOptArg+nEqualsPos+1, &pCmdOpt->pszOptValue);
|
||||
BAIL_ON_CLI_ERROR(dwError);
|
||||
|
||||
*ppCmdOpt = pCmdOpt;
|
||||
cleanup:
|
||||
return dwError;
|
||||
|
||||
error:
|
||||
if(ppCmdOpt)
|
||||
{
|
||||
*ppCmdOpt = NULL;
|
||||
}
|
||||
if(pCmdOpt)
|
||||
{
|
||||
TDNFFreeCmdOpt(pCmdOpt);
|
||||
}
|
||||
goto cleanup;
|
||||
}
|
Loading…
Reference in New Issue