|
Lines 1017-1022
int32_t DVDFileSeek( dvd_file_t *dvd_fi
Link Here
|
| 1017 |
return offset; |
1017 |
return offset; |
| 1018 |
} |
1018 |
} |
| 1019 |
|
1019 |
|
|
|
1020 |
int32_t DVDFileSeekForce( dvd_file_t *dvd_file, int offset, int force_size ) |
| 1021 |
{ |
| 1022 |
/* Check arguments. */ |
| 1023 |
if( dvd_file == NULL || offset < 0 ) |
| 1024 |
return -1; |
| 1025 |
|
| 1026 |
if( dvd_file->dvd->isImageFile ) { |
| 1027 |
if( force_size < 0 ) |
| 1028 |
force_size = (offset - 1) / DVD_VIDEO_LB_LEN + 1; |
| 1029 |
if( dvd_file->filesize < force_size ) { |
| 1030 |
dvd_file->filesize = force_size; |
| 1031 |
fprintf(stderr, "libdvdread: Ignored UDF provided size of file.\n"); |
| 1032 |
} |
| 1033 |
} |
| 1034 |
|
| 1035 |
if( offset > dvd_file->filesize * DVD_VIDEO_LB_LEN ) { |
| 1036 |
return -1; |
| 1037 |
} |
| 1038 |
dvd_file->seek_pos = (uint32_t) offset; |
| 1039 |
return offset; |
| 1040 |
} |
| 1041 |
|
| 1020 |
ssize_t DVDReadBytes( dvd_file_t *dvd_file, void *data, size_t byte_size ) |
1042 |
ssize_t DVDReadBytes( dvd_file_t *dvd_file, void *data, size_t byte_size ) |
| 1021 |
{ |
1043 |
{ |
| 1022 |
unsigned char *secbuf_base, *secbuf; |
1044 |
unsigned char *secbuf_base, *secbuf; |
|
Lines 1057-1063
ssize_t DVDReadBytes( dvd_file_t *dvd_fi
Link Here
|
| 1057 |
memcpy( data, &(secbuf[ seek_byte ]), byte_size ); |
1057 |
memcpy( data, &(secbuf[ seek_byte ]), byte_size ); |
| 1058 |
free( secbuf_base ); |
1058 |
free( secbuf_base ); |
| 1059 |
dvd_file->seek_pos += byte_size; |
1059 |
DVDFileSeekForce(dvd_file, dvd_file->seek_pos + byte_size, -1); |
| 1060 |
return byte_size; |
1060 |
return byte_size; |
| 1061 |
} |
1061 |
} |