1
0
mirror of https://git.savannah.gnu.org/git/guix.git synced 2026-05-23 09:35:56 +02:00

syscalls: Extract 'bytes->string'.

* guix/build/syscalls.scm (bytes->string): New procedure.
(bytevector->string-list): Use it.
This commit is contained in:
Ludovic Courtès
2017-01-19 23:20:57 +01:00
parent 0691c9c05d
commit 57f068bec5
+10 -3
View File
@@ -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