summaryrefslogtreecommitdiff
path: root/module/ice-9/suspendable-ports.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2021-03-12 22:06:56 +0100
committerAndy Wingo <wingo@pobox.com>2021-03-12 22:08:16 +0100
commite30ee9047845751615ca6726e22b67aa9b38e187 (patch)
tree29a997fb7f97a7fae49a08b634e74a6ab2fac87a /module/ice-9/suspendable-ports.scm
parent1c472fef54d1f9a632ec8f91ea6d00ccf55a026a (diff)
downloadguile-e30ee9047845751615ca6726e22b67aa9b38e187.tar.gz
Revert "Handle CRLF and Unicode line endings in read-line"
This reverts commit 0f983e3db0c43ad7c89f57ea84f792ede373ba0c. After discussing with Mike we are going to punt the read-line changes for now. Open the port in O_TEXT mode if you want to chomp the CR in CFLF sequences.
Diffstat (limited to 'module/ice-9/suspendable-ports.scm')
-rw-r--r--module/ice-9/suspendable-ports.scm77
1 files changed, 3 insertions, 74 deletions
diff --git a/module/ice-9/suspendable-ports.scm b/module/ice-9/suspendable-ports.scm
index ba8d225f5..f5f005cca 100644
--- a/module/ice-9/suspendable-ports.scm
+++ b/module/ice-9/suspendable-ports.scm
@@ -1,5 +1,5 @@
;;; Ports, implemented in Scheme
-;;; Copyright (C) 2016, 2018, 2021 Free Software Foundation, Inc.
+;;; Copyright (C) 2016, 2019 Free Software Foundation, Inc.
;;;
;;; This library is free software: you can redistribute it and/or modify
;;; it under the terms of the GNU Lesser General Public License as
@@ -689,81 +689,10 @@
(define* (read-line #:optional (port (current-input-port))
(handle-delim 'trim))
- (let* ((line/delim (%read-line port))
- (line (car line/delim))
- (delim (cdr line/delim)))
- (case handle-delim
- ((trim) line)
- ((split) line/delim)
- ((concat) (if (and (string? line) (char? delim))
- (string-append line (string delim))
- line))
- ((peek) (if (char? delim)
- (unread-char delim port))
- line)
- (else
- (error "unexpected handle-delim value: " handle-delim)))))
+ (read-delimited "\n" port handle-delim))
(define* (%read-line port)
- (let ((LINE_BUFFER_SIZE 256))
- (let ((strings #f)
- (result #f)
- (buf (make-string LINE_BUFFER_SIZE #\nul))
- (delim #f)
- (index 0)
- (cr #f)
- (go #t))
- (cond
- ((not (input-port? port))
- (error "Not an input port." port))
- (else
- (while go
- (cond
- ((>= index LINE_BUFFER_SIZE)
- (set! strings (cons (substring buf 0 index)
- (or strings '())))
- (set! index 0))
- (else
- (let ((c (read-char port)))
- (cond
- ((or (eof-object? c)
- (char=? c #\x2028) ; U+2028 LINE SEPARATOR
- (char=? c #\x2029)) ; U+2029 PARAGRAPH SEPARATOR
- (set! cr #f)
- (set! delim c))
- ((char=? c #\newline)
- (set! delim c))
- ((char=? c #\return)
- (set! cr #t)
- (string-set! buf index c)
- (set! index (1+ index)))
- (else
- (set! cr #f)
- (string-set! buf index c)
- (set! index (1+ index)))))))
-
- (if (or (eof-object? delim)
- (char? delim))
- (set! go #f)))
- (let ((line (if (not strings)
- ;; A short string.
- (if cr
- (substring buf 0 (1- index))
- (substring buf 0 index))
- ;; Else, aggregate the intermediary results.
- (begin
- (if cr
- (set! strings (cons (substring buf 0 (1- index)) strings))
- (set! strings (cons (substring buf 0 index) strings)))
- (apply string-append (reverse strings))))))
-
- (if (and (eof-object? delim)
- (zero? (string-length line)))
- (cons the-eof-object the-eof-object)
- ;; Else
- (if cr
- (cons line "\r\n")
- (cons line delim)))))))))
+ (read-line port 'split))
(define* (put-string port str #:optional (start 0)
(count (- (string-length str) start)))