diff options
author | Ludovic Courtès <ludo@gnu.org> | 2017-01-19 23:20:57 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2017-01-19 23:20:57 +0100 |
commit | 57f068bec5349e250ce321262609ca8978a81f7f (patch) | |
tree | 1b8cb3772077a6e389614af6f93de883c60c7549 /guix | |
parent | 0691c9c05daf451c7e998ed08cb200a1b417274e (diff) | |
download | gnu-guix-57f068bec5349e250ce321262609ca8978a81f7f.tar gnu-guix-57f068bec5349e250ce321262609ca8978a81f7f.tar.gz |
syscalls: Extract 'bytes->string'.
* guix/build/syscalls.scm (bytes->string): New procedure.
(bytevector->string-list): Use it.
Diffstat (limited to 'guix')
-rw-r--r-- | guix/build/syscalls.scm | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm index 2e37846ff0..c06013cd08 100644 --- a/guix/build/syscalls.scm +++ b/guix/build/syscalls.scm @@ -900,6 +900,15 @@ bytevector BV at INDEX." ;; The most terrible interface, live from Scheme. (syscall->procedure int "ioctl" (list int unsigned-long '*))) +(define (bytes->string bytes) + "Read BYTES, a list of bytes, and return the null-terminated string decoded +from there, or #f if that would be an empty string." + (match (take-while (negate zero?) bytes) + (() + #f) + (non-zero + (list->string (map integer->char non-zero))))) + (define (bytevector->string-list bv stride len) "Return the null-terminated strings found in BV every STRIDE bytes. Read at most LEN bytes from BV." @@ -911,9 +920,7 @@ most LEN bytes from BV." (reverse result)) (_ (loop (drop bytes stride) - (cons (list->string (map integer->char - (take-while (negate zero?) bytes))) - result)))))) + (cons (bytes->string bytes) result)))))) (define* (network-interface-names #:optional sock) "Return the names of existing network interfaces. This is typically limited |