diff --git a/lib/driver/MSWindows/win32.c b/lib/driver/MSWindows/win32.c index 0d149319..461ab2c8 100644 --- a/lib/driver/MSWindows/win32.c +++ b/lib/driver/MSWindows/win32.c @@ -1,5 +1,5 @@ /* - $Id: win32.c,v 1.17 2005/02/07 03:36:02 rocky Exp $ + $Id: win32.c,v 1.18 2005/02/11 01:34:12 rocky Exp $ Copyright (C) 2003, 2004, 2005 Rocky Bernstein @@ -26,7 +26,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: win32.c,v 1.17 2005/02/07 03:36:02 rocky Exp $"; +static const char _rcsid[] = "$Id: win32.c,v 1.18 2005/02/11 01:34:12 rocky Exp $"; #include #include @@ -186,9 +186,10 @@ run_mmc_cmd_win32( void *p_user_data, unsigned int i_timeout_ms, Initialize CD device. */ static bool -_cdio_init_win32 (void *user_data) +_init_win32 (void *user_data) { _img_private_t *p_env = user_data; + bool b_ret; if (p_env->gen.init) { cdio_error ("init called more than once"); return false; @@ -208,10 +209,18 @@ _cdio_init_win32 (void *user_data) p_env->b_ioctl_init = false; if ( _AM_IOCTL == p_env->access_mode ) { - return init_win32ioctl(p_env); + b_ret = init_win32ioctl(p_env); } else { - return init_aspi(p_env); + b_ret = init_aspi(p_env); } + + /* It looks like get_media_changed_mmc will always + return 1 (media changed) on the first call. So + we call it here to clear that flag. We may have + to rethink this if there's a problem doing this + extra work down the line. */ + get_media_changed_mmc(p_user_data); + return b_ret; } /*! @@ -795,7 +804,7 @@ cdio_open_am_win32 (const char *psz_orig_source, const char *psz_access_mode) ret = cdio_new ((void *)_data, &_funcs); if (ret == NULL) return NULL; - if (_cdio_init_win32(_data)) + if (_init_win32(_data)) return ret; else { _free_win32 (_data); diff --git a/lib/driver/image/bincue.c b/lib/driver/image/bincue.c index 99395f71..d3485192 100644 --- a/lib/driver/image/bincue.c +++ b/lib/driver/image/bincue.c @@ -1,5 +1,5 @@ /* - $Id: bincue.c,v 1.12 2005/02/06 11:13:37 rocky Exp $ + $Id: bincue.c,v 1.13 2005/02/11 01:34:12 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.12 2005/02/06 11:13:37 rocky Exp $"; +static const char _rcsid[] = "$Id: bincue.c,v 1.13 2005/02/11 01:34:12 rocky Exp $"; #include "image.h" #include "cdio_assert.h" @@ -1163,6 +1163,7 @@ cdio_open_cue (const char *psz_cue_name) _funcs.read_mode1_sectors = _read_mode1_sectors_bincue; _funcs.read_mode2_sector = _read_mode2_sector_bincue; _funcs.read_mode2_sectors = _read_mode2_sectors_bincue; + _funcs.run_mmc_cmd = NULL; _funcs.set_arg = _set_arg_image; if (NULL == psz_cue_name) return NULL; diff --git a/lib/driver/image/cdrdao.c b/lib/driver/image/cdrdao.c index 888421e4..51f736e2 100644 --- a/lib/driver/image/cdrdao.c +++ b/lib/driver/image/cdrdao.c @@ -1,5 +1,5 @@ /* - $Id: cdrdao.c,v 1.13 2005/02/06 11:13:37 rocky Exp $ + $Id: cdrdao.c,v 1.14 2005/02/11 01:34:12 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.13 2005/02/06 11:13:37 rocky Exp $"; +static const char _rcsid[] = "$Id: cdrdao.c,v 1.14 2005/02/11 01:34:12 rocky Exp $"; #include "image.h" #include "cdio_assert.h" @@ -1290,6 +1290,7 @@ cdio_open_cdrdao (const char *psz_cue_name) _funcs.read_mode1_sectors = _read_mode1_sectors_cdrdao; _funcs.read_mode2_sector = _read_mode2_sector_cdrdao; _funcs.read_mode2_sectors = _read_mode2_sectors_cdrdao; + _funcs.run_mmc_cmd = NULL; _funcs.set_arg = _set_arg_image; _funcs.set_speed = cdio_generic_unimplemented_set_speed; _funcs.set_blocksize = cdio_generic_unimplemented_set_blocksize; diff --git a/lib/driver/image/nrg.c b/lib/driver/image/nrg.c index de902a75..3d5d42c5 100644 --- a/lib/driver/image/nrg.c +++ b/lib/driver/image/nrg.c @@ -1,5 +1,5 @@ /* - $Id: nrg.c,v 1.12 2005/02/09 09:55:38 rocky Exp $ + $Id: nrg.c,v 1.13 2005/02/11 01:34:12 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.12 2005/02/09 09:55:38 rocky Exp $"; +static const char _rcsid[] = "$Id: nrg.c,v 1.13 2005/02/11 01:34:12 rocky Exp $"; /* reader */ @@ -1243,6 +1243,7 @@ cdio_open_nrg (const char *psz_source) _funcs.read_mode1_sectors = _read_mode1_sectors_nrg; _funcs.read_mode2_sector = _read_mode2_sector_nrg; _funcs.read_mode2_sectors = _read_mode2_sectors_nrg; + _funcs.run_mmc_cmd = NULL; _funcs.set_arg = _set_arg_image; _data = calloc(1, sizeof (_img_private_t)); diff --git a/lib/driver/image_common.c b/lib/driver/image_common.c index 664e97f2..31414650 100644 --- a/lib/driver/image_common.c +++ b/lib/driver/image_common.c @@ -1,5 +1,5 @@ /* - $Id: image_common.c,v 1.9 2005/02/06 11:32:22 rocky Exp $ + $Id: image_common.c,v 1.10 2005/02/11 01:34:12 rocky Exp $ Copyright (C) 2004, 2005 Rocky Bernstein @@ -151,12 +151,13 @@ _get_first_track_num_image(void *p_user_data) @param p_user_data the CD object to be acted upon. @return 1 if media has changed since last call, 0 if not. Error return codes are the same as driver_return_code_t - We always return DRIVER_OP_UNSUPPORTED. + There is no such thing as changing a media image so we will + always return 0 - no change. */ int get_media_changed_image(const void *p_user_data) { - return DRIVER_OP_UNSUPPORTED; + return 0; } /*! diff --git a/lib/driver/mmc.c b/lib/driver/mmc.c index 3ff719f9..7e912bd0 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.9 2005/02/10 11:23:08 rocky Exp $ + $Id: mmc.c,v 1.10 2005/02/11 01:34:12 rocky Exp $ Copyright (C) 2004, 2005 Rocky Bernstein @@ -90,6 +90,11 @@ get_drive_cap_mmc (const void *p_user_data, p_read_cap, p_write_cap, p_misc_cap ); } +/*! Find out if media has changed since the last call. @param + p_user_data the environment of the CD object to be acted upon. + @return 1 if media has changed since last call, 0 if not. Error + return codes are the same as driver_return_code_t + */ int get_media_changed_mmc (const void *p_user_data) { @@ -259,11 +264,12 @@ int mmc_mode_sense( CdIo_t *p_cdio, /*out*/ void *p_buf, int i_size, int page) { - if ( cdio_have_atapi(p_cdio) ) { + bool_3way_t e_status = cdio_have_atapi(p_cdio); + if ( yep == e_status ) { if ( DRIVER_OP_SUCCESS == mmc_mode_sense_6(p_cdio, p_buf, i_size, page) ) return DRIVER_OP_SUCCESS; return mmc_mode_sense_10(p_cdio, p_buf, i_size, page); - } + } if ( DRIVER_OP_SUCCESS == mmc_mode_sense_10(p_cdio, p_buf, i_size, page) ) return DRIVER_OP_SUCCESS; return mmc_mode_sense_6(p_cdio, p_buf, i_size, page); @@ -668,7 +674,7 @@ int mmc_get_media_changed(const CdIo_t *p_cdio) CDIO_MMC_SET_COMMAND(cdb.field, CDIO_MMC_GPCMD_GET_EVENT_STATUS); cdb.field[1] = 1; /* We poll for info */ - cdb.field[4] = 1 << 4; /* Media */ + cdb.field[4] = 1 << 4; /* We want Media events */ /* Setup to read header, to get length of data */ CDIO_MMC_SET_READ_LENGTH16(cdb.field, sizeof(buf)); @@ -951,6 +957,8 @@ mmc_have_interface( CdIo_t *p_cdio, mmc_feature_interface_t e_interface ) uint8_t buf[500] = { 0, }; /* Place to hold returned data */ scsi_mmc_cdb_t cdb = {{0, }}; /* Command Descriptor Buffer */ + if (!p_cdio || !p_cdio->op.run_mmc_cmd) return nope; + CDIO_MMC_SET_COMMAND(cdb.field, CDIO_MMC_GPCMD_GET_CONFIGURATION); CDIO_MMC_SET_READ_LENGTH8(cdb.field, sizeof(buf)); cdb.field[1] = CDIO_MMC_GET_CONF_NAMED_FEATURE; diff --git a/test/check_paranoia.sh.in b/test/check_paranoia.sh.in index f10e5ae1..848c40a1 100644 --- a/test/check_paranoia.sh.in +++ b/test/check_paranoia.sh.in @@ -1,9 +1,12 @@ #!/bin/sh -# $Id: check_paranoia.sh.in,v 1.6 2005/01/22 19:39:16 rocky Exp $ +# $Id: check_paranoia.sh.in,v 1.7 2005/02/11 01:34:12 rocky Exp $ # Compare our cd-paranoia with an installed cdparanoia if test "@CMP@" != no -a "@BUILD_CD_PARANOIA_TRUE@"X = X ; then ../src/cd-paranoia/cd-paranoia -d ./cdda.cue -v -r -- "1-" + if test $? -ne 0 ; then + exit 6 + fi dd bs=16 skip=17 if=./cdda.raw of=./cdda-1.raw dd bs=16 if=./cdda.bin of=cdda-2.raw count=44377 if @CMP@ ./cdda-1.raw ./cdda-2.raw ; then @@ -16,6 +19,9 @@ if test "@CMP@" != no -a "@BUILD_CD_PARANOIA_TRUE@"X = X ; then ../src/cd-paranoia/cd-paranoia -d ./cdda.cue -x 64 -v -r -- "1-" mv cdda.raw cdda-underrun.raw ../src/cd-paranoia/cd-paranoia -d ./cdda.cue -r -- "1-" + if test $? -ne 0 ; then + exit 6 + fi if @CMP@ ./cdda-underrun.raw ./cdda-good.raw ; then echo "** Under-run correction okay" else @@ -24,6 +30,9 @@ if test "@CMP@" != no -a "@BUILD_CD_PARANOIA_TRUE@"X = X ; then fi # Start out with small jitter ../src/cd-paranoia/cd-paranoia -d ./cdda.cue -x 5 -v -r -- "1-" + if test $? -ne 0 ; then + exit 6 + fi mv cdda.raw cdda-jitter.raw if @CMP@ ./cdda-jitter.raw ./cdda-good.raw ; then echo "** Small jitter correction okay" @@ -33,6 +42,9 @@ if test "@CMP@" != no -a "@BUILD_CD_PARANOIA_TRUE@"X = X ; then fi # A more massive set of failures: underrun + medium jitter ../src/cd-paranoia/cd-paranoia -d ./cdda.cue -x 70 -v -r -- "1-" + if test $? -ne 0 ; then + exit 6 + fi mv cdda.raw cdda-jitter.raw if @CMP@ ./cdda-jitter.raw ./cdda-good.raw ; then echo "** under-run + jitter correction okay"