+ if (log_level > LOG_LEVEL_DEBUG) {
+ log_fail_no_exit("Invalid log level");
+ argp_usage(state);
+ }
+
+ log_set_level(log_level);
+}
+
+/* Parse a single option. */
+static error_t
+parse_opt(int key, char *arg, struct argp_state *state)
+{
+ switch (key) {
+ case 'd':
+ decode_debug_option(arg, state);
+ break;
+ case ARGP_KEY_ARG:
+ if (state->arg_num >= ARGS_COUNT) {
+ /* Too many arguments. */
+ argp_usage(state);
+ }
+
+ options.filename = arg;
+ break;
+ case ARGP_KEY_END:
+ if (state->arg_num < ARGS_COUNT) {
+ /* Not enough arguments, but the filename is optional.
+ So no error. */
+ }
+ break;
+ default:
+ return ARGP_ERR_UNKNOWN;
+ }