* mkdtemp.c: New (moved from g10/), setenv.c: New, unsetenv.c: New.
[gnupg.git] / util / argparse.c
index c3cc3d7..30b403f 100644 (file)
@@ -1,5 +1,6 @@
 /* [argparse.c wk 17.06.97] Argument Parser for option handling
- *  Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ *  Copyright (C) 1998, 1999, 2000, 2001, 2003
+ *                2004 Free Software Foundation, Inc.
  *
  *  This file is part of GnuPG.
  *
@@ -158,41 +159,44 @@ initialize( ARGPARSE_ARGS *arg, const char *filename, unsigned *lineno )
 
 
     if( arg->err ) { /* last option was erroneous */
-       const char *s;
 
        if( filename ) {
            if( arg->r_opt == -6 )
-               s = "%s:%u: argument not expected\n";
+             log_error("%s:%u: argument not expected\n", filename, *lineno );
            else if( arg->r_opt == -5 )
-               s = "%s:%u: read error\n";
+             log_error("%s:%u: read error\n", filename, *lineno );
            else if( arg->r_opt == -4 )
-               s = "%s:%u: keyword too long\n";
+             log_error("%s:%u: keyword too long\n", filename, *lineno );
            else if( arg->r_opt == -3 )
-               s = "%s:%u: missing argument\n";
+             log_error("%s:%u: missing argument\n", filename, *lineno );
            else if( arg->r_opt == -7 )
-               s = "%s:%u: invalid command\n";
+             log_error("%s:%u: invalid command\n", filename, *lineno );
            else if( arg->r_opt == -10 )
-               s = "%s:%u: invalid alias definition\n";
+             log_error("%s:%u: invalid alias definition\n",filename,*lineno);
            else
-               s = "%s:%u: invalid option\n";
-           log_error(s, filename, *lineno );
+             log_error("%s:%u: invalid option\n", filename, *lineno );
        }
        else {
            if( arg->r_opt == -3 )
-               s = "Missing argument for option \"%.50s\"\n";
+             log_error("Missing argument for option \"%.50s\"\n",
+                       arg->internal.last? arg->internal.last:"[??]" );
            else if( arg->r_opt == -6 )
-               s = "Option \"%.50s\" does not expect an argument\n";
+             log_error("Option \"%.50s\" does not expect an argument\n",
+                       arg->internal.last? arg->internal.last:"[??]" );
            else if( arg->r_opt == -7 )
-               s = "Invalid command \"%.50s\"\n";
+             log_error("Invalid command \"%.50s\"\n",
+                       arg->internal.last? arg->internal.last:"[??]" );
            else if( arg->r_opt == -8 )
-               s = "Option \"%.50s\" is ambiguous\n";
+             log_error("Option \"%.50s\" is ambiguous\n",
+                       arg->internal.last? arg->internal.last:"[??]" );
            else if( arg->r_opt == -9 )
-               s = "Command \"%.50s\" is ambiguous\n";
+             log_error("Command \"%.50s\" is ambiguous\n",
+                       arg->internal.last? arg->internal.last:"[??]" );
            else
-               s = "Invalid option \"%.50s\"\n";
-           log_error(s, arg->internal.last? arg->internal.last:"[??]" );
+             log_error("Invalid option \"%.50s\"\n",
+                       arg->internal.last? arg->internal.last:"[??]" );
        }
-       if( arg->err != 1 )
+       if( arg->err != 1 || arg->r_opt == -5 )
            exit(2);
        arg->err = 0;
     }
@@ -330,13 +334,13 @@ optfile_parse( FILE *fp, const char *filename, unsigned *lineno,
                    /* remove quotes if they totally enclose the
                        string, and do not occur within the string */
                    if( *p == '"' && p[strlen(p)-1]=='"') {
-                       char *i=p;
+                       char *p2=p;
 
-                       while(*(++i))
-                         if(*i=='"')
+                       while(*(++p2))
+                         if(*p2=='"')
                            break;
 
-                       if(*i=='"' && *(i+1)=='\0') {
+                       if(*p2=='"' && *(p2+1)=='\0') {
                          p[strlen(p)-1] = 0;
                          p++;
                        }
@@ -441,7 +445,7 @@ find_long_option( ARGPARSE_ARGS *arg,
     for(i=0; opts[i].short_opt; i++ )
        if( opts[i].long_opt && !strcmp( opts[i].long_opt, keyword) )
            return i;
-  #if 0
+#if 0
     {
        ALIAS_DEF a;
        /* see whether it is an alias */
@@ -453,7 +457,7 @@ find_long_option( ARGPARSE_ARGS *arg,
            }
        }
     }
-  #endif
+#endif
     /* not found, see whether it is an abbreviation */
     /* aliases may not be abbreviated */
     n = strlen( keyword );
@@ -910,7 +914,7 @@ default_strusage( int level )
     switch( level ) {
       case 11: p = "foo"; break;
       case 13: p = "0.0"; break;
-      case 14: p = "Copyright (C) 2002 Free Software Foundation, Inc."; break;
+      case 14: p = "Copyright (C) 2004 Free Software Foundation, Inc."; break;
       case 15: p =
 "This program comes with ABSOLUTELY NO WARRANTY.\n"
 "This is free software, and you are welcome to redistribute it\n"