Hash :
1ce95fef
Author :
Thomas de Grivel
Date :
2017-05-28T14:20:36
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
;;
;; fd-flexi - Unix file descriptor flexi streams for Common Lisp
;;
;; Copyright 2017 Thomas de Grivel <thoxdg@gmail.com>
;;
;; Permission to use, copy, modify, and distribute this software for any
;; purpose with or without fee is hereby granted, provided that the above
;; copyright notice and this permission notice appear in all copies.
;;
;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
;; WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
;; MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
;; ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
;; WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
;; ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
;; OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
;;
(in-package :fd-flexi)
(defun input-stream (fd &optional (external-format :utf-8))
(make-flexi-stream (fd-gray:input-stream fd)
:external-format external-format))
(defmacro with-input-stream ((var fd &optional (external-format :utf-8))
&body body)
(let ((stream (gensym "STREAM-")))
`(let ((,stream (input-stream ,fd ,external-format)))
(unwind-protect (let ((,var ,stream))
,@body)
(close ,stream)))))
(defun output-stream (fd &optional (external-format :utf-8))
(make-flexi-stream (fd-gray:output-stream fd)
:external-format external-format))
(defmacro with-output-stream ((var fd &optional (external-format :utf-8))
&body body)
(let ((stream (gensym "STREAM-")))
`(let ((,stream (output-stream ,fd ,external-format)))
(unwind-protect (let ((,var ,stream))
,@body)
(close ,stream)))))
(defun io-stream (fd &optional (external-format :utf-8))
(make-flexi-stream (fd-gray:io-stream fd)
:external-format external-format))
(defmacro with-io-stream ((var fd &optional (external-format :utf-8))
&body body)
(let ((stream (gensym "STREAM-")))
`(let ((,stream (io-stream ,fd ,external-format)))
(unwind-protect (let ((,var ,stream))
,@body)
(close ,stream)))))