X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Foptions.c;h=6abfb6ffb2cb1d7b99dcf93bbf6057da73593d4c;hp=11dc8dbe15f9d032927fdab8b993bba8c74cfcd1;hb=cf91f233d0e16ed6920d84ce2d871eed90d3491b;hpb=98f7557d475021fb087f75423468226c2ce3df20 diff --git a/src/options.c b/src/options.c index 11dc8db..6abfb6f 100644 --- a/src/options.c +++ b/src/options.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2009 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ /** @@ -15,33 +15,45 @@ #include static int arg_no = 1; -static int arg_off = 0; +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 -2; + return YAZ_OPTIONS_EOF; if (arg_off == 0) { while (argv[arg_no][0] == '\0') { arg_no++; if (arg_no >= argc) - return -2; + 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,16 +109,17 @@ 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; arg_off = 0; - return -1; + return YAZ_OPTIONS_ERROR; } /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab