mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-27 05:13:10 +00:00
IO port
This commit is contained in:
parent
a9c238a1fc
commit
04856aded0
1 changed files with 26 additions and 10 deletions
|
@ -25,6 +25,7 @@ Implementation file for the low level input library
|
||||||
#include "wutil.h"
|
#include "wutil.h"
|
||||||
#include "input_common.h"
|
#include "input_common.h"
|
||||||
#include "env_universal.h"
|
#include "env_universal.h"
|
||||||
|
#include "iothread.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Time in milliseconds to wait for another byte to be available for
|
Time in milliseconds to wait for another byte to be available for
|
||||||
|
@ -69,21 +70,27 @@ static wint_t readb()
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
fd_set fd;
|
fd_set fdset;
|
||||||
int fd_max=1;
|
int fd_max=0;
|
||||||
|
int ioport = iothread_port();
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
FD_ZERO( &fd );
|
FD_ZERO( &fdset );
|
||||||
FD_SET( 0, &fd );
|
FD_SET( 0, &fdset );
|
||||||
if( env_universal_server.fd > 0 )
|
if( env_universal_server.fd > 0 )
|
||||||
{
|
{
|
||||||
FD_SET( env_universal_server.fd, &fd );
|
FD_SET( env_universal_server.fd, &fdset );
|
||||||
fd_max = env_universal_server.fd+1;
|
if (fd_max < env_universal_server.fd) fd_max = env_universal_server.fd;
|
||||||
}
|
}
|
||||||
|
if (ioport > 0) {
|
||||||
|
FD_SET( ioport, &fdset );
|
||||||
|
if (fd_max < ioport) fd_max = ioport;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
do_loop = 0;
|
do_loop = 0;
|
||||||
|
|
||||||
res = select( fd_max, &fd, 0, 0, 0 );
|
res = select( fd_max + 1, &fdset, 0, 0, 0 );
|
||||||
if( res==-1 )
|
if( res==-1 )
|
||||||
{
|
{
|
||||||
switch( errno )
|
switch( errno )
|
||||||
|
@ -122,7 +129,7 @@ static wint_t readb()
|
||||||
{
|
{
|
||||||
if( env_universal_server.fd > 0 )
|
if( env_universal_server.fd > 0 )
|
||||||
{
|
{
|
||||||
if( FD_ISSET( env_universal_server.fd, &fd ) )
|
if( FD_ISSET( env_universal_server.fd, &fdset ) )
|
||||||
{
|
{
|
||||||
debug( 3, L"Wake up on universal variable event" );
|
debug( 3, L"Wake up on universal variable event" );
|
||||||
env_universal_read_all();
|
env_universal_read_all();
|
||||||
|
@ -134,7 +141,17 @@ static wint_t readb()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( FD_ISSET( 0, &fd ) )
|
|
||||||
|
if ( ioport > 0 )
|
||||||
|
{
|
||||||
|
if (FD_ISSET(ioport, &fdset) )
|
||||||
|
{
|
||||||
|
iothread_service_completion();
|
||||||
|
}
|
||||||
|
do_loop = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( FD_ISSET( 0, &fdset ) )
|
||||||
{
|
{
|
||||||
if( read_blocked( 0, arr, 1 ) != 1 )
|
if( read_blocked( 0, arr, 1 ) != 1 )
|
||||||
{
|
{
|
||||||
|
@ -152,7 +169,6 @@ static wint_t readb()
|
||||||
return arr[0];
|
return arr[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wchar_t input_common_readch( int timed )
|
wchar_t input_common_readch( int timed )
|
||||||
{
|
{
|
||||||
if( lookahead_count == 0 )
|
if( lookahead_count == 0 )
|
||||||
|
|
Loading…
Reference in a new issue