]> gitweb.factorcode.org Git - factor.git/commitdiff
sockaddr-in struct fix for little-endian linux
authorSlava Pestov <slava@factorcode.org>
Fri, 10 Jun 2005 01:00:00 +0000 (01:00 +0000)
committerSlava Pestov <slava@factorcode.org>
Fri, 10 Jun 2005 01:00:00 +0000 (01:00 +0000)
library/alien/aliens.factor
library/unix/io.factor
library/unix/sockets.factor
library/unix/syscalls-freebsd.factor
library/unix/syscalls-linux.factor
library/unix/syscalls-macosx.factor
library/unix/syscalls.factor

index 80b4247e46e65383c14d887cd50785d90e7d6d01..396e5cbbdc75a47c37d5d0281198f1ab12ff869f 100644 (file)
@@ -16,7 +16,7 @@ BUILTIN: displaced-alien 20 displaced-alien? ;
     #! C null value.
     0 <alien> ;
 
-: null? ( alien -- ? ) dup [ alien-address 0 = ] when ;
+: null? ( alien -- ? ) dup alien? [ alien-address 0 = ] when ;
 
 : null>f ( alien -- alien/f )
     dup alien-address 0 = [ drop f ] when ;
index 72b613ee3abab357f5c3f1f2e044db8177bfe3ec..ac43997a155d78ba35e4f21a42f892b3dce06ae6 100644 (file)
@@ -1,7 +1,7 @@
 ! Copyright (C) 2004, 2005 Slava Pestov.
 ! See http://factor.sf.net/license.txt for BSD license.
 IN: io-internals
-USING: errors generic hashtables kernel lists math
+USING: alien errors generic hashtables kernel lists math
 sequences streams strings threads unix-internals vectors ;
 
 ! We want namespaces::bind to shadow the bind system call from
@@ -11,10 +11,13 @@ USING: namespaces ;
 ! Some general stuff
 : file-mode OCT: 0600 ;
 
-: io-error ( n -- ) 0 < [ errno strerror throw ] when ;
+: (io-error) errno strerror throw ;
 
-: init-handle ( fd -- )
-    F_SETFL O_NONBLOCK fcntl io-error ;
+: check-null ( n -- ) dup 0 = [ (io-error) ] when ;
+
+: io-error ( n -- ) 0 < [ (io-error) ] when ;
+
+: init-handle ( fd -- ) F_SETFL O_NONBLOCK fcntl io-error ;
 
 ! Common delegate of native stream readers and writers
 TUPLE: port handle buffer error timeout cutoff ;
index 6321274e563b6a24d9e31d10e859741098ad2ba7..099f38ce42736c9aec4572f02949e40488b5788a 100644 (file)
@@ -15,9 +15,8 @@ USING: alien generic kernel math unix-internals ;
 : client-sockaddr ( host port -- sockaddr )
     #! Error handling here
     init-sockaddr [
-        >r gethostbyname hostent-addr
-        dup 0 = [ -1 io-error ] when r>
-        set-sockaddr-in-addr
+        >r gethostbyname dup [ "Host lookup failed" ] unless
+        hostent-addr dup check-null r> set-sockaddr-in-addr
     ] keep ;
 
 : socket-fd ( -- socket )
index 6b841d8d66af10ec1de9ef4e7c0540b8d8344fda..c3a68e4e134f85e7b39c0f9f1bf785fc52d9fb2f 100644 (file)
@@ -1,6 +1,7 @@
 ! Copyright (C) 2005 Slava Pestov.
 ! See http://factor.sf.net/license.txt for BSD license.
 IN: unix-internals
+USING: alien ;
 
 ! FreeBSD
 
@@ -24,3 +25,11 @@ IN: unix-internals
 
 : F_SETFL 4 ;
 : O_NONBLOCK 4 ;
+
+BEGIN-STRUCT: sockaddr-in
+    FIELD: uchar len
+    FIELD: uchar family
+    FIELD: ushort port
+    FIELD: in_addr_t addr
+    FIELD: longlong unused
+END-STRUCT
index 4d143b157a522a8e904955153c6a5e400240be06..39f7d9547e8f4efeacbb3994aedb3442be46cbc2 100644 (file)
@@ -1,6 +1,7 @@
 ! Copyright (C) 2005 Slava Pestov.
 ! See http://factor.sf.net/license.txt for BSD license.
 IN: unix-internals
+USING: alien ;
 
 ! Linux.
 
@@ -25,3 +26,10 @@ IN: unix-internals
 
 : F_SETFL 4 ;    ! set file status flags
 : O_NONBLOCK 4 ; ! no delay
+
+BEGIN-STRUCT: sockaddr-in
+    FIELD: ushort family
+    FIELD: ushort port
+    FIELD: in_addr_t addr
+    FIELD: longlong unused
+END-STRUCT
index f537e22b0598b2090baf1738fdeaa915d6a71554..45cc0fc34940c45b57efd2a675849a3de1562403 100644 (file)
@@ -1,6 +1,7 @@
 ! Copyright (C) 2005 Slava Pestov.
 ! See http://factor.sf.net/license.txt for BSD license.
 IN: unix-internals
+USING: alien ;
 
 ! Mac OS X
 
@@ -24,3 +25,11 @@ IN: unix-internals
 
 : F_SETFL 4 ;
 : O_NONBLOCK 4 ;
+
+BEGIN-STRUCT: sockaddr-in
+    FIELD: uchar len
+    FIELD: uchar family
+    FIELD: ushort port
+    FIELD: in_addr_t addr
+    FIELD: longlong unused
+END-STRUCT
index cc4b08aeeba439752e69cd5aac8dcabc1b704945..d40a62c6d490c95dda13dcdb79450f6450340bc0 100644 (file)
@@ -56,14 +56,6 @@ END-STRUCT
 : gethostbyname ( name -- hostent )
     "hostent*" "libc" "gethostbyname" [ "char*" ] alien-invoke ;
 
-BEGIN-STRUCT: sockaddr-in
-    FIELD: uchar len
-    FIELD: uchar family
-    FIELD: ushort port
-    FIELD: in_addr_t addr
-    FIELD: longlong unused
-END-STRUCT
-
 : AF_INET 2 ;
 : PF_INET AF_INET ;
 : SOCK_STREAM 1 ;