1
0
mirror of http://mpg123.de/trunk/.git synced 2025-10-25 04:37:34 +03:00

Fix behaviour on certain command line arguments that only call a handler

function and do neither have a short name, nor an address to store
a value to (--cdr, --au). The effect was that on

	mpg123 --au test.au -n 300 file.bla

parsing stopped after test.au and mpg123 tried to open the file "-n".

I fail to understand the idea behind the lines in getlopt.c that I
disabled. Perhaps one time, Oliver can explain the reasoning to me.



git-svn-id: svn://scm.orgis.org/mpg123/trunk@3777 35dc7657-300d-0410-a2e5-dc2837fedb53
This commit is contained in:
thor
2015-09-05 10:07:46 +00:00
parent fab175573e
commit df961f4c2f
2 changed files with 12 additions and 1 deletions

3
NEWS
View File

@@ -36,6 +36,9 @@
- Remove spurious Frankenstein warning when scanning files that have no - Remove spurious Frankenstein warning when scanning files that have no
gapless info (the reported value of -1152 gapless sample length should be gapless info (the reported value of -1152 gapless sample length should be
a giveaway anyway). a giveaway anyway).
- Fix a bug in the command line parser that was present from the beginning,
apparently, causing certain parameters (--au, --cdr) to kill off parsing
of following ones. Nobody complained in all these years. Astounding.
1.22.4 1.22.4
--- ---

View File

@@ -34,7 +34,7 @@ topt *findopt (int islong, char *opt, topt *opts)
return (0); return (0);
} }
int performoption (int argc, char *argv[], topt *opt) static int performoption (int argc, char *argv[], topt *opt)
{ {
int result = GLO_CONTINUE; int result = GLO_CONTINUE;
/* this really is not supposed to happen, so the exit may be justified to create asap ficing pressure */ /* this really is not supposed to happen, so the exit may be justified to create asap ficing pressure */
@@ -44,6 +44,8 @@ int performoption (int argc, char *argv[], topt *opt)
exit(1); \ exit(1); \
} }
debug2("performoption on %c / %s"
, opt->sname ? opt->sname : '_', opt->lname ? opt->lname : "");
if (!(opt->flags & GLO_ARG)) { /* doesn't take argument */ if (!(opt->flags & GLO_ARG)) { /* doesn't take argument */
if (opt->var) { if (opt->var) {
if (opt->flags & GLO_CHAR) /* var is *char */ if (opt->flags & GLO_CHAR) /* var is *char */
@@ -66,10 +68,13 @@ int performoption (int argc, char *argv[], topt *opt)
debug("casting assignment done"); debug("casting assignment done");
} }
#if 0 /* Oliver: What was this for?! --ThOr */
else else
result = opt->value ? opt->value : opt->sname; result = opt->value ? opt->value : opt->sname;
#endif
} }
else { /* requires argument */ else { /* requires argument */
debug("argument required");
if (loptind >= argc) if (loptind >= argc)
return (GLO_NOARG); return (GLO_NOARG);
loptarg = argv[loptind++]+loptchr; loptarg = argv[loptind++]+loptchr;
@@ -85,11 +90,14 @@ int performoption (int argc, char *argv[], topt *opt)
*((double *) opt->var) = atof(loptarg); *((double *) opt->var) = atof(loptarg);
else prog_error(); else prog_error();
} }
#if 0 /* Oliver: What was this for?! --ThOr */
else else
result = opt->value ? opt->value : opt->sname; result = opt->value ? opt->value : opt->sname;
#endif
} }
if (opt->func) if (opt->func)
opt->func(loptarg); opt->func(loptarg);
debug4("result: %i (%p, %i, %i)", result, opt->var, opt->value, opt->sname);
return (result); return (result);
} }