aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shaw <[email protected]>2003-05-31 21:44:31 +0000
committerDavid Shaw <[email protected]>2003-05-31 21:44:31 +0000
commitc8abff498a6e52f8b395db7a3da57a102a51a1c3 (patch)
tree2c44e95136cc7802f9df000ab0da2324cfe32290
parent* keylist.c (list_one): Don't show the keyring filename when in (diff)
downloadgnupg-c8abff498a6e52f8b395db7a3da57a102a51a1c3.tar.gz
gnupg-c8abff498a6e52f8b395db7a3da57a102a51a1c3.zip
* 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.
-rw-r--r--g10/ChangeLog10
-rw-r--r--g10/export.c38
-rw-r--r--g10/import.c37
-rw-r--r--g10/main.h10
-rw-r--r--g10/misc.c37
5 files changed, 60 insertions, 72 deletions
diff --git a/g10/ChangeLog b/g10/ChangeLog
index aae073153..13d670366 100644
--- a/g10/ChangeLog
+++ b/g10/ChangeLog
@@ -1,3 +1,13 @@
+2003-05-31 David Shaw <[email protected]>
+
+ * 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 <[email protected]>
* keylist.c (list_one): Don't show the keyring filename when in
diff --git a/g10/export.c b/g10/export.c
index b652c2cf7..b4c87d4dc 100644
--- a/g10/export.c
+++ b/g10/export.c
@@ -41,13 +41,7 @@ static int do_export_stream( IOBUF out, STRLIST users,
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},
@@ -57,34 +51,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);
}
/****************
@@ -343,4 +310,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 9c1cba879..049c598d4 100644
--- a/g10/import.c
+++ b/g10/import.c
@@ -86,13 +86,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},
@@ -100,34 +94,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 6356f5bb8..d48798921 100644
--- a/g10/main.h
+++ b/g10/main.h
@@ -87,8 +87,16 @@ void deprecated_warning(const char *configname,unsigned int configlineno,
const char *option,const char *repl1,const char *repl2);
const char *compress_algo_to_string(int algo);
int check_compress_algo(int algo);
-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 c625e3ff2..24e258d89 100644
--- a/g10/misc.c
+++ b/g10/misc.c
@@ -593,3 +593,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;
+}