promote argv handling functions to fko_util (avoids duplication across client and server)

This commit is contained in:
Michael Rash
2015-12-16 18:59:10 -08:00
parent f230c32371
commit 998fb96f0b
10 changed files with 95 additions and 200 deletions
-4
View File
@@ -161,10 +161,6 @@ enum {
#define MAX_KEY_LEN 128
#define MAX_B64_KEY_LEN 180
/* Command line argument / argv handling
*/
#define MAX_CMDLINE_ARGS 30 /*!< should be way more than enough */
#if HAVE_LIBFIU
#define MAX_FAULT_TAG_LEN 128
#endif
+84
View File
@@ -655,6 +655,90 @@ void chop_spaces(char *str)
return;
}
static int
add_argv(char **argv_new, int *argc_new, const char *new_arg)
{
int buf_size = 0;
buf_size = strlen(new_arg) + 1;
argv_new[*argc_new] = calloc(1, buf_size);
if(argv_new[*argc_new] == NULL)
return 0;
strlcpy(argv_new[*argc_new], new_arg, buf_size);
*argc_new += 1;
if(*argc_new >= MAX_CMDLINE_ARGS-1)
return 0;
argv_new[*argc_new] = NULL;
return 1;
}
int
strtoargv(const char * const args_str, char **argv_new, int *argc_new)
{
int current_arg_ctr = 0, i;
char arg_tmp[MAX_ARGS_LINE_LEN] = {0};
for (i=0; i < (int)strlen(args_str); i++)
{
if (!isspace(args_str[i]))
{
arg_tmp[current_arg_ctr] = args_str[i];
current_arg_ctr++;
}
else
{
if(current_arg_ctr > 0)
{
arg_tmp[current_arg_ctr] = '\0';
if (add_argv(argv_new, argc_new, arg_tmp) != 1)
{
free_argv(argv_new, argc_new);
return 0;
}
current_arg_ctr = 0;
}
}
}
/* pick up the last argument in the string
*/
if(current_arg_ctr > 0)
{
arg_tmp[current_arg_ctr] = '\0';
if (add_argv(argv_new, argc_new, arg_tmp) != 1)
{
free_argv(argv_new, argc_new);
return 0;
}
}
return 1;
}
void
free_argv(char **argv_new, int *argc_new)
{
int i;
if(argv_new == NULL || *argv_new == NULL)
return;
for (i=0; i < *argc_new; i++)
{
if(argv_new[i] == NULL)
break;
else
free(argv_new[i]);
}
return;
}
/**
* @brief Dump a FKO context to a buffer
*
+6
View File
@@ -33,6 +33,9 @@
#include "fko.h"
#define MAX_CMDLINE_ARGS 30 /*!< should be way more than enough */
#define MAX_ARGS_LINE_LEN 1024
/* Function prototypes
*/
int is_valid_encoded_msg_len(const int len);
@@ -58,6 +61,9 @@ void chop_newline(char *str);
void chop_char(char *str, const char chop);
void chop_spaces(char *str);
int strtoargv(const char * const args_str, char **argv_new, int *argc_new);
void free_argv(char **argv_new, int *argc_new);
#if !HAVE_STRLCAT
size_t strlcat(char *dst, const char *src, size_t siz);
#endif