fd>> over buffer>> [ buffer-end ] [ buffer-capacity ] bi read
{
{ [ dup 0 >= ] [ swap buffer>> n>buffer f ] }
- { [ err_no EINTR = ] [ 2drop +retry+ ] }
- { [ err_no EAGAIN = ] [ 2drop +input+ ] }
+ { [ errno EINTR = ] [ 2drop +retry+ ] }
+ { [ errno EAGAIN = ] [ 2drop +input+ ] }
[ (io-error) ]
} cond ;
over buffer>> buffer-consume
buffer>> buffer-empty? f +output+ ?
] }
- { [ err_no EINTR = ] [ 2drop +retry+ ] }
- { [ err_no EAGAIN = ] [ 2drop +output+ ] }
+ { [ errno EINTR = ] [ 2drop +retry+ ] }
+ { [ errno EAGAIN = ] [ 2drop +output+ ] }
[ (io-error) ]
} cond ;
stdin data>> handle-fd buffer buffer-end size read
dup 0 < [
drop
- err_no EINTR = [ buffer stdin size refill-stdin ] [ (io-error) ] if
+ errno EINTR = [ buffer stdin size refill-stdin ] [ (io-error) ] if
] [
size = [ "Error reading stdin pipe" throw ] unless
size buffer n>buffer
: multiplexer-error ( n -- n )
dup 0 < [
- err_no [ EAGAIN = ] [ EINTR = ] bi or
+ errno [ EAGAIN = ] [ EINTR = ] bi or
[ drop 0 ] [ (io-error) ] if
] when ;
ERR_get_error dup zero? [
drop
{
- { -1 [ err_no ECONNRESET = [ premature-close ] [ (io-error) ] if ] }
+ { -1 [ errno ECONNRESET = [ premature-close ] [ (io-error) ] if ] }
{ 0 [ premature-close ] }
} case
] [ nip (ssl-error) ] if ;
dup handle>> handle-fd f 0 write
{
{ [ 0 = ] [ drop ] }
- { [ err_no EAGAIN = ] [ dup +output+ wait-for-port wait-to-connect ] }
- { [ err_no EINTR = ] [ wait-to-connect ] }
+ { [ errno EAGAIN = ] [ dup +output+ wait-for-port wait-to-connect ] }
+ { [ errno EINTR = ] [ wait-to-connect ] }
[ (io-error) ]
} cond ;
[ drop ] [ [ handle>> handle-fd ] [ make-sockaddr/size ] bi* connect ] 2bi
{
{ [ 0 = ] [ drop ] }
- { [ err_no EINPROGRESS = ] [
+ { [ errno EINPROGRESS = ] [
[ +output+ wait-for-port ] [ wait-to-connect ] bi
] }
[ (io-error) ]
2dup do-accept
{
{ [ over 0 >= ] [ [ 2nip <fd> init-fd ] dip ] }
- { [ err_no EINTR = ] [ 2drop (accept) ] }
- { [ err_no EAGAIN = ] [
+ { [ errno EINTR = ] [ 2drop (accept) ] }
+ { [ errno EAGAIN = ] [
2drop
[ drop +input+ wait-for-port ]
[ (accept) ]
:: do-send ( packet sockaddr len socket datagram -- )
socket handle-fd packet dup length 0 sockaddr len sendto
0 < [
- err_no EINTR = [
+ errno EINTR = [
packet sockaddr len socket datagram do-send
] [
- err_no EAGAIN = [
+ errno EAGAIN = [
datagram +output+ wait-for-port
packet sockaddr len socket datagram do-send
] [
! Copyright (C) 2007, 2008 Slava Pestov
! Copyright (C) 2007, 2008 Doug Coleman
! See http://factorcode.org/license.txt for BSD license.
-USING: alien assocs continuations destructors kernel
-namespaces accessors sets summary ;
+USING: alien alien.syntax assocs continuations destructors
+kernel namespaces accessors sets summary ;
IN: libc
+LIBRARY: factor
+
+: errno ( -- int )
+ "int" "factor" "err_no" { } alien-invoke ;
+
+: clear-errno ( -- )
+ "void" "factor" "clear_err_no" { } alien-invoke ;
+
<PRIVATE
: (malloc) ( size -- alien )
{ "int" "gr_gid" }
{ "char**" "gr_mem" } ;
-LIBRARY: factor
-
-FUNCTION: void clear_err_no ( ) ;
-FUNCTION: int err_no ( ) ;
-
LIBRARY: libc
FUNCTION: char* strerror ( int errno ) ;
ERROR: unix-error errno message ;
-: (io-error) ( -- * ) err_no dup strerror unix-error ;
+: (io-error) ( -- * ) errno dup strerror unix-error ;
: io-error ( n -- ) 0 < [ (io-error) ] when ;
n ndup quot call dup 0 < [
drop
n narray
- err_no dup strerror
+ errno dup strerror
word unix-system-call-error
] [
n nnip