aboutsummaryrefslogtreecommitdiffstats
path: root/l/src
diff options
context:
space:
mode:
authorTeddy Wing2021-02-02 01:04:08 +0100
committerTeddy Wing2021-02-02 01:04:08 +0100
commit3dbfff2478ca6b8b310d888a61fc08715ef35d1c (patch)
tree8b9e6d78f37c18941165a17e701f0a58c9d5bcf0 /l/src
parent074cb7d048c97484112474c0e2ee89a6a78660b7 (diff)
downloadextreload-3dbfff2478ca6b8b310d888a61fc08715ef35d1c.tar.bz2
main: Handle command line argument parsing errors
Add an error handler that just prints the error messages from 'unix-opts' to standard error and exits with EX_USAGE. Inspired by: - http://lispcookbook.github.io/cl-cookbook/scripting.html#handling-malformed-or-missing-arguments - https://github.com/libre-man/unix-opts/blob/0e61f34b2ecf62288437810d4abb31e572048b04/example/example.lisp
Diffstat (limited to 'l/src')
-rw-r--r--l/src/main.lisp10
-rw-r--r--l/src/option.lisp5
2 files changed, 14 insertions, 1 deletions
diff --git a/l/src/main.lisp b/l/src/main.lisp
index 99a60d0..9701d5f 100644
--- a/l/src/main.lisp
+++ b/l/src/main.lisp
@@ -20,7 +20,15 @@
:long "version"))
(defun main ()
- (multiple-value-bind (options free-args) (opts:get-opts)
+ (multiple-value-bind (options free-args)
+ (handler-bind
+ ((opts:unknown-option #'handle-option-error)
+ (opts:missing-arg #'handle-option-error)
+ (opts:arg-parser-failed #'handle-option-error)
+ (opts:missing-required-option #'handle-option-error))
+
+ (opts:get-opts))
+
(when-option (options :help)
(opts:describe
:usage-of "extreload"
diff --git a/l/src/option.lisp b/l/src/option.lisp
index d828230..11f7f98 100644
--- a/l/src/option.lisp
+++ b/l/src/option.lisp
@@ -4,3 +4,8 @@
`(let ((value (getf ,options ,option)))
(when value
,@body)))
+
+(defun handle-option-error (condition)
+ (format *error-output* "error: ~a~%" condition)
+
+ (opts:exit 64))