From ff43d07819d50c1b96f9034f5fbb5f5ce581f4bd Mon Sep 17 00:00:00 2001 From: David Shaw Date: Sat, 31 May 2003 21:52:16 +0000 Subject: [PATCH] * main.h, misc.c (parse_options): New general option line parser. Fix the bug in the old version that did not handle report syntax errors after a valid entry. * import.c (parse_import_options), export.c (parse_export_options): Call it here instead of duplicating the code. --- g10/ChangeLog | 10 ++++++++++ g10/export.c | 38 ++------------------------------------ g10/import.c | 37 ++----------------------------------- g10/main.h | 10 +++++++++- g10/misc.c | 37 +++++++++++++++++++++++++++++++++++++ 5 files changed, 60 insertions(+), 72 deletions(-) diff --git a/g10/ChangeLog b/g10/ChangeLog index e37368c38..ffbbc4c26 100644 --- a/g10/ChangeLog +++ b/g10/ChangeLog @@ -1,3 +1,13 @@ +2003-05-31 David Shaw + + * main.h, misc.c (parse_options): New general option line + parser. Fix the bug in the old version that did not handle report + syntax errors after a valid entry. + + * import.c (parse_import_options), export.c + (parse_export_options): Call it here instead of duplicating the + code. + 2003-05-30 David Shaw * keylist.c (list_one): Don't show the keyring filename when in diff --git a/g10/export.c b/g10/export.c index e036e2520..5783f6ac1 100644 --- a/g10/export.c +++ b/g10/export.c @@ -42,13 +42,7 @@ static int do_export_stream( IOBUF out, STRLIST users, int secret, int parse_export_options(char *str,unsigned int *options) { - char *tok; - int hit=0; - struct - { - char *name; - unsigned int bit; - } export_opts[]= + struct parse_options export_opts[]= { {"include-non-rfc",EXPORT_INCLUDE_NON_RFC}, {"include-local-sigs",EXPORT_INCLUDE_LOCAL_SIGS}, @@ -58,34 +52,7 @@ parse_export_options(char *str,unsigned int *options) /* add tags for include revoked and disabled? */ }; - while((tok=strsep(&str," ,"))) - { - int i,rev=0; - - if(ascii_strncasecmp("no-",tok,3)==0) - { - rev=1; - tok+=3; - } - - for(i=0;export_opts[i].name;i++) - { - if(ascii_strcasecmp(export_opts[i].name,tok)==0) - { - if(rev) - *options&=~export_opts[i].bit; - else - *options|=export_opts[i].bit; - hit=1; - break; - } - } - - if(!hit && !export_opts[i].name) - return 0; - } - - return hit; + return parse_options(str,options,export_opts); } /**************** @@ -427,4 +394,3 @@ do_export_stream( IOBUF out, STRLIST users, int secret, log_info(_("WARNING: nothing exported\n")); return rc; } - diff --git a/g10/import.c b/g10/import.c index cec24b8ad..1b955c412 100644 --- a/g10/import.c +++ b/g10/import.c @@ -85,13 +85,7 @@ static int merge_keysigs( KBNODE dst, KBNODE src, int *n_sigs, int parse_import_options(char *str,unsigned int *options) { - char *tok; - int hit=0; - struct - { - char *name; - unsigned int bit; - } import_opts[]= + struct parse_options import_opts[]= { {"allow-local-sigs",IMPORT_ALLOW_LOCAL_SIGS}, {"repair-hkp-subkey-bug",IMPORT_REPAIR_PKS_SUBKEY_BUG}, @@ -101,34 +95,7 @@ parse_import_options(char *str,unsigned int *options) {NULL,0} }; - while((tok=strsep(&str," ,"))) - { - int i,rev=0; - - if(ascii_strncasecmp("no-",tok,3)==0) - { - rev=1; - tok+=3; - } - - for(i=0;import_opts[i].name;i++) - { - if(ascii_strcasecmp(import_opts[i].name,tok)==0) - { - if(rev) - *options&=~import_opts[i].bit; - else - *options|=import_opts[i].bit; - hit=1; - break; - } - } - - if(!hit && !import_opts[i].name) - return 0; - } - - return hit; + return parse_options(str,options,import_opts); } void * diff --git a/g10/main.h b/g10/main.h index 67d2f9853..e27f78dc4 100644 --- a/g10/main.h +++ b/g10/main.h @@ -95,8 +95,16 @@ int string_to_compress_algo(const char *string); int check_compress_algo(int algo); int default_cipher_algo(void); int default_compress_algo(void); -void compliance_failure(void); const char *compliance_option_string(void); +void compliance_failure(void); + +struct parse_options +{ + char *name; + unsigned int bit; +}; + +int parse_options(char *str,unsigned int *options,struct parse_options *opts); /*-- helptext.c --*/ void display_online_help( const char *keyword ); diff --git a/g10/misc.c b/g10/misc.c index 44deb5737..1b8e6172a 100644 --- a/g10/misc.c +++ b/g10/misc.c @@ -639,3 +639,40 @@ compliance_failure(void) log_info(_("this message may not be usable by %s\n"),compliance_string()); opt.compliance=CO_GNUPG; } + +int +parse_options(char *str,unsigned int *options,struct parse_options *opts) +{ + char *tok; + + while((tok=strsep(&str," ,"))) + { + int i,rev=0; + + if(tok[0]=='\0') + continue; + + if(ascii_strncasecmp("no-",tok,3)==0) + { + rev=1; + tok+=3; + } + + for(i=0;opts[i].name;i++) + { + if(ascii_strcasecmp(opts[i].name,tok)==0) + { + if(rev) + *options&=~opts[i].bit; + else + *options|=opts[i].bit; + break; + } + } + + if(!opts[i].name) + return 0; + } + + return 1; +}