Brian was using error-checking code of the form

(CASE ERROR ((ERRNO/INTR) ...) ...)
But CASE doesn't evauate its keys, so this didn't work. I switched it
to COND's.

We should import my conditional macros, which includes an evaluating-key
CASE.
	-Olin
This commit is contained in:
shivers 1996-08-23 21:43:22 +00:00
parent 975278b58b
commit 464f44f2a3
1 changed files with 21 additions and 20 deletions

View File

@ -463,16 +463,20 @@
(let loop () (let loop ()
(receive (err nread) (receive (err nread)
(reader sockfd flags s start end addr) (reader sockfd flags s start end addr)
(if err
(case err (cond ((not err)
((errno/intr) (loop)) (values (and (not (zero? nread)) nread)
(make-socket-address from addr)))
((= err errno/intr) (loop))
; No forward-progess here. ; No forward-progess here.
((errno/wouldblock errno/again) 0) ((or (= err errno/wouldblock)
(= err errno/again))
0)
(else (errno-error err reader sockfd flags (else (errno-error err reader sockfd flags
s start start end addr))) s start start end addr))))))))
(values
(and (not (zero? nread)) nread)
(make-socket-address from addr))))))))
(define-foreign recv-substring!/errno (define-foreign recv-substring!/errno
(recv_substring (integer sockfd) (recv_substring (integer sockfd)
@ -513,12 +517,11 @@
(if (< i end) (if (< i end)
(receive (err nwritten) (receive (err nwritten)
(writer sockfd flags s i end family addr) (writer sockfd flags s i end family addr)
(if err (cond ((not err) (loop (+ i nwritten)))
(case err ((= err errno/intr) (loop i))
((errno/intr) (loop i)) (else (errno-error err sockfd flags family addr
(else (errno-error err sockfd flags family addr s start i end writer))))))))
s start i end writer)))
(loop (+ i nwritten))))))))
(define (send-message/partial socket s . args) (define (send-message/partial socket s . args)
(let-optionals args ((start 0) (end (string-length s)) (flags 0) (addr #f)) (let-optionals args ((start 0) (end (string-length s)) (flags 0) (addr #f))
@ -545,13 +548,11 @@
(let loop () (let loop ()
(receive (err nwritten) (receive (err nwritten)
(writer sockfd flags s start end family addr) (writer sockfd flags s start end family addr)
(if err (cond ((not err) nwritten)
(case err ((= err errno/intr) (loop))
((errno/intr) (loop)) ((or (= err errno/again) (= err errno/wouldblock)) 0)
((errno/again errno/wouldblock) 0)
(else (errno-error err sockfd flags family addr (else (errno-error err sockfd flags family addr
s start start end writer))) s start start end writer)))))))
nwritten)))))
(define-foreign send-substring/errno (define-foreign send-substring/errno
(send_substring (integer sockfd) (send_substring (integer sockfd)