Merge ../mlt
[melted] / src / modules / kino / riff.cc
index 46d7866..44a082c 100644 (file)
@@ -21,6 +21,9 @@
 * 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
 *
@@ -79,7 +82,9 @@
 //#include <stdio.h>
 #include <iostream>
 #include <iomanip>
+#ifndef __FreeBSD__
 #include <byteswap.h>
+#endif /* __FreeBSD__ */
 
 using std::cout;
 using std::hex;
@@ -110,7 +115,7 @@ using std::endl;
     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;
@@ -510,10 +515,10 @@ void RIFFFile::ParseChunk( int parent )
 
        /* 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 );
        }
@@ -622,7 +627,7 @@ void RIFFFile::ReadChunk( int chunk_index, void *data, off_t data_len )
        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, data_len ) );
+       fail_neg( read( fd, data, entry.length > data_len ? data_len : entry.length ) );
        pthread_mutex_unlock( &file_mutex );
 }