Commit 75424d35 authored by Sam Hocevar's avatar Sam Hocevar

* src/input/input_ext-plugins.c, src/input/input_ext-intf.c: boundary checks

    on seek.
parent be685831
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* input_ext-intf.c: services to the interface * input_ext-intf.c: services to the interface
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2001 VideoLAN * Copyright (C) 1998-2001 VideoLAN
* $Id: input_ext-intf.c,v 1.35 2002/03/05 17:46:33 stef Exp $ * $Id: input_ext-intf.c,v 1.36 2002/05/21 00:23:37 sam Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* *
...@@ -130,10 +130,18 @@ void input_Seek( input_thread_t * p_input, off_t i_position ) ...@@ -130,10 +130,18 @@ void input_Seek( input_thread_t * p_input, off_t i_position )
char psz_time2[OFFSETTOTIME_MAX_SIZE]; char psz_time2[OFFSETTOTIME_MAX_SIZE];
vlc_mutex_lock( &p_input->stream.stream_lock ); vlc_mutex_lock( &p_input->stream.stream_lock );
p_input->stream.p_selected_area->i_seek = i_position; if( i_position < 0 )
{
i_position = 0;
}
else if( i_position >= p_input->stream.p_selected_area->i_size )
{
i_position = p_input->stream.p_selected_area->i_size;
}
intf_WarnMsg( 3, "input: seeking position %lld/%lld (%s/%s)", i_position, p_input->stream.p_selected_area->i_seek = i_position;
p_input->stream.p_selected_area->i_size, intf_WarnMsg( 3, "input: seeking position %lld/%lld (%s/%s)",
i_position, p_input->stream.p_selected_area->i_size,
input_OffsetToTime( p_input, psz_time1, i_position ), input_OffsetToTime( p_input, psz_time1, i_position ),
input_OffsetToTime( p_input, psz_time2, input_OffsetToTime( p_input, psz_time2,
p_input->stream.p_selected_area->i_size ) ); p_input->stream.p_selected_area->i_size ) );
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* input_ext-plugins.c: useful functions for access and demux plug-ins * input_ext-plugins.c: useful functions for access and demux plug-ins
***************************************************************************** *****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN * Copyright (C) 2001, 2002 VideoLAN
* $Id: input_ext-plugins.c,v 1.9 2002/05/18 17:47:47 sam Exp $ * $Id: input_ext-plugins.c,v 1.10 2002/05/21 00:23:37 sam Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* *
...@@ -790,13 +790,25 @@ ssize_t input_FDNetworkRead( input_thread_t * p_input, byte_t * p_buffer, ...@@ -790,13 +790,25 @@ ssize_t input_FDNetworkRead( input_thread_t * p_input, byte_t * p_buffer,
*****************************************************************************/ *****************************************************************************/
void input_FDSeek( input_thread_t * p_input, off_t i_pos ) void input_FDSeek( input_thread_t * p_input, off_t i_pos )
{ {
#define S p_input->stream
input_socket_t * p_access_data = (input_socket_t *)p_input->p_access_data; input_socket_t * p_access_data = (input_socket_t *)p_input->p_access_data;
lseek( p_access_data->i_handle, i_pos, SEEK_SET ); lseek( p_access_data->i_handle, i_pos, SEEK_SET );
vlc_mutex_lock( &p_input->stream.stream_lock ); vlc_mutex_lock( &S.stream_lock );
p_input->stream.p_selected_area->i_tell = i_pos; S.p_selected_area->i_tell = i_pos;
vlc_mutex_unlock( &p_input->stream.stream_lock ); if( S.p_selected_area->i_tell > S.p_selected_area->i_size )
{
intf_ErrMsg( "input error: seeking too far" );
S.p_selected_area->i_tell = S.p_selected_area->i_size;
}
else if( S.p_selected_area->i_tell < 0 )
{
intf_ErrMsg( "input error: seeking too early" );
S.p_selected_area->i_tell = 0;
}
vlc_mutex_unlock( &S.stream_lock );
#undef S
} }
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