summaryrefslogtreecommitdiff
path: root/guix/scripts
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2015-11-03 18:05:43 -0500
committerDavid Thompson <dthompson2@worcester.edu>2015-11-03 18:05:43 -0500
commitd431b232403fbf4d41617ba29664dcd3fff23f96 (patch)
tree734a31517f68838b3abec6ce9d0614750d8dbfcf /guix/scripts
parentbab020d7ca50e4153cf24832d119389a37fa8f63 (diff)
scripts: container: Fix 'exec' command line parsing.
* guix/scripts/container/exec.scm (partition-args): Reimplement such that all args up to and including the PID are returned as the first of the two values.
Diffstat (limited to 'guix/scripts')
-rw-r--r--guix/scripts/container/exec.scm16
1 files changed, 12 insertions, 4 deletions
diff --git a/guix/scripts/container/exec.scm b/guix/scripts/container/exec.scm
index b842fd38aa..10e70568cc 100644
--- a/guix/scripts/container/exec.scm
+++ b/guix/scripts/container/exec.scm
@@ -50,10 +50,18 @@ Execute COMMMAND within the container process PID.\n"))
(define (partition-args args)
"Split ARGS into two lists; one containing the arguments for this program,
and the other containing arguments for the command to be executed."
- (break (lambda (arg)
- ;; Split after the pid argument.
- (not (false-if-exception (string->number arg))))
- args))
+ (define (number-string? str)
+ (false-if-exception (string->number str)))
+
+ (let loop ((a '())
+ (b args))
+ (match b
+ (()
+ (values (reverse a) '()))
+ (((? number-string? head) . tail)
+ (values (reverse (cons head a)) tail))
+ ((head . tail)
+ (loop (cons head a) tail)))))
(define (guix-container-exec . args)
(define (handle-argument arg result)