* main.h, misc.c (parse_options): New general option line parser. Fix the
authorDavid Shaw <dshaw@jabberwocky.com>
Sat, 31 May 2003 21:52:16 +0000 (21:52 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Sat, 31 May 2003 21:52:16 +0000 (21:52 +0000)
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
g10/export.c
g10/import.c
g10/main.h
g10/misc.c

index e37368c..ffbbc4c 100644 (file)
@@ -1,3 +1,13 @@
+2003-05-31  David Shaw  <dshaw@jabberwocky.com>
+
+       * 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  <dshaw@jabberwocky.com>
 
        * keylist.c (list_one): Don't show the keyring filename when in
index e036e25..5783f6a 100644 (file)
@@ -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;
 }
-
index cec24b8..1b955c4 100644 (file)
@@ -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 *
index 67d2f98..e27f78d 100644 (file)
@@ -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 );
index 44deb57..1b8e617 100644 (file)
@@ -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;
+}