[PATCH] guix: canonical-newline-port: Fix handling of carriage return at buffer end.

DoneSubmitted by Robert Vollmert.
Details
2 participants
  • Ludovic Courtès
  • Robert Vollmert
Owner
unassigned
Severity
normal
R
R
Robert Vollmert wrote on 16 Jun 2019 16:18
(address . guix-patches@gnu.org)(name . Robert Vollmert)(address . rob@vllmrt.net)
20190616141829.28689-1-rob@vllmrt.net
Prior to this change the added test fails for me locally at byte1024. 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(-)
Toggle diff (46 lines)diff --git a/guix/utils.scm b/guix/utils.scmindex 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.scmindex 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)
L
L
Ludovic Courtès wrote on 20 Jun 2019 13:59
(name . Robert Vollmert)(address . rob@vllmrt.net)(address . 36244-done@debbugs.gnu.org)
87sgs4jwmm.fsf@gnu.org
Hi Robert,
Robert Vollmert <rob@vllmrt.net> skribis:
Toggle quote (9 lines)> 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.
Good catch. I tweaked the commit log and applied it.
Thanks,Ludo’.
Closed
?
Your comment

This issue is archived.

To comment on this conversation send email to 36244@debbugs.gnu.org