From bdfcf94f2e839d3e87dc35e00495ffa573253c12 Mon Sep 17 00:00:00 2001 From: Michael Roitzsch Date: Mon, 19 Aug 2002 17:21:00 +0000 Subject: align reads in memory to allow use of raw devices CVS patchset: 2484 CVS date: 2002/08/19 17:21:00 --- src/input/libdvdread/dvd_reader.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/input/libdvdread/dvd_reader.c') diff --git a/src/input/libdvdread/dvd_reader.c b/src/input/libdvdread/dvd_reader.c index b296a49de..0ec6fb24d 100644 --- a/src/input/libdvdread/dvd_reader.c +++ b/src/input/libdvdread/dvd_reader.c @@ -857,7 +857,7 @@ int32_t DVDFileSeek( dvd_file_t *dvd_file, int32_t offset ) ssize_t DVDReadBytes( dvd_file_t *dvd_file, void *data, size_t byte_size ) { - unsigned char *secbuf; + unsigned char *secbuf_base, *secbuf; unsigned int numsec, seek_sector, seek_byte; int ret; @@ -865,7 +865,8 @@ ssize_t DVDReadBytes( dvd_file_t *dvd_file, void *data, size_t byte_size ) seek_byte = dvd_file->seek_pos % DVD_VIDEO_LB_LEN; numsec = ( ( seek_byte + byte_size ) / DVD_VIDEO_LB_LEN ) + 1; - secbuf = (unsigned char *) malloc( numsec * DVD_VIDEO_LB_LEN ); + secbuf_base = (unsigned char *) malloc( numsec * DVD_VIDEO_LB_LEN + 2048 ); + secbuf = (unsigned char *)(((int)secbuf_base & ~2047) + 2048); if( !secbuf ) { fprintf( stderr, "libdvdread: Can't allocate memory " "for file read!\n" ); @@ -881,12 +882,12 @@ ssize_t DVDReadBytes( dvd_file_t *dvd_file, void *data, size_t byte_size ) } if( ret != (int) numsec ) { - free( secbuf ); + free( secbuf_base ); return ret < 0 ? ret : 0; } memcpy( data, &(secbuf[ seek_byte ]), byte_size ); - free( secbuf ); + free( secbuf_base ); dvd_file->seek_pos += byte_size; return byte_size; -- cgit v1.2.3