Avoid using non-portable debian.h
[yaz-moved-to-github.git] / src / options.c
index 7f6374c..6abfb6f 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2010 Index Data
+ * Copyright (C) Index Data
  * See the file LICENSE for details.
  */
 /**
 
 static int arg_no = 1;
 static size_t arg_off = 0;
+static int eof_options = 0;
 
-int options (const char *desc, char **argv, int argc, char **arg)
+int options(const char *desc, char **argv, int argc, char **arg)
 {
     const char *opt_buf = 0;
     size_t i = 0;
     int ch = 0;
-    
+
     if (arg_no >= argc)
         return YAZ_OPTIONS_EOF;
     if (arg_off == 0)
@@ -33,15 +34,26 @@ int options (const char *desc, char **argv, int argc, char **arg)
             if (arg_no >= argc)
                 return YAZ_OPTIONS_EOF;
         }
-        if (argv[arg_no][0] != '-' || argv[arg_no][1] == '\0')
+        if (argv[arg_no][0] != '-' || argv[arg_no][1] == '\0' || eof_options)
         {
             *arg = argv[arg_no++];
             return 0;
         }
         arg_off++; /* skip - */
     }
+    /* we're in option mode */
     if (argv[arg_no][1] == '-')
     {   /* long opt */
+        if (argv[arg_no][2] == '\0') /* -- : end of options */
+        {
+            eof_options = 1;
+            arg_off = 0;
+            ++arg_no;
+            if (arg_no >= argc)
+                return YAZ_OPTIONS_EOF;
+            *arg = argv[arg_no++];
+            return 0;
+        }
         opt_buf = argv[arg_no]+2;
         arg_off = strlen(argv[arg_no]);
     }
@@ -69,7 +81,7 @@ int options (const char *desc, char **argv, int argc, char **arg)
             type = desc[i++];
         }
         if (desc_char == ch)
-        { 
+        {
             if (type) /* option with argument */
             {
                 if (argv[arg_no][arg_off])
@@ -97,7 +109,7 @@ int options (const char *desc, char **argv, int argc, char **arg)
                 }
             }
             return ch;
-        }               
+        }
     }
     *arg = argv[arg_no]+arg_off-1;
     arg_no = arg_no + 1;