From 0d7aca863de34e1441fe4e24cc1d67a8a9773346 Mon Sep 17 00:00:00 2001 From: David Shaw Date: Wed, 28 Jul 2004 15:36:23 +0000 Subject: [PATCH] * misc.c (argsplit): Properly split quoted args from the keyword and trim whitespace afterwards. --- g10/ChangeLog | 5 +++++ g10/misc.c | 29 ++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/g10/ChangeLog b/g10/ChangeLog index 5d623f83a..0bbf97c03 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,8 @@ +2004-07-28 David Shaw + + * misc.c (argsplit): Properly split quoted args from the keyword + and trim whitespace afterwards. + 2004-07-27 David Shaw * misc.c (optsep): Add the ability to understand keyword="quoted diff --git a/g10/misc.c b/g10/misc.c index 51c0e6757..c2dfe3515 100644 --- a/g10/misc.c +++ b/g10/misc.c @@ -715,23 +715,34 @@ argsplit(char *string) equals=strchr(string,'='); if(equals) { - char *space; + char *quote,*space; - space=strchr(string,' '); - if(space) + *equals='\0'; + arg=equals+1; + + /* Quoted arg? */ + quote=strchr(arg,'"'); + if(quote) { - *space='\0'; - arg=space+1; + arg=quote+1; + + quote=strchr(arg,'"'); + if(quote) + *quote='\0'; } else { - *equals='\0'; - arg=equals+1; + size_t spaces; + + /* Trim leading spaces off of the arg */ + spaces=strspn(arg," "); + arg+=spaces; } - space=strrchr(arg,' '); + /* Trim tailing spaces off of the tag */ + space=strchr(string,' '); if(space) - arg=space+1; + *space='\0'; } return arg;