From eb88be6c0b7ea39a74cd2aa8af33371de4aeb74c Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Sun, 7 Apr 2013 19:39:22 +0200 Subject: Pull the argv parsing code into its own file So it can be used from multiple code paths --- trust/module.c | 78 +++------------------------------------------------------- 1 file changed, 4 insertions(+), 74 deletions(-) (limited to 'trust') diff --git a/trust/module.c b/trust/module.c index 7595ba1..109ff5c 100644 --- a/trust/module.c +++ b/trust/module.c @@ -36,6 +36,7 @@ #define CRYPTOKI_EXPORTS +#include "argv.h" #include "array.h" #include "attrs.h" #define P11_DEBUG_FLAG P11_DEBUG_TRUST @@ -248,7 +249,8 @@ create_tokens_inlock (p11_array *tokens, } static void -parse_argument (char *arg) +parse_argument (char *arg, + void *unused) { char *value; @@ -267,78 +269,6 @@ parse_argument (char *arg) } } -static void -parse_arguments (const char *string) -{ - char quote = '\0'; - char *src, *dup, *at, *arg; - - if (!string) - return; - - src = dup = strdup (string); - if (!dup) { - p11_message ("couldn't allocate memory for argument string"); - return; - } - - arg = at = src; - for (src = dup; *src; src++) { - - /* Matching quote */ - if (quote == *src) { - quote = '\0'; - - /* Inside of quotes */ - } else if (quote != '\0') { - if (*src == '\\') { - *at++ = *src++; - if (!*src) { - p11_message ("couldn't parse argument string: %s", string); - goto done; - } - if (*src != quote) - *at++ = '\\'; - } - *at++ = *src; - - /* Space, not inside of quotes */ - } else if (isspace(*src)) { - *at = 0; - parse_argument (arg); - arg = at; - - /* Other character outside of quotes */ - } else { - switch (*src) { - case '\'': - case '"': - quote = *src; - break; - case '\\': - *at++ = *src++; - if (!*src) { - p11_message ("couldn't parse argument string: %s", string); - goto done; - } - /* fall through */ - default: - *at++ = *src; - break; - } - } - } - - - if (at != arg) { - *at = 0; - parse_argument (arg); - } - -done: - free (dup); -} - static CK_RV sys_C_Finalize (CK_VOID_PTR reserved) { @@ -422,7 +352,7 @@ sys_C_Initialize (CK_VOID_PTR init_args) */ if (rv == CKR_OK) { if (args->pReserved) - parse_arguments ((const char*)args->pReserved); + p11_argv_parse ((const char*)args->pReserved, parse_argument, NULL); gl.sessions = p11_dict_new (p11_dict_ulongptr_hash, p11_dict_ulongptr_equal, -- cgit v1.1