2005-03-29 19:58:22 -05:00
|
|
|
! Copyright (C) 2005 Slava Pestov.
|
|
|
|
! See http://factor.sf.net/license.txt for BSD license.
|
2005-04-17 18:34:09 -04:00
|
|
|
IN: unix-internals
|
2005-03-29 19:58:22 -05:00
|
|
|
USING: alien errors kernel math namespaces ;
|
|
|
|
|
2005-04-15 22:28:37 -04:00
|
|
|
! Alien wrappers for various Unix libc functions.
|
|
|
|
|
|
|
|
: EINPROGRESS 36 ;
|
|
|
|
|
2005-03-29 19:58:22 -05:00
|
|
|
: errno ( -- n )
|
2005-04-29 02:37:12 -04:00
|
|
|
"int" f "factor_errno" [ ] alien-invoke ;
|
2005-03-29 19:58:22 -05:00
|
|
|
|
|
|
|
: strerror ( n -- str )
|
|
|
|
"char*" "libc" "strerror" [ "int" ] alien-invoke ;
|
|
|
|
|
2005-04-17 18:34:09 -04:00
|
|
|
: open ( path flags prot -- fd )
|
2005-03-29 19:58:22 -05:00
|
|
|
"int" "libc" "open" [ "char*" "int" "int" ] alien-invoke ;
|
|
|
|
|
2005-04-17 18:34:09 -04:00
|
|
|
: close ( fd -- )
|
2005-03-29 19:58:22 -05:00
|
|
|
"void" "libc" "close" [ "int" ] alien-invoke ;
|
|
|
|
|
2005-04-30 00:43:39 -04:00
|
|
|
: fcntl ( fd cmd arg -- n )
|
|
|
|
"int" "libc" "fcntl" [ "int" "int" "int" ] alien-invoke ;
|
2005-04-14 19:37:13 -04:00
|
|
|
|
2005-04-17 18:34:09 -04:00
|
|
|
: read ( fd buf nbytes -- n )
|
2005-04-02 00:56:00 -05:00
|
|
|
"ssize_t" "libc" "read" [ "int" "ulong" "size_t" ] alien-invoke ;
|
2005-03-29 19:58:22 -05:00
|
|
|
|
2005-04-17 18:34:09 -04:00
|
|
|
: write ( fd buf nbytes -- n )
|
2005-04-02 00:56:00 -05:00
|
|
|
"ssize_t" "libc" "write" [ "int" "ulong" "size_t" ] alien-invoke ;
|
2005-03-29 19:58:22 -05:00
|
|
|
|
2005-04-09 22:43:41 -04:00
|
|
|
BEGIN-STRUCT: pollfd
|
|
|
|
FIELD: int fd
|
|
|
|
FIELD: short events
|
|
|
|
FIELD: short revents
|
|
|
|
END-STRUCT
|
|
|
|
|
2005-04-17 18:34:09 -04:00
|
|
|
: poll ( pollfds nfds timeout -- n )
|
2005-04-09 22:43:41 -04:00
|
|
|
"int" "libc" "poll" [ "pollfd*" "uint" "int" ] alien-invoke ;
|
2005-04-15 22:28:37 -04:00
|
|
|
|
2005-06-12 03:38:57 -04:00
|
|
|
BEGIN-STRUCT: timeval
|
|
|
|
FIELD: long sec
|
|
|
|
FIELD: long usec
|
|
|
|
END-STRUCT
|
|
|
|
|
|
|
|
: select ( nfds readfds writefds exceptfds timeout -- n )
|
|
|
|
"int" "libc" "select" [ "int" "void*" "void*" "void*" "timeval*" ] alien-invoke ;
|
|
|
|
|
2005-04-15 22:28:37 -04:00
|
|
|
BEGIN-STRUCT: hostent
|
|
|
|
FIELD: char* name
|
2005-05-04 22:34:55 -04:00
|
|
|
FIELD: void* aliases
|
2005-04-15 22:28:37 -04:00
|
|
|
FIELD: int addrtype
|
|
|
|
FIELD: int length
|
2005-05-04 22:34:55 -04:00
|
|
|
FIELD: void* addr-list
|
2005-04-15 22:28:37 -04:00
|
|
|
END-STRUCT
|
|
|
|
|
2005-05-04 22:34:55 -04:00
|
|
|
: hostent-addr hostent-addr-list *void* *uint ;
|
2005-04-17 18:34:09 -04:00
|
|
|
|
|
|
|
: gethostbyname ( name -- hostent )
|
2005-04-15 22:28:37 -04:00
|
|
|
"hostent*" "libc" "gethostbyname" [ "char*" ] alien-invoke ;
|
|
|
|
|
|
|
|
: AF_INET 2 ;
|
|
|
|
: PF_INET AF_INET ;
|
|
|
|
: SOCK_STREAM 1 ;
|
|
|
|
|
2005-04-17 18:34:09 -04:00
|
|
|
: socket ( domain type protocol -- n )
|
2005-04-15 22:28:37 -04:00
|
|
|
"int" "libc" "socket" [ "int" "int" "int" ] alien-invoke ;
|
|
|
|
|
2005-04-17 18:34:09 -04:00
|
|
|
: setsockopt ( s level optname optval optlen -- n )
|
2005-04-15 22:28:37 -04:00
|
|
|
"int" "libc" "setsockopt" [ "int" "int" "int" "void*" "socklen_t" ] alien-invoke ;
|
|
|
|
|
2005-04-17 18:34:09 -04:00
|
|
|
: connect ( s name namelen -- n )
|
2005-04-22 20:09:46 -04:00
|
|
|
"int" "libc" "connect" [ "int" "sockaddr-in*" "socklen_t" ] alien-invoke ;
|
2005-04-15 22:28:37 -04:00
|
|
|
|
2005-04-17 18:34:09 -04:00
|
|
|
: bind ( s sockaddr socklen -- n )
|
2005-04-22 20:09:46 -04:00
|
|
|
"int" "libc" "bind" [ "int" "sockaddr-in*" "socklen_t" ] alien-invoke ;
|
2005-04-15 22:28:37 -04:00
|
|
|
|
2005-04-17 18:34:09 -04:00
|
|
|
: listen ( s backlog -- n )
|
2005-04-15 22:28:37 -04:00
|
|
|
"int" "libc" "listen" [ "int" "int" ] alien-invoke ;
|
|
|
|
|
2005-04-17 18:34:09 -04:00
|
|
|
: accept ( s sockaddr socklen -- n )
|
2005-05-05 03:12:37 -04:00
|
|
|
"int" "libc" "accept" [ "int" "sockaddr-in*" "void*" ] alien-invoke ;
|
2005-04-15 22:28:37 -04:00
|
|
|
|
|
|
|
: htonl ( n -- n )
|
|
|
|
"uint" "libc" "htonl" [ "uint" ] alien-invoke ;
|
|
|
|
|
|
|
|
: htons ( n -- n )
|
|
|
|
"ushort" "libc" "htons" [ "ushort" ] alien-invoke ;
|
|
|
|
|
|
|
|
: ntohl ( n -- n )
|
|
|
|
"uint" "libc" "ntohl" [ "uint" ] alien-invoke ;
|
|
|
|
|
|
|
|
: ntohs ( n -- n )
|
|
|
|
"ushort" "libc" "ntohs" [ "ushort" ] alien-invoke ;
|