chiark / gitweb /
Fix for CLISP
[clg] / cairo / cairo.lisp
index c4d4f26ddd5c7fdbab1fc33aa76453c2c22e9f91..2a4d067970322e0300b94555a112699e4a452545 100644 (file)
@@ -20,7 +20,7 @@
 ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-;; $Id: cairo.lisp,v 1.22 2008-10-08 16:24:11 espen Exp $
+;; $Id: cairo.lisp,v 1.23 2008-10-27 18:39:30 espen Exp $
 
 (in-package "CAIRO")
 
@@ -875,16 +875,17 @@ (define-callback stream-write-func status
 
 (define-callback stream-read-func status 
     ((stream-id pointer-data) (data pointer) (length unsigned-int))
-  (let ((stream (find-user-data stream-id)))
-    (typecase stream
-      (stream
-       (loop for i below length do
-       (let ((byte (read-byte stream nil)))
-         (if byte
-             (setf (gffi::ref-uint-8 data i) byte)
-           (return-from stream-read-func :read-error)))))
-      ((or symbol function) (funcall stream data length))))
-  :success)
+  (block stream-read
+    (let ((stream (find-user-data stream-id)))
+      (typecase stream
+       (stream
+        (loop for i below length do
+         (let ((byte (read-byte stream nil)))
+           (if byte
+               (setf (gffi::ref-uint-8 data i) byte)
+             (return-from stream-read :read-error)))))
+       ((or symbol function) (funcall stream data length))))
+    :success))
 
 
 (defmacro with-surface ((surface cr) &body body)