diff options
author | sterni <sternenseemann@systemli.org> | 2022-01-24T10·56+0100 |
---|---|---|
committer | sterni <sternenseemann@systemli.org> | 2022-01-26T17·43+0000 |
commit | f83ef56141675398acb1cf58873eb74e100df430 (patch) | |
tree | 1c88a2b5ec6051214d904a0310327886821c3a33 /third_party/lisp/mime4cl/streams.lisp | |
parent | 25cb0ad32ff197092262c74e944d254e901632bd (diff) |
refactor(3p/lisp/mime4cl): use trivial-gray-streams r/3676
This should be a net positive for portability and lets us drop some of the CMUCL cruft (which we don't test anyway, CMU support may have regressed regardless). Change-Id: I85664d82d211177da1db9eebea65c956295b09f7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5067 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
Diffstat (limited to 'third_party/lisp/mime4cl/streams.lisp')
-rw-r--r-- | third_party/lisp/mime4cl/streams.lisp | 53 |
1 files changed, 11 insertions, 42 deletions
diff --git a/third_party/lisp/mime4cl/streams.lisp b/third_party/lisp/mime4cl/streams.lisp index 087207ce5341..4fce60d5aac3 100644 --- a/third_party/lisp/mime4cl/streams.lisp +++ b/third_party/lisp/mime4cl/streams.lisp @@ -1,12 +1,12 @@ - ;;; eds.lisp --- En/De-coding Streams +;;; streams.lisp --- En/De-coding Streams - ;;; Copyright (C) 2012 by Walter C. Pelissero - ;;; Copyright (C) 2021 by the TVL Authors +;;; Copyright (C) 2012 by Walter C. Pelissero +;;; Copyright (C) 2021-2022 by the TVL Authors - ;;; Author: Walter C. Pelissero <walter@pelissero.de> - ;;; Project: mime4cl +;;; Author: Walter C. Pelissero <walter@pelissero.de> +;;; Project: mime4cl -#+cmu (ext:file-comment "$Module: eds.lisp") +#+cmu (ext:file-comment "$Module: streams.lisp") ;;; This library is free software; you can redistribute it and/or ;;; modify it under the terms of the GNU Lesser General Public License @@ -23,39 +23,6 @@ (in-package :mime4cl) -#+cmu -(eval-when (:load-toplevel :compile-toplevel :execute) - ;; CMUCL doesn't provide the STREAM-FILE-POSITION method in its - ;; implementation of Gray streams. We patch it in ourselves. - (defgeneric stream-file-position (stream &optional position)) - (defun my-file-position (stream &optional position) - (stream-file-position stream position)) - (defvar *original-file-position-function* - (prog1 - (symbol-function 'file-position) - (setf (symbol-function 'file-position) (symbol-function 'my-file-position)))) - (defmethod stream-file-position (stream &optional position) - (if position - (funcall *original-file-position-function* stream position) - (funcall *original-file-position-function* stream))) - - ;; oddly CMUCL doesn't seem to provide a default for STREAM-READ-SEQUENCE - (defmacro make-read-sequence (stream-type element-reader) - `(defmethod stream-read-sequence ((stream ,stream-type) seq &optional start end) - (unless start - (setf start 0)) - (unless end - (setf end (length seq))) - (loop - for i from start below end - for b = (,element-reader stream) - until (eq b :eof) - do (setf (elt seq i) b) - finally (return i)))) - - (make-read-sequence fundamental-binary-input-stream stream-read-byte) - (make-read-sequence fundamental-character-input-stream stream-read-char)) - (defclass coder-stream-mixin () ((real-stream :type stream :initarg :stream @@ -63,9 +30,11 @@ (dont-close :initform nil :initarg :dont-close))) -(defmethod stream-file-position ((stream coder-stream-mixin) &optional position) - (apply #'file-position (remove nil (list (slot-value stream 'real-stream) - position)))) +(defmethod stream-file-position ((stream coder-stream-mixin)) + (file-position (slot-value stream 'real-stream))) + +(defmethod (setf stream-file-position) (newval (stream coder-stream-mixin)) + (file-position (slot-value stream 'real-stream) newval)) (defclass coder-input-stream-mixin (fundamental-binary-input-stream coder-stream-mixin) ()) |