summaryrefslogtreecommitdiff
path: root/src/bin/scripts/droplang.c
diff options
context:
space:
mode:
authorAndrew Dunstan <andrew@dunslane.net>2012-04-17 18:36:22 -0400
committerAndrew Dunstan <andrew@dunslane.net>2012-04-17 18:36:22 -0400
commit7bebb851920e74cda57b866ac2f64123b44323c5 (patch)
tree647db567a2a6dc2f866508f90e368de6e3d96d77 /src/bin/scripts/droplang.c
parent67a48385b5671a815cd355bbf7375e2a3e594ba9 (diff)
Don't override arguments set via options with positional arguments.
A number of utility programs were rather careless about paremeters that can be set via both an option argument and a positional argument. This leads to results which can violate the Principal Of Least Astonishment. These changes refuse to use positional arguments to override settings that have been made via positional arguments. The changes are backpatched to all live branches.
Diffstat (limited to 'src/bin/scripts/droplang.c')
-rw-r--r--src/bin/scripts/droplang.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/bin/scripts/droplang.c b/src/bin/scripts/droplang.c
index a4c1b62311a..b214b4ffbab 100644
--- a/src/bin/scripts/droplang.c
+++ b/src/bin/scripts/droplang.c
@@ -98,14 +98,24 @@ main(int argc, char *argv[])
}
}
+ /*
+ * We set dbname from positional arguments if it is not
+ * already set by option arguments -d. If not doing
+ * listlangs, positional dbname must follow positional
+ * langname.
+ */
+
if (argc - optind > 0)
{
if (listlangs)
- dbname = argv[optind++];
+ {
+ if (dbname == NULL)
+ dbname = argv[optind++];
+ }
else
{
langname = argv[optind++];
- if (argc - optind > 0)
+ if (argc - optind > 0 && dbname == NULL)
dbname = argv[optind++];
}
}