GNU bug report logs -
#36244
[PATCH] guix: canonical-newline-port: Fix handling of carriage return at buffer end.
Previous Next
Reported by: Robert Vollmert <rob <at> vllmrt.net>
Date: Sun, 16 Jun 2019 14:22:01 UTC
Severity: normal
Tags: patch
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
Prior to this change the added test fails for me locally at byte
1024. It might depend on some default buffer sizes.
Fixes https://debbugs.gnu.org/cgi/bugreport.cgi?bug=35863
* tests/utils.scm ("canonical-newline-port-1024"): Add test.
* guix/utils.scm (canonical-newline-port): Correct comments on CR/LF.
Remove CR even when they're at the end of the buffer.
---
guix/utils.scm | 6 +++---
tests/utils.scm | 6 ++++++
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/guix/utils.scm b/guix/utils.scm
index 709cdf9353..f480c3291f 100644
--- a/guix/utils.scm
+++ b/guix/utils.scm
@@ -718,7 +718,7 @@ environment variable name like \"XDG_CONFIG_HOME\"; SUFFIX is a suffix like
(define (canonical-newline-port port)
"Return an input port that wraps PORT such that all newlines consist
- of a single carriage return."
+ of a single linefeed."
(define (get-position)
(if (port-has-port-position? port) (port-position port) #f))
(define (set-position! position)
@@ -730,11 +730,11 @@ environment variable name like \"XDG_CONFIG_HOME\"; SUFFIX is a suffix like
(let loop ((count 0)
(byte (get-u8 port)))
(cond ((eof-object? byte) count)
+ ;; XXX: consume all CRs even if not followed by LF.
+ ((eqv? byte (char->integer #\return)) (loop count (get-u8 port)))
((= count (- n 1))
(bytevector-u8-set! bv (+ start count) byte)
n)
- ;; XXX: consume all LFs even if not followed by CR.
- ((eqv? byte (char->integer #\return)) (loop count (get-u8 port)))
(else
(bytevector-u8-set! bv (+ start count) byte)
(loop (+ count 1) (get-u8 port))))))
diff --git a/tests/utils.scm b/tests/utils.scm
index 44861384ab..f78ec356bd 100644
--- a/tests/utils.scm
+++ b/tests/utils.scm
@@ -230,6 +230,12 @@ skip these tests."
"This is a journey\r\nInto the sound\r\nA journey ...\n")))
(get-string-all (canonical-newline-port port))))
+(test-equal "canonical-newline-port-1024"
+ (string-concatenate (make-list 100 "0123456789abcde\n"))
+ (let ((port (open-string-input-port
+ (string-concatenate
+ (make-list 100 "0123456789abcde\r\n")))))
+ (get-string-all (canonical-newline-port port))))
(test-equal "edit-expression"
"(display \"GNU Guix\")\n(newline)\n"
--
2.20.1 (Apple Git-117)
This bug report was last modified 5 years and 333 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.