* Change log:
*
* $Log$
+* Revision 1.3 2005/07/25 14:41:29 lilo_booter
+* + Minor correction for entry length being less than the data length
+*
+* Revision 1.2 2005/07/25 07:21:39 lilo_booter
+* + fixes for opendml dv avi
+*
* Revision 1.1 2005/04/15 14:28:26 lilo_booter
* Initial version
*
//#include <stdio.h>
#include <iostream>
#include <iomanip>
+#ifndef __FreeBSD__
#include <byteswap.h>
+#endif /* __FreeBSD__ */
using std::cout;
using std::hex;
could not get it working on the gcc compiler so I had to use this
workaround. We can now use id = make_fourcc("ABCD") instead. */
-FOURCC make_fourcc( char *s )
+FOURCC make_fourcc( const char *s )
{
if ( s[ 0 ] == 0 )
return 0;
/* Check whether it is a LIST. If so, let ParseList deal with it */
- read( fd, &type, sizeof( type ) );
+ fail_if( read( fd, &type, sizeof( type ) ) != sizeof( type ));
if ( type == make_fourcc( "LIST" ) )
{
- typesize = -sizeof( type );
+ typesize = (int) -sizeof( type );
fail_if( lseek( fd, typesize, SEEK_CUR ) == ( off_t ) - 1 );
ParseList( parent );
}
*/
-void RIFFFile::ReadChunk( int chunk_index, void *data )
+void RIFFFile::ReadChunk( int chunk_index, void *data, off_t data_len )
{
RIFFDirEntry entry;
entry = GetDirectoryEntry( chunk_index );
pthread_mutex_lock( &file_mutex );
fail_if( lseek( fd, entry.offset, SEEK_SET ) == ( off_t ) - 1 );
- fail_neg( read( fd, data, entry.length ) );
+ fail_neg( read( fd, data, entry.length > data_len ? data_len : entry.length ) );
pthread_mutex_unlock( &file_mutex );
}