~ chicken-core (chicken-5) 7ae936dabe848a7afe7cb3ab727bb4785c8d8907
commit 7ae936dabe848a7afe7cb3ab727bb4785c8d8907
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Thu Jun 30 06:24:00 2011 -0400
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Thu Jun 30 06:25:42 2011 -0400
tcp-port-numbers used incorrect checks for results of port-accessors;
string-results in foreign functions have scrutiny-type "(or boolean string)"
diff --git a/support.scm b/support.scm
index 05246b4f..8a6b143e 100644
--- a/support.scm
+++ b/support.scm
@@ -1203,23 +1203,17 @@
unsigned-long)
'number)
((c-pointer c-string-list c-string-list*)
- (case mode
- ((arg) '(or boolean pointer))
- (else 'pointer)))
+ '(or boolean pointer))
((nonnull-c-pointer) 'pointer)
((c-string c-string* unsigned-c-string unsigned-c-string*)
- (case mode
- ((arg) '(or boolean string))
- (else 'string)))
+ '(or boolean string))
((nonnull-c-string nonnull-c-string* nonnull-unsigned-c-string*) 'string)
((symbol) 'symbol)
(else
(cond ((pair? t)
(case (car t)
((ref pointer function c-pointer)
- (case mode
- ((arg) '(or boolean pointer))
- (else 'pointer)))
+ '(or boolean pointer))
((const) (foreign-type->scrutiny-type (cadr t) mode))
((enum) 'number)
((nonnull-pointer nonnull-c-pointer) 'pointer)
diff --git a/tcp.scm b/tcp.scm
index 49efac6d..456399cf 100644
--- a/tcp.scm
+++ b/tcp.scm
@@ -644,15 +644,17 @@ EOF
(define (tcp-port-numbers p)
(##sys#check-port p 'tcp-port-numbers)
(let ((fd (##sys#tcp-port->fileno p)))
- (values
- (or (##net#getsockport fd)
- (##sys#signal-hook
- #:network-error 'tcp-port-numbers
- (##sys#string-append "cannot compute local port - " strerror) p) )
- (or (##net#getpeerport fd)
- (##sys#signal-hook
- #:network-error 'tcp-port-numbers
- (##sys#string-append "cannot compute remote port - " strerror) p) ) ) ) )
+ (let ((sp (##net#getsockport fd))
+ (pp (##net#getpeerport fd)))
+ (when (eq? -1 sp)
+ (##sys#signal-hook
+ #:network-error 'tcp-port-numbers
+ (##sys#string-append "cannot compute local port - " strerror) p))
+ (when (eq? -1 pp)
+ (##sys#signal-hook
+ #:network-error 'tcp-port-numbers
+ (##sys#string-append "cannot compute remote port - " strerror) p) )
+ (values sp pp))))
(define (tcp-listener-port tcpl)
(##sys#check-structure tcpl 'tcp-listener 'tcp-listener-port)
Trap