summaryrefslogtreecommitdiff
path: root/guix
diff options
context:
space:
mode:
Diffstat (limited to 'guix')
-rw-r--r--guix/store.scm11
1 files changed, 7 insertions, 4 deletions
diff --git a/guix/store.scm b/guix/store.scm
index f36ebea390..b0531b9915 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -158,10 +158,13 @@
(put-bytevector p zero 0 (- 8 m)))))))
(define (write-string s p)
- (let ((b (string->utf8 s)))
- (write-int (bytevector-length b) p)
- (put-bytevector p b)
- (write-padding (bytevector-length b) p)))
+ (let* ((s (string->utf8 s))
+ (l (bytevector-length s))
+ (m (modulo l 8))
+ (b (make-bytevector (+ 8 l (if (zero? m) 0 (- 8 m))))))
+ (bytevector-u64-native-set! b 0 l)
+ (bytevector-copy! s 0 b 8 l)
+ (put-bytevector p b)))
(define (read-string p)
(let* ((len (read-int p))