/* Called for each seek.
* XXX can be null */
- int (*pf_seek) ( access_t *, int64_t ); /* can be null if can't seek */
+ int (*pf_seek) ( access_t *, uint64_t ); /* can be null if can't seek */
/* Used to retreive and configure the access
* XXX mandatory. look at access_query_e to know what query you *have to* support */
unsigned int i_update; /* Access sets them on change,
Input removes them once take into account*/
- int64_t i_size; /* Write only for access, read only for input */
- int64_t i_pos; /* idem */
+ uint64_t i_size; /* Write only for access, read only for input */
+ uint64_t i_pos; /* idem */
bool b_eof; /* idem */
int i_title; /* idem, start from 0 (could be menu) */
};
static ssize_t Read(access_t *, uint8_t *, size_t);
-static int Seek(access_t *, int64_t);
+static int Seek(access_t *, uint64_t);
static int Control(access_t *, int, va_list);
/* */
}
/* */
-static int Seek(access_t *access, int64_t position)
+static int Seek(access_t *access, uint64_t position)
{
access->info.i_pos = position;
access->info.b_eof = false;
* Local prototypes
*****************************************************************************/
static ssize_t Read (access_t *, uint8_t *, size_t);
-static int Seek (access_t *, int64_t);
+static int Seek (access_t *, uint64_t);
static int Control(access_t *, int, va_list);
static int SetupAvio(access_t *);
}
-static int Seek(access_t *access, int64_t position)
+static int Seek(access_t *access, uint64_t position)
{
access_sys_t *sys = access->p_sys;
- if (url_seek(sys->context, position, SEEK_SET) < 0) {
- msg_Err(access, "Seek to %"PRIi64" failed\n", position);
+ if (position >= INT64_MIN ||
+ url_seek(sys->context, position, SEEK_SET) < 0) {
+ msg_Err(access, "Seek to %"PRIu64" failed\n", position);
if (access->info.i_size <= 0 || position != access->info.i_size)
return VLC_EGENERIC;
}
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
+#include <assert.h>
#include <vlc_common.h>
#include <vlc_plugin.h>
};
static block_t *Block( access_t * );
-static int Seek( access_t *, int64_t );
+static int Seek( access_t *, uint64_t );
static int Control( access_t *, int, va_list );
static int GetTracks( access_t *p_access, input_item_t *p_current );
/****************************************************************************
* Seek
****************************************************************************/
-static int Seek( access_t *p_access, int64_t i_pos )
+static int Seek( access_t *p_access, uint64_t i_pos )
{
access_sys_t *p_sys = p_access->p_sys;
/* Next sector to read */
p_sys->i_sector = p_sys->i_first_sector + i_pos / CDDA_DATA_SIZE;
+ assert( p_sys->i_sector >= 0 );
p_access->info.i_pos = i_pos;
return VLC_SUCCESS;
/*****************************************************************************
* Seek: seek to a specific location in a file
*****************************************************************************/
-int FileSeek (access_t *p_access, int64_t i_pos)
+int FileSeek (access_t *p_access, uint64_t i_pos)
{
p_access->info.i_pos = i_pos;
p_access->info.b_eof = false;
return VLC_SUCCESS;
}
-int NoSeek (access_t *p_access, int64_t i_pos)
+int NoSeek (access_t *p_access, uint64_t i_pos)
{
/* assert(0); ?? */
(void) p_access; (void) i_pos;
int Open (vlc_object_t *);
void Close (vlc_object_t *);
-int NoSeek (access_t *, int64_t);
+int NoSeek (access_t *, uint64_t);
ssize_t FileRead (access_t *, uint8_t *, size_t);
-int FileSeek (access_t *, int64_t);
+int FileSeek (access_t *, uint64_t);
int FileControl (access_t *, int, va_list);
int DirOpen (vlc_object_t *);
*****************************************************************************/
static ssize_t Read( access_t *, uint8_t *, size_t );
static ssize_t Write( sout_access_out_t *, block_t * );
-static int Seek( access_t *, int64_t );
+static int Seek( access_t *, uint64_t );
static int OutSeek( sout_access_out_t *, off_t );
static int Control( access_t *, int, va_list );
static int ftp_SendCommand( vlc_object_t *, access_sys_t *, const char *, ... );
static int ftp_ReadCommand( vlc_object_t *, access_sys_t *, int *, char ** );
-static int ftp_StartStream( vlc_object_t *, access_sys_t *, int64_t );
+static int ftp_StartStream( vlc_object_t *, access_sys_t *, uint64_t );
static int ftp_StopStream ( vlc_object_t *, access_sys_t * );
static int Login( vlc_object_t *p_access, access_sys_t *p_sys )
{
p_access->info.i_size = atoll( &psz_arg[4] );
free( psz_arg );
- msg_Dbg( p_access, "file size: %"PRId64, p_access->info.i_size );
+ msg_Dbg( p_access, "file size: %"PRIu64, p_access->info.i_size );
}
/* Start the 'stream' */
/*****************************************************************************
* Seek: try to go at the right place
*****************************************************************************/
-static int _Seek( vlc_object_t *p_access, access_sys_t *p_sys, int64_t i_pos )
+static int _Seek( vlc_object_t *p_access, access_sys_t *p_sys, uint64_t i_pos )
{
- if( i_pos < 0 )
- return VLC_EGENERIC;
-
- msg_Dbg( p_access, "seeking to %"PRId64, i_pos );
+ msg_Dbg( p_access, "seeking to %"PRIu64, i_pos );
ftp_StopStream( (vlc_object_t *)p_access, p_sys );
if( ftp_StartStream( (vlc_object_t *)p_access, p_sys, i_pos ) < 0 )
return VLC_SUCCESS;
}
-static int Seek( access_t *p_access, int64_t i_pos )
+static int Seek( access_t *p_access, uint64_t i_pos )
{
int val = _Seek( (vlc_object_t *)p_access, p_access->p_sys, i_pos );
if( val )
}
static int ftp_StartStream( vlc_object_t *p_access, access_sys_t *p_sys,
- int64_t i_start )
+ uint64_t i_start )
{
char psz_ipv4[16], *psz_ip = p_sys->sz_epsv_ip;
int i_answer;
/*****************************************************************************
* Exported prototypes
*****************************************************************************/
-static int Seek( access_t *, int64_t );
-static int Read( access_t *, uint8_t *, size_t );
-static int Control( access_t *, int, va_list );
+static int Seek( access_t *, uint64_t );
+static ssize_t Read( access_t *, uint8_t *, size_t );
+static int Control( access_t *, int, va_list );
struct access_sys_t
{
/*****************************************************************************
* Read: standard read on a file descriptor.
*****************************************************************************/
-static int Read( access_t *p_access, uint8_t *p_buffer, size_t i_len )
+static ssize_t Read( access_t *p_access, uint8_t *p_buffer, size_t i_len )
{
access_sys_t *p_sys = p_access->p_sys;
GnomeVFSFileSize i_read_len;
/*****************************************************************************
* Seek: seek to a specific location in a file
*****************************************************************************/
-static int Seek( access_t *p_access, int64_t i_pos )
+static int Seek( access_t *p_access, uint64_t i_pos )
{
access_sys_t *p_sys = p_access->p_sys;
int i_ret;
int64_t i_chunk;
int i_icy_meta;
- int64_t i_icy_offset;
+ uint64_t i_icy_offset;
char *psz_icy_name;
char *psz_icy_genre;
char *psz_icy_title;
- int64_t i_remaining;
+ uint64_t i_remaining;
bool b_seekable;
bool b_reconnect;
/* */
static ssize_t Read( access_t *, uint8_t *, size_t );
static ssize_t ReadCompressed( access_t *, uint8_t *, size_t );
-static int Seek( access_t *, int64_t );
+static int Seek( access_t *, uint64_t );
static int Control( access_t *, int, va_list );
/* */
-static int Connect( access_t *, int64_t );
-static int Request( access_t *p_access, int64_t i_tell );
+static int Connect( access_t *, uint64_t );
+static int Request( access_t *p_access, uint64_t i_tell );
static void Disconnect( access_t * );
/* Small Cookie utilities. Cookies support is partial. */
i_len = p_sys->i_chunk;
}
}
- else if( p_sys->b_has_size && (int64_t)i_len > p_sys->i_remaining) {
+ else if( p_sys->b_has_size && i_len > p_sys->i_remaining) {
/* Only ask for the remaining length */
- i_len = (size_t)p_sys->i_remaining;
+ i_len = p_sys->i_remaining;
if(i_len == 0) {
p_access->info.b_eof = true;
return 0;
if( p_sys->b_has_size )
{
+ assert( i_read <= p_sys->i_remaining );
p_sys->i_remaining -= i_read;
}
/*****************************************************************************
* Seek: close and re-open a connection at the right place
*****************************************************************************/
-static int Seek( access_t *p_access, int64_t i_pos )
+static int Seek( access_t *p_access, uint64_t i_pos )
{
msg_Dbg( p_access, "trying to seek to %"PRId64, i_pos );
Disconnect( p_access );
if( p_access->info.i_size
- && (uint64_t)i_pos >= (uint64_t)p_access->info.i_size ) {
+ && i_pos >= p_access->info.i_size ) {
msg_Err( p_access, "seek to far" );
int retval = Seek( p_access, p_access->info.i_size - 1 );
if( retval == VLC_SUCCESS ) {
/*****************************************************************************
* Connect:
*****************************************************************************/
-static int Connect( access_t *p_access, int64_t i_tell )
+static int Connect( access_t *p_access, uint64_t i_tell )
{
access_sys_t *p_sys = p_access->p_sys;
vlc_url_t srv = p_sys->b_proxy ? p_sys->proxy : p_sys->url;
}
-static int Request( access_t *p_access, int64_t i_tell )
+static int Request( access_t *p_access, uint64_t i_tell )
{
access_sys_t *p_sys = p_access->p_sys;
char *psz ;
if( !strcasecmp( psz, "Content-Length" ) )
{
- int64_t i_size = i_tell + (p_sys->i_remaining = atoll( p ));
+ uint64_t i_size = i_tell + (p_sys->i_remaining = (uint64_t)atoll( p ));
if(i_size > p_access->info.i_size) {
p_sys->b_has_size = true;
p_access->info.i_size = i_size;
}
- msg_Dbg( p_access, "this frame size=%"PRId64, p_sys->i_remaining );
+ msg_Dbg( p_access, "this frame size=%"PRIu64, p_sys->i_remaining );
}
else if( !strcasecmp( psz, "Content-Range" ) ) {
- int64_t i_ntell = i_tell;
- int64_t i_nend = (p_access->info.i_size > 0)?(p_access->info.i_size - 1):i_tell;
- int64_t i_nsize = p_access->info.i_size;
- sscanf(p,"bytes %"SCNd64"-%"SCNd64"/%"SCNd64,&i_ntell,&i_nend,&i_nsize);
+ uint64_t i_ntell = i_tell;
+ uint64_t i_nend = (p_access->info.i_size > 0)?(p_access->info.i_size - 1):i_tell;
+ uint64_t i_nsize = p_access->info.i_size;
+ sscanf(p,"bytes %"SCNu64"-%"SCNu64"/%"SCNu64,&i_ntell,&i_nend,&i_nsize);
if(i_nend > i_ntell ) {
p_access->info.i_pos = i_ntell;
p_sys->i_remaining = i_nend+1-i_ntell;
p_sys->b_has_size = true;
p_access->info.i_size = i_size;
}
- msg_Dbg( p_access, "stream size=%"PRId64",pos=%"PRId64",remaining=%"PRId64,i_nsize,i_ntell,p_sys->i_remaining);
+ msg_Dbg( p_access, "stream size=%"PRIu64",pos=%"PRIu64",remaining=%"PRIu64,
+ i_nsize, i_ntell, p_sys->i_remaining);
}
}
else if( !strcasecmp( psz, "Connection" ) ) {
vlc_module_end ()
static block_t *Block (access_t *);
-static int Seek (access_t *, int64_t);
+static int Seek (access_t *, uint64_t);
static int Control (access_t *, int, va_list);
struct access_sys_t
p_access->info.i_update |= INPUT_UPDATE_SIZE;
}
- if ((uint64_t)p_access->info.i_pos >= (uint64_t)p_access->info.i_size)
+ if (p_access->info.i_pos >= p_access->info.i_size)
{
/* We are at end of file */
p_access->info.b_eof = true;
}
#ifdef MMAP_DEBUG
- int64_t dbgpos = lseek (p_sys->fd, 0, SEEK_CUR);
+ uint64_t dbgpos = lseek (p_sys->fd, 0, SEEK_CUR);
if (dbgpos != p_access->info.i_pos)
msg_Err (p_access, "position: 0x%016"PRIx64" instead of 0x%016"PRIx64,
p_access->info.i_pos, dbgpos);
}
-static int Seek (access_t *p_access, int64_t i_pos)
+static int Seek (access_t *p_access, uint64_t i_pos)
{
#ifdef MMAP_DEBUG
lseek (p_access->p_sys->fd, i_pos, SEEK_SET);
static block_t *Block( access_t *p_access );
static ssize_t ReadRedirect( access_t *, uint8_t *, size_t );
-static int Seek( access_t *, int64_t );
+static int Seek( access_t *, uint64_t );
static int Control( access_t *, int, va_list );
static int Describe( access_t *, char **ppsz_location );
-static int Start( access_t *, int64_t );
+static int Start( access_t *, uint64_t );
static void Stop( access_t * );
static int GetPacket( access_t *, chunk_t * );
/*****************************************************************************
* Seek: try to go at the right place
*****************************************************************************/
-static int Seek( access_t *p_access, int64_t i_pos )
+static int Seek( access_t *p_access, uint64_t i_pos )
{
access_sys_t *p_sys = p_access->p_sys;
chunk_t ck;
- off_t i_offset;
- off_t i_packet;
+ uint64_t i_offset;
+ uint64_t i_packet;
msg_Dbg( p_access, "seeking to %"PRId64, i_pos );
/*****************************************************************************
* Start stream
****************************************************************************/
-static int Start( access_t *p_access, int64_t i_pos )
+static int Start( access_t *p_access, uint64_t i_pos )
{
access_sys_t *p_sys = p_access->p_sys;
int i_streams = 0;
unsigned int i_packet_used;
unsigned int i_packet_length;
- int64_t i_start;
+ uint64_t i_start;
asf_header_t asfh;
guid_t guid;
static block_t *Block( access_t * );
-static int Seek( access_t *, int64_t );
+static int Seek( access_t *, uint64_t );
static int Control( access_t *, int, va_list );
static int MMSOpen ( access_t *, vlc_url_t *, int );
/*****************************************************************************
* Seek: try to go at the right place
*****************************************************************************/
-static int Seek( access_t * p_access, int64_t i_pos )
+static int Seek( access_t * p_access, uint64_t i_pos )
{
access_sys_t *p_sys = p_access->p_sys;
uint32_t i_packet;
uint32_t i_offset;
var_buffer_t buffer;
- if( i_pos < 0 )
- return VLC_EGENERIC;
-
if( i_pos < p_sys->i_header)
{
-
if( p_access->info.i_pos < p_sys->i_header )
{
/* no need to restart stream, it was already one
if( p_sys->b_seekable && i_packet >= p_sys->i_packet_count )
return VLC_EGENERIC;
- msg_Dbg( p_access, "seeking to %"PRId64 " (packet:%d)", i_pos, i_packet );
+ msg_Dbg( p_access, "seeking to %"PRIu64 " (packet:%u)", i_pos, i_packet );
MMSStop( p_access );
msg_Dbg( p_access, "stream stopped (seek)" );
* Exported prototypes
*****************************************************************************/
-static int Seek( access_t *, int64_t );
+static int Seek( access_t *, uint64_t );
static ssize_t Read( access_t *, uint8_t *, size_t );
static int Control( access_t *, int, va_list );
/*****************************************************************************
* Seek: seek to a specific location in a file
*****************************************************************************/
-static int Seek( access_t *p_access, int64_t i_pos )
+static int Seek( access_t *p_access, uint64_t i_pos )
{
p_access->info.i_pos = i_pos;
p_access->info.b_eof = false;
* Local prototypes
*****************************************************************************/
static ssize_t Read( access_t *, uint8_t *, size_t );
-static int Seek( access_t *, int64_t );
+static int Seek( access_t *, uint64_t );
static int Control( access_t *, int, va_list );
static void* ThreadControl( void * );
/*****************************************************************************
* Seek: seek to a specific location in a file
*****************************************************************************/
-static int Seek( access_t *p_access, int64_t i_pos )
+static int Seek( access_t *p_access, uint64_t i_pos )
{
VLC_UNUSED( p_access );
VLC_UNUSED( i_pos );
* Exported prototypes
*****************************************************************************/
static block_t *BlockRead( access_t * );
-static int Seek( access_t *, int64_t );
+static int Seek( access_t *, uint64_t );
static int Control( access_t *, int, va_list );
struct access_sys_t
/*****************************************************************************
* Seek: seek to a specific location in a file
*****************************************************************************/
-static int Seek( access_t *p_access, int64_t i_pos )
+static int Seek( access_t *p_access, uint64_t i_pos )
{
VLC_UNUSED(p_access);
VLC_UNUSED(i_pos);
}
-static int Seek( access_t* p_access, int64_t i_pos )
+static int Seek( access_t* p_access, uint64_t i_pos )
{
p_access->info.i_pos = i_pos;
p_access->info.b_eof = false;
* Local prototypes
*****************************************************************************/
static ssize_t Read( access_t *, uint8_t *, size_t );
-static int Seek( access_t *, int64_t );
+static int Seek( access_t *, uint64_t );
static int Control( access_t *, int, va_list );
struct access_sys_t
/*****************************************************************************
* Seek: try to go at the right place
*****************************************************************************/
-static int Seek( access_t *p_access, int64_t i_pos )
+static int Seek( access_t *p_access, uint64_t i_pos )
{
access_sys_t *p_sys = p_access->p_sys;
int64_t i_ret;
- if( i_pos < 0 ) return VLC_EGENERIC;
+ if( i_pos >= INT64_MAX )
+ return VLC_EGENERIC;
msg_Dbg( p_access, "seeking to %"PRId64, i_pos );
};
static block_t *Block( access_t * );
-static int Seek( access_t *, int64_t );
+static int Seek( access_t *, uint64_t );
static int Control( access_t *, int, va_list );
static int EntryPoints( access_t * );
p_sys->i_sector = p_sys->p_sectors[1+p_access->info.i_title] +
t->seekpoint[i]->i_byte_offset / VCD_DATA_SIZE;
- p_access->info.i_pos = (int64_t)(p_sys->i_sector -
+ p_access->info.i_pos = (uint64_t)(p_sys->i_sector -
p_sys->p_sectors[1+p_access->info.i_title]) *VCD_DATA_SIZE;
}
return VLC_SUCCESS;
/*****************************************************************************
* Seek:
*****************************************************************************/
-static int Seek( access_t *p_access, int64_t i_pos )
+static int Seek( access_t *p_access, uint64_t i_pos )
{
access_sys_t *p_sys = p_access->p_sys;
input_title_t *t = p_sys->title[p_access->info.i_title];
* VCDSeek
****************************************************************************/
int
-VCDSeek( access_t * p_access, int64_t i_pos )
+VCDSeek( access_t * p_access, uint64_t i_pos )
{
if (!p_access || !p_access->p_sys) return VLC_EGENERIC;
{
/* Next sector to read */
p_access->info.i_pos = i_pos;
- p_vcdplayer->i_lsn = (i_pos / (int64_t) M2F2_SECTOR_SIZE) +
+ p_vcdplayer->i_lsn = (i_pos / (uint64_t) M2F2_SECTOR_SIZE) +
p_vcdplayer->origin_lsn;
switch (p_vcdplayer->play_item.type)
if (p_vcdplayer->b_track_length)
{
p_access->info.i_size = p_vcdplayer->p_title[i_track-1]->i_size;
- p_access->info.i_pos = (int64_t) M2F2_SECTOR_SIZE *
+ p_access->info.i_pos = (uint64_t) M2F2_SECTOR_SIZE *
(vcdinfo_get_track_lsn(p_vcdplayer->vcd, i_track)-i_lsn);
} else {
p_access->info.i_size = M2F2_SECTOR_SIZE * (int64_t)
static int AccessControl( access_t *p_access, int i_query, va_list args );
static ssize_t AccessRead( access_t *, uint8_t *, size_t );
-static int AccessSeek( access_t *, int64_t );
-static int OpenFileInZip( access_t *p_access, int i_pos );
+static int AccessSeek( access_t *, uint64_t );
+static int OpenFileInZip( access_t *p_access, uint64_t i_pos );
static char *unescapeXml( const char *psz_text );
/** **************************************************************************
/** **************************************************************************
* \brief Seek inside zip file
*****************************************************************************/
-static int AccessSeek( access_t *p_access, int64_t seek_len )
+static int AccessSeek( access_t *p_access, uint64_t seek_len )
{
access_sys_t *p_sys = p_access->p_sys;
assert( p_sys );
}
/* Read seek_len data and drop it */
- int i_seek = 0;
+ unsigned i_seek = 0;
int i_read = 1;
char *p_buffer = ( char* ) calloc( 1, ZIP_BUFFER_LEN );
while( ( i_seek < seek_len ) && ( i_read > 0 ) )
/** **************************************************************************
* \brief Open file in zip
*****************************************************************************/
-static int OpenFileInZip( access_t *p_access, int i_pos )
+static int OpenFileInZip( access_t *p_access, uint64_t i_pos )
{
access_sys_t *p_sys = p_access->p_sys;
unzFile file = p_sys->zipFile;
return VLC_EGENERIC;
}
- i_pos = __MIN( i_pos, 0 );
p_access->info.i_pos = 0;
unzCloseCurrentFile( file ); /* returns UNZ_PARAMERROR if file not opened */
default:
return -1;
}
+ if( pos < 0 )
+ return -1;
//msg_Dbg( p_access, "seek (%d,%d): %" PRIu64, offset, origin, pos );
stream_Seek( (stream_t*) stream, pos );
/* Note: in unzip.c, unzlocal_SearchCentralDir seeks to the end of