Update of /cvsroot/sbcl/sbcl/contrib/sb-bsd-sockets
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv30720/contrib/sb-bsd-sockets
Modified Files:
name-service.lisp defpackage.lisp constants.lisp
Log Message:
1.0.3.33: sb-bsd-sockets fixes for x86-64/darwin
* add gethostbyname2 (#+darwin)
* make ai_addrlen be a socklen_t (#+darwin)
* turn off :sb-bsd-sockets-addrinfo on x86-64/darwin as this seems
to be broken
* workaround gethostbyname length bug by alllowing length 4 or 8
on x86-64 darwin
Index: name-service.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/contrib/sb-bsd-sockets/name-service.lisp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- name-service.lisp 3 Mar 2007 20:53:15 -0000 1.15
+++ name-service.lisp 6 Mar 2007 23:26:32 -0000 1.16
@@ -34,8 +34,16 @@
until (sb-alien:null-alien ad)
collect (ecase (sockint::hostent-type h)
(#.sockint::af-inet
+ ;; CLH: Work around x86-64 darwin bug here.
+ ;; The length is reported as 8, when it should be 4.
+ #+(and darwin x86-64)
+ (progn
+ (assert (or (= length 4) (= length 8)))
+ (naturalize-unsigned-byte-8-array ad 4))
+ #-(and darwin x86-64)
+ (progn
(assert (= length 4))
- (naturalize-unsigned-byte-8-array ad length))
+ (naturalize-unsigned-byte-8-array ad length)))
#-win32
(#.sockint::af-local
(sb-alien:cast ad sb-alien:c-string))))))
Index: defpackage.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/contrib/sb-bsd-sockets/defpackage.lisp,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- defpackage.lisp 2 Mar 2007 00:59:11 -0000 1.12
+++ defpackage.lisp 6 Mar 2007 23:26:32 -0000 1.13
@@ -68,6 +68,9 @@
;;; Unfortunately the manual page claims that these functions are not
;;; thread-safe on OS X, but they probably can't be any worse than
;;; gethostbyname and gethostbyaddr.
+;;;
+;;; CLH: getaddrinfo seems to be broken is broken on x86-64/darwin
+#-(and x86-64 darwin)
(let ((addr (sb-alien::find-dynamic-foreign-symbol-address "getaddrinfo")))
(when addr
(pushnew :sb-bsd-sockets-addrinfo *features*)))
Index: constants.lisp
===================================================================
RCS file: /cvsroot/sbcl/sbcl/contrib/sb-bsd-sockets/constants.lisp,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- constants.lisp 3 Mar 2007 20:53:15 -0000 1.16
+++ constants.lisp 6 Mar 2007 23:26:32 -0000 1.17
@@ -211,6 +211,10 @@
(msg (* msghdr))
(flags int)))
(:function gethostbyname ("gethostbyname" (* hostent) (name c-string)))
+ #+darwin
+ (:function gethostbyname2 ("gethostbyname2" (* hostent)
+ (name c-string)
+ (af int)))
(:function gethostbyaddr ("gethostbyaddr" (* hostent)
(addr (* t))
(len int)
@@ -235,7 +239,14 @@
(integer family "int" "ai_family")
(integer socktype "int" "ai_socktype")
(integer protocol "int" "ai_protocol")
- (integer addrlen "size_t""ai_addrlen")
+ ;; CLH 20070306 FIXME: ai_addrlen should really
+ ;; be a socklen_t, but I'm not sure if this the
+ ;; case on other platforms. I'm setting this to
+ ;; socklen_t on darwin and hoping that other
+ ;; platform maintainers will do the right thing
+ ;; here.
+ #+darwin (integer addrlen "socklen_t" "ai_addrlen")
+ #-darwin (integer addrlen "size_t" "ai_addrlen")
((* sockaddr-in) addr "struct sockaddr*" "ai_addr")
(c-string canonname "char *" "ai_canonname")
((* t) next "struct addrinfo*" "ai_next")))
|