~ 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