Improve error diagnostics.
authorAndre Noll <maan@systemlinux.org>
Fri, 28 Aug 2009 09:28:57 +0000 (11:28 +0200)
committerAndre Noll <maan@systemlinux.org>
Fri, 28 Aug 2009 09:28:57 +0000 (11:28 +0200)
commit1e77c93a4da4dae8b75fcd305552e56ccae89b90
tree30df030155918435d0ec1199fa4d7bbc2e24d0b6
parent7c487767f42a70358eea15eb9a86ac673856f905
Improve error diagnostics.

When parsing the command line options we must not error out if a
required option was not given because that option might be specified
in the config file. Therefore we have to call cmdline_parser_ext()
with params->check_required = 0.

However, if --config-file is not given and the default config file
(~/.dssrc) does not exist, we end up with no check for required
options at all.

In particular, if the required --dest-dir option is not given,
conf.dest_dir is NULL and we call chdir(NULL) which returns EBADADRESS
at least on Linux. This causes dss to print the error message

Aug 28 11:35:07 main: Bad address

which is not really helpful. Fix this shortcoming by calling
cmdline_parser_ext() _again_ if no config file was read by
parse_config_file(). This second call uses params->check_required =
1, so that a proper error message is printed if any required options
are missing.

In the above example, the output changes to

./dss: '--source-dir' option required
./dss: '--dest-dir' option required

which is much better.
dss.c