Commit be9cd599 authored by Rafaël Carré's avatar Rafaël Carré

rc: non blocking input read

parent 38ce0668
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <errno.h> /* ENOMEM */ #include <errno.h> /* ENOMEM */
#include <ctype.h> #include <ctype.h>
#include <signal.h> #include <signal.h>
#include <poll.h>
#include <vlc_interface.h> #include <vlc_interface.h>
#include <vlc_aout.h> #include <vlc_aout.h>
...@@ -1942,19 +1943,32 @@ vlc_bool_t ReadCommand( intf_thread_t *p_intf, char *p_buffer, int *pi_size ) ...@@ -1942,19 +1943,32 @@ vlc_bool_t ReadCommand( intf_thread_t *p_intf, char *p_buffer, int *pi_size )
} }
#endif #endif
while( !intf_ShouldDie( p_intf ) && *pi_size < MAX_LINE_LENGTH && struct pollfd fds;
(i_read = net_Read( p_intf, p_intf->p_sys->i_socket == -1 ? fds.fd = p_intf->p_sys->i_socket == -1 ?
0 /*STDIN_FILENO*/ : p_intf->p_sys->i_socket, NULL, 0 /*STDIN_FILENO*/ : p_intf->p_sys->i_socket;
(uint8_t *)p_buffer + *pi_size, 1, VLC_FALSE ) ) > 0 ) fds.events = POLLIN;
i_read = 0;
while( !intf_ShouldDie( p_intf ) && *pi_size < MAX_LINE_LENGTH
&& i_read >= 0 )
{ {
if( p_buffer[ *pi_size ] == '\r' || p_buffer[ *pi_size ] == '\n' ) int i_poll = poll( &fds, 1, INTF_IDLE_SLEEP / 1000 );
break; if( i_poll == 1 )
{
i_read = net_Read( p_intf, p_intf->p_sys->i_socket == -1 ?
0 /*STDIN_FILENO*/ : p_intf->p_sys->i_socket, NULL,
(uint8_t *)p_buffer + *pi_size, 1, VLC_FALSE );
if( p_buffer[ *pi_size ] == '\r' || p_buffer[ *pi_size ] == '\n' )
break;
(*pi_size)++; (*pi_size)++;
}
else if ( i_poll < 0 )
break;
} }
/* Connection closed */ /* Connection closed */
if( i_read <= 0 ) if( i_read < 0 )
{ {
if( p_intf->p_sys->i_socket != -1 ) if( p_intf->p_sys->i_socket != -1 )
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment