diff --git a/include/cdio/mmc.h b/include/cdio/mmc.h index 07639f19..059a077f 100644 --- a/include/cdio/mmc.h +++ b/include/cdio/mmc.h @@ -1,5 +1,5 @@ /* - $Id: mmc.h,v 1.10 2005/02/17 04:57:21 rocky Exp $ + $Id: mmc.h,v 1.11 2005/02/17 07:03:36 rocky Exp $ Copyright (C) 2003, 2004, 2005 Rocky Bernstein @@ -610,11 +610,13 @@ mmc_read_cd ( const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn, M2RAW_SECTOR_SIZE. @param i_lsn sector to read + @param i_blocksize */ -driver_return_code_t mmc_read_data_sector ( CdIo_t *p_cdio, void *p_buf, - lsn_t i_lsn, - uint16_t i_blocksize ); +driver_return_code_t mmc_read_data_sectors ( CdIo_t *p_cdio, void *p_buf, + lsn_t i_lsn, + uint16_t i_blocksize, + uint32_t i_blocks ); /*! issue a MMC read mode2 sectors. - depricated. */ diff --git a/include/cdio/read.h b/include/cdio/read.h index 59f0d9cd..6900c435 100644 --- a/include/cdio/read.h +++ b/include/cdio/read.h @@ -1,5 +1,5 @@ /* -*- c -*- - $Id: read.h,v 1.4 2005/02/17 04:57:21 rocky Exp $ + $Id: read.h,v 1.5 2005/02/17 07:03:37 rocky Exp $ Copyright (C) 2005 Rocky Bernstein @@ -98,10 +98,10 @@ extern "C" { @param i_blocksize size of block. Should be either CDIO_CD_FRAMESIZE, M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE. See comment above under p_buf. */ - driver_return_code_t cdio_read_data_sector (const CdIo_t *p_cdio, - void *p_buf, lsn_t i_lsn, - uint16_t i_blocksize - ); + driver_return_code_t cdio_read_data_sectors ( const CdIo_t *p_cdio, + void *p_buf, lsn_t i_lsn, + uint16_t i_blocksize, + uint32_t i_blocks ); /*! Reads a mode 1 sector diff --git a/lib/driver/_cdio_linux.c b/lib/driver/_cdio_linux.c index 2637cf47..d95d3aab 100644 --- a/lib/driver/_cdio_linux.c +++ b/lib/driver/_cdio_linux.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_linux.c,v 1.25 2005/02/17 04:57:21 rocky Exp $ + $Id: _cdio_linux.c,v 1.26 2005/02/17 07:03:37 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002, 2003, 2004, 2005 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.25 2005/02/17 04:57:21 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.26 2005/02/17 07:03:37 rocky Exp $"; #include @@ -1189,7 +1189,7 @@ cdio_open_am_linux (const char *psz_orig_source, const char *access_mode) .lseek = cdio_generic_lseek, .read = cdio_generic_read, .read_audio_sectors = _read_audio_sectors_linux, - .read_data_sector = read_data_sector_mmc, + .read_data_sectors = read_data_sectors_mmc, .read_mode1_sector = _read_mode1_sector_linux, .read_mode1_sectors = _read_mode1_sectors_linux, .read_mode2_sector = _read_mode2_sector_linux, diff --git a/lib/driver/cdio_private.h b/lib/driver/cdio_private.h index 0cd5e50c..bc0d540c 100644 --- a/lib/driver/cdio_private.h +++ b/lib/driver/cdio_private.h @@ -1,5 +1,5 @@ /* - $Id: cdio_private.h,v 1.15 2005/02/17 04:57:21 rocky Exp $ + $Id: cdio_private.h,v 1.16 2005/02/17 07:03:37 rocky Exp $ Copyright (C) 2003, 2004, 2005 Rocky Bernstein @@ -254,9 +254,10 @@ extern "C" { @param i_blocksize size of block. Should be either CDIO_CD_FRAMESIZE, M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE. See comment above under p_buf. */ - driver_return_code_t (*read_data_sector) (void *p_env, void *p_buf, - lsn_t i_lsn, - uint16_t i_blocksize); + driver_return_code_t (*read_data_sectors) (void *p_env, void *p_buf, + lsn_t i_lsn, + uint16_t i_blocksize, + uint32_t i_blocks); /*! Reads a single mode2 sector from cd device into buf starting diff --git a/lib/driver/image/bincue.c b/lib/driver/image/bincue.c index c26dbb4c..13300a04 100644 --- a/lib/driver/image/bincue.c +++ b/lib/driver/image/bincue.c @@ -1,5 +1,5 @@ /* - $Id: bincue.c,v 1.14 2005/02/17 04:57:21 rocky Exp $ + $Id: bincue.c,v 1.15 2005/02/17 07:03:37 rocky Exp $ Copyright (C) 2002, 2003, 2004, 2005 Rocky Bernstein Copyright (C) 2001 Herbert Valerio Riedel @@ -26,7 +26,7 @@ (*.cue). */ -static const char _rcsid[] = "$Id: bincue.c,v 1.14 2005/02/17 04:57:21 rocky Exp $"; +static const char _rcsid[] = "$Id: bincue.c,v 1.15 2005/02/17 07:03:37 rocky Exp $"; #include "image.h" #include "cdio_assert.h" @@ -1159,7 +1159,7 @@ cdio_open_cue (const char *psz_cue_name) _funcs.lseek = _lseek_bincue; _funcs.read = _read_bincue; _funcs.read_audio_sectors = _read_audio_sectors_bincue; - _funcs.read_data_sector = read_data_sector_image; + _funcs.read_data_sectors = read_data_sectors_image; _funcs.read_mode1_sector = _read_mode1_sector_bincue; _funcs.read_mode1_sectors = _read_mode1_sectors_bincue; _funcs.read_mode2_sector = _read_mode2_sector_bincue; diff --git a/lib/driver/image/cdrdao.c b/lib/driver/image/cdrdao.c index ac3ea27c..5ada9b37 100644 --- a/lib/driver/image/cdrdao.c +++ b/lib/driver/image/cdrdao.c @@ -1,5 +1,5 @@ /* - $Id: cdrdao.c,v 1.15 2005/02/17 04:57:21 rocky Exp $ + $Id: cdrdao.c,v 1.16 2005/02/17 07:03:37 rocky Exp $ Copyright (C) 2004, 2005 Rocky Bernstein toc reading routine adapted from cuetools @@ -25,7 +25,7 @@ (*.cue). */ -static const char _rcsid[] = "$Id: cdrdao.c,v 1.15 2005/02/17 04:57:21 rocky Exp $"; +static const char _rcsid[] = "$Id: cdrdao.c,v 1.16 2005/02/17 07:03:37 rocky Exp $"; #include "image.h" #include "cdio_assert.h" @@ -1286,7 +1286,7 @@ cdio_open_cdrdao (const char *psz_cue_name) _funcs.lseek = _lseek_cdrdao; _funcs.read = _read_cdrdao; _funcs.read_audio_sectors = _read_audio_sectors_cdrdao; - _funcs.read_data_sector = read_data_sector_image; + _funcs.read_data_sectors = read_data_sectors_image; _funcs.read_mode1_sector = _read_mode1_sector_cdrdao; _funcs.read_mode1_sectors = _read_mode1_sectors_cdrdao; _funcs.read_mode2_sector = _read_mode2_sector_cdrdao; diff --git a/lib/driver/image/nrg.c b/lib/driver/image/nrg.c index c6d433a5..da42c4b2 100644 --- a/lib/driver/image/nrg.c +++ b/lib/driver/image/nrg.c @@ -1,5 +1,5 @@ /* - $Id: nrg.c,v 1.14 2005/02/17 04:57:21 rocky Exp $ + $Id: nrg.c,v 1.15 2005/02/17 07:03:37 rocky Exp $ Copyright (C) 2003, 2004, 2005 Rocky Bernstein Copyright (C) 2001, 2003 Herbert Valerio Riedel @@ -46,7 +46,7 @@ #include "_cdio_stdio.h" #include "nrg.h" -static const char _rcsid[] = "$Id: nrg.c,v 1.14 2005/02/17 04:57:21 rocky Exp $"; +static const char _rcsid[] = "$Id: nrg.c,v 1.15 2005/02/17 07:03:37 rocky Exp $"; /* reader */ @@ -1239,7 +1239,7 @@ cdio_open_nrg (const char *psz_source) _funcs.lseek = _lseek_nrg; _funcs.read = _read_nrg; _funcs.read_audio_sectors = _read_audio_sectors_nrg; - _funcs.read_data_sector = read_data_sector_image; + _funcs.read_data_sectors = read_data_sectors_image; _funcs.read_mode1_sector = _read_mode1_sector_nrg; _funcs.read_mode1_sectors = _read_mode1_sectors_nrg; _funcs.read_mode2_sector = _read_mode2_sector_nrg; diff --git a/lib/driver/image_common.c b/lib/driver/image_common.c index 1a251642..6321aac9 100644 --- a/lib/driver/image_common.c +++ b/lib/driver/image_common.c @@ -1,5 +1,5 @@ /* - $Id: image_common.c,v 1.11 2005/02/17 04:57:21 rocky Exp $ + $Id: image_common.c,v 1.12 2005/02/17 07:03:37 rocky Exp $ Copyright (C) 2004, 2005 Rocky Bernstein @@ -264,8 +264,9 @@ get_track_preemphasis_image(const void *p_user_data, track_t i_track) p_buf. */ driver_return_code_t -read_data_sector_image ( void *p_user_data, void *p_buf, - lsn_t i_lsn, uint16_t i_blocksize ) +read_data_sectors_image ( void *p_user_data, void *p_buf, + lsn_t i_lsn, uint16_t i_blocksize, + uint32_t i_blocks ) { const _img_private_t *p_env = p_user_data; @@ -281,11 +282,11 @@ read_data_sector_image ( void *p_user_data, void *p_buf, case TRACK_FORMAT_AUDIO: case TRACK_FORMAT_ERROR: return DRIVER_OP_ERROR; - case TRACK_FORMAT_CDI: case TRACK_FORMAT_DATA: - return cdio_read_mode1_sector (p_cdio, p_buf, i_lsn, false); + return cdio_read_mode1_sectors (p_cdio, p_buf, i_lsn, false, i_blocks); + case TRACK_FORMAT_CDI: case TRACK_FORMAT_XA: - return cdio_read_mode2_sector (p_cdio, p_buf, i_lsn, false); + return cdio_read_mode2_sectors (p_cdio, p_buf, i_lsn, false, i_blocks); } } return DRIVER_OP_ERROR; diff --git a/lib/driver/image_common.h b/lib/driver/image_common.h index 106790a2..b5011140 100644 --- a/lib/driver/image_common.h +++ b/lib/driver/image_common.h @@ -1,5 +1,5 @@ /* - $Id: image_common.h,v 1.9 2005/02/17 04:57:21 rocky Exp $ + $Id: image_common.h,v 1.10 2005/02/17 07:03:37 rocky Exp $ Copyright (C) 2004, 2005 Rocky Bernstein @@ -166,10 +166,14 @@ track_flag_t get_track_preemphasis_image(const void *p_user_data, @param i_blocksize size of block. Should be either ISO_BLOCKSIZE M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE. See comment above under p_buf. + + @param i_blocks number of blocks to read. + */ driver_return_code_t -read_data_sector_image ( void *p_user_data, void *p_buf, - lsn_t i_lsn, uint16_t i_blocksize ); +read_data_sectors_image ( void *p_user_data, void *p_buf, + lsn_t i_lsn, uint16_t i_blocksize, + uint32_t i_blocks ); /*! Set the arg "key" with "value" in the source device. diff --git a/lib/driver/libcdio.sym b/lib/driver/libcdio.sym index 251e6014..663a805c 100644 --- a/lib/driver/libcdio.sym +++ b/lib/driver/libcdio.sym @@ -165,6 +165,7 @@ mmc_mode_sense mmc_mode_sense_10 mmc_mode_sense_6 mmc_read_cd +mmc_read_data_sectors mmc_read_sectors mmc_run_cmd mmc_set_blocksize diff --git a/lib/driver/mmc.c b/lib/driver/mmc.c index 6aedca74..6e1641e4 100644 --- a/lib/driver/mmc.c +++ b/lib/driver/mmc.c @@ -1,6 +1,6 @@ /* Common Multimedia Command (MMC) routines. - $Id: mmc.c,v 1.13 2005/02/17 04:57:21 rocky Exp $ + $Id: mmc.c,v 1.14 2005/02/17 07:03:37 rocky Exp $ Copyright (C) 2004, 2005 Rocky Bernstein @@ -113,11 +113,13 @@ get_mcn_mmc (const void *p_user_data) Can read only up to 25 blocks. */ driver_return_code_t -read_data_sector_mmc ( void *p_user_data, void *p_buf, - lba_t i_lba, uint16_t i_blocksize ) +read_data_sectors_mmc ( void *p_user_data, void *p_buf, + lsn_t i_lsn, uint16_t i_blocksize, + uint32_t i_blocks ) { const generic_img_private_t *p_env = p_user_data; - return mmc_read_data_sector( p_env->cdio, p_buf, i_lba, i_blocksize ); + return mmc_read_data_sectors( p_env->cdio, p_buf, i_lsn, i_blocksize, + i_blocks ); } /* Set read blocksize (via MMC) */ @@ -1051,8 +1053,9 @@ mmc_read_cd ( const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn, /*! Read sectors using SCSI-MMC GPCMD_READ_CD. */ driver_return_code_t -mmc_read_data_sector ( CdIo_t *p_cdio, void *p_buf, - lsn_t i_lsn, uint16_t i_blocksize ) +mmc_read_data_sectors ( CdIo_t *p_cdio, void *p_buf, + lsn_t i_lsn, uint16_t i_blocksize, + uint32_t i_blocks ) { return mmc_read_cd(p_cdio, p_buf, /* place to store data */ @@ -1066,7 +1069,7 @@ mmc_read_data_sector ( CdIo_t *p_cdio, void *p_buf, false, /* return C2 Error information */ 0, /* suchannel selection bits */ ISO_BLOCKSIZE, /* blocksize*/ - 1 /* Number of blocks. */); + i_blocks /* Number of blocks. */); } diff --git a/lib/driver/mmc_private.h b/lib/driver/mmc_private.h index 29be6517..b9642c2e 100644 --- a/lib/driver/mmc_private.h +++ b/lib/driver/mmc_private.h @@ -1,6 +1,6 @@ /* private MMC helper routines. - $Id: mmc_private.h,v 1.5 2005/02/17 04:57:21 rocky Exp $ + $Id: mmc_private.h,v 1.6 2005/02/17 07:03:37 rocky Exp $ Copyright (C) 2004, 2005 Rocky Bernstein @@ -77,9 +77,10 @@ char *get_mcn_mmc (const void *p_user_data); M2RAW_SECTOR_SIZE, or M2F2_SECTOR_SIZE. See comment above under p_buf. */ -driver_return_code_t read_data_sector_mmc ( void *p_user_data, - void *p_buf, lsn_t i_lsn, - uint16_t i_blocksize ); +driver_return_code_t read_data_sectors_mmc ( void *p_user_data, + void *p_buf, lsn_t i_lsn, + uint16_t i_blocksize, + uint32_t i_blocks ); char *get_mcn_mmc (const void *p_user_data); /* Set read blocksize (via MMC) */ diff --git a/lib/driver/read.c b/lib/driver/read.c index 8641bd2c..5ad26f9b 100644 --- a/lib/driver/read.c +++ b/lib/driver/read.c @@ -1,5 +1,5 @@ /* - $Id: read.c,v 1.5 2005/02/17 04:57:21 rocky Exp $ + $Id: read.c,v 1.6 2005/02/17 07:03:37 rocky Exp $ Copyright (C) 2005 Rocky Bernstein @@ -126,18 +126,19 @@ cdio_read_audio_sectors (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn, return p_cdio->op.read_audio_sectors (p_cdio->env, p_buf, i_lsn, i_blocks); return DRIVER_OP_UNSUPPORTED; } + /*! Reads an audio sector from cd device into data starting from lsn. Returns DRIVER_OP_SUCCESS if no error. */ driver_return_code_t -cdio_read_data_sector (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn, - uint16_t i_blocksize) +cdio_read_data_sectors (const CdIo_t *p_cdio, void *p_buf, lsn_t i_lsn, + uint16_t i_blocksize, uint32_t i_blocks) { check_lsn(i_lsn); - if (p_cdio->op.read_data_sector) - return p_cdio->op.read_data_sector (p_cdio->env, p_buf, i_lsn, - i_blocksize); + if (p_cdio->op.read_data_sectors) + return p_cdio->op.read_data_sectors (p_cdio->env, p_buf, i_lsn, + i_blocksize, i_blocks); return DRIVER_OP_UNSUPPORTED; } diff --git a/lib/iso9660/iso9660_fs.c b/lib/iso9660/iso9660_fs.c index c659251a..b907938c 100644 --- a/lib/iso9660/iso9660_fs.c +++ b/lib/iso9660/iso9660_fs.c @@ -1,5 +1,5 @@ /* - $Id: iso9660_fs.c,v 1.15 2005/02/17 04:57:21 rocky Exp $ + $Id: iso9660_fs.c,v 1.16 2005/02/17 07:03:37 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2003, 2004, 2005 Rocky Bernstein @@ -52,7 +52,7 @@ #include -static const char _rcsid[] = "$Id: iso9660_fs.c,v 1.15 2005/02/17 04:57:21 rocky Exp $"; +static const char _rcsid[] = "$Id: iso9660_fs.c,v 1.16 2005/02/17 07:03:37 rocky Exp $"; /* Implementation of iso9660_t type */ struct _iso9660_s { @@ -674,7 +674,7 @@ iso9660_fs_read_pvd(const CdIo_t *p_cdio, /*out*/ iso9660_pvd_t *p_pvd) /* A bit of a hack, we'll assume track 1 contains ISO_PVD_SECTOR.*/ char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, }; driver_return_code_t driver_return = - cdio_read_data_sector (p_cdio, buf, ISO_PVD_SECTOR, ISO_BLOCKSIZE); + cdio_read_data_sectors (p_cdio, buf, ISO_PVD_SECTOR, ISO_BLOCKSIZE, 1); if (DRIVER_OP_SUCCESS != driver_return) { cdio_warn ("error reading PVD sector (%d) error %d", ISO_PVD_SECTOR, @@ -709,8 +709,7 @@ iso9660_fs_read_superblock (CdIo_t *p_cdio, iso9660_pvd_t *p_pvd = &(p_env->pvd); iso9660_svd_t *p_svd = &(p_env->svd); char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, }; - driver_return_code_t driver_return = - cdio_read_data_sector (p_cdio, buf, ISO_PVD_SECTOR, ISO_BLOCKSIZE); + driver_return_code_t driver_return; if ( !iso9660_fs_read_pvd(p_cdio, p_pvd) ) return false; @@ -718,7 +717,8 @@ iso9660_fs_read_superblock (CdIo_t *p_cdio, p_env->i_joliet_level = 0; driver_return = - cdio_read_data_sector (p_cdio, buf, ISO_PVD_SECTOR+1, ISO_BLOCKSIZE); + cdio_read_data_sectors ( p_cdio, buf, ISO_PVD_SECTOR+1, ISO_BLOCKSIZE, + 1 ); if (DRIVER_OP_SUCCESS == driver_return) { /* The size of a PVD or SVD is smaller than a sector. So we @@ -1340,15 +1340,9 @@ iso9660_fs_readdir (CdIo_t *p_cdio, const char psz_path[], bool b_mode2) _dirbuf = calloc(1, p_stat->secsize * ISO_BLOCKSIZE); - if (b_mode2) { - if (cdio_read_mode2_sectors (p_cdio, _dirbuf, p_stat->lsn, false, - p_stat->secsize)) + if (cdio_read_data_sectors (p_cdio, _dirbuf, p_stat->lsn, false, + p_stat->secsize)) cdio_assert_not_reached (); - } else { - if (cdio_read_mode1_sectors (p_cdio, _dirbuf, p_stat->lsn, false, - p_stat->secsize)) - cdio_assert_not_reached (); - } while (offset < (p_stat->secsize * ISO_BLOCKSIZE)) {