diff --git a/lib/FreeBSD/freebsd.c b/lib/FreeBSD/freebsd.c index bd8701b3..c6606d97 100644 --- a/lib/FreeBSD/freebsd.c +++ b/lib/FreeBSD/freebsd.c @@ -1,5 +1,5 @@ /* - $Id: freebsd.c,v 1.38 2004/08/07 10:20:40 rocky Exp $ + $Id: freebsd.c,v 1.39 2004/08/07 22:58:51 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: freebsd.c,v 1.38 2004/08/07 10:20:40 rocky Exp $"; +static const char _rcsid[] = "$Id: freebsd.c,v 1.39 2004/08/07 22:58:51 rocky Exp $"; #include "freebsd.h" @@ -577,6 +577,8 @@ cdio_open_am_freebsd (const char *psz_orig_source_name, _data->access_mode = str_to_access_mode_freebsd(psz_access_mode); _data->gen.init = false; _data->gen.fd = -1; + _data->gen.b_cdtext_init = false; + _data->gen.b_cdtext_error = false; if (NULL == psz_orig_source_name) { psz_source_name=cdio_get_default_device_freebsd(); diff --git a/lib/MSWindows/win32.c b/lib/MSWindows/win32.c index 4b8b3211..1065b904 100644 --- a/lib/MSWindows/win32.c +++ b/lib/MSWindows/win32.c @@ -1,5 +1,5 @@ /* - $Id: win32.c,v 1.38 2004/08/06 14:27:33 rocky Exp $ + $Id: win32.c,v 1.39 2004/08/07 22:58:51 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein @@ -26,7 +26,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: win32.c,v 1.38 2004/08/06 14:27:33 rocky Exp $"; +static const char _rcsid[] = "$Id: win32.c,v 1.39 2004/08/07 22:58:51 rocky Exp $"; #include #include @@ -187,6 +187,8 @@ _cdio_init_win32 (void *user_data) p_env->gen.init = true; p_env->gen.toc_init = false; + p_env->gen.b_cdtext_init = false; + p_env->gen.b_cdtext_error = false; /* Initializations */ p_env->h_device_handle = NULL; @@ -195,7 +197,6 @@ _cdio_init_win32 (void *user_data) p_env->lpSendCommand = 0; p_env->b_aspi_init = false; p_env->b_ioctl_init = false; - p_env->b_cdtext_init = false; if ( _AM_IOCTL == p_env->access_mode ) { return init_win32ioctl(p_env); @@ -504,26 +505,28 @@ set_cdtext_field_win32(void *user_data, track_t i_track, static const cdtext_t * _get_cdtext_win32 (void *user_data, track_t i_track) { - _img_private_t *env = user_data; + _img_private_t *p_env = user_data; - if (NULL == env) return NULL; + if (NULL == p_env) return NULL; - if ( NULL == env || + if ( NULL == p_env || (0 != i_track - && i_track >= env->gen.i_tracks + env->gen.i_first_track ) ) + && i_track >= p_env->gen.i_tracks + p_env->gen.i_first_track ) ) return NULL; - if (env->hASPI) { - env->b_cdtext_init = init_cdtext_aspi(env); - } else - env->b_cdtext_init = init_cdtext_win32ioctl(env); + if (!p_env->gen.b_cdtext_init) { + if (p_env->hASPI) { + p_env->b_cdtext_init = init_cdtext_aspi(p_env); + } else + p_env->b_cdtext_init = init_cdtext_win32ioctl(p_env); + } - if (!env->b_cdtext_init) return NULL; + if (!p_env->gen.b_cdtext_init) return NULL; if (0 == i_track) - return &(env->cdtext); + return &(p_env->cdtext); else - return &(env->tocent[i_track-env->gen.i_first_track].cdtext); + return &(p_env->tocent[i_track-env->gen.i_first_track].cdtext); return NULL; } diff --git a/lib/MSWindows/win32.h b/lib/MSWindows/win32.h index f7ac8fc7..a304174d 100644 --- a/lib/MSWindows/win32.h +++ b/lib/MSWindows/win32.h @@ -1,5 +1,5 @@ /* - $Id: win32.h,v 1.18 2004/07/29 04:14:44 rocky Exp $ + $Id: win32.h,v 1.19 2004/08/07 22:58:51 rocky Exp $ Copyright (C) 2004 Rocky Bernstein @@ -55,7 +55,6 @@ typedef struct { bool b_ioctl_init; bool b_aspi_init; - bool b_cdtext_init; } _img_private_t; diff --git a/lib/_cdio_bsdi.c b/lib/_cdio_bsdi.c index 23597f68..5be69eaa 100644 --- a/lib/_cdio_bsdi.c +++ b/lib/_cdio_bsdi.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_bsdi.c,v 1.35 2004/07/29 02:48:55 rocky Exp $ + $Id: _cdio_bsdi.c,v 1.36 2004/08/07 22:58:51 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002, 2003, 2004 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_bsdi.c,v 1.35 2004/07/29 02:48:55 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_bsdi.c,v 1.36 2004/08/07 22:58:51 rocky Exp $"; #include #include @@ -868,6 +868,8 @@ cdio_open_bsdi (const char *psz_orig_source) _data->access_mode = _AM_IOCTL; _data->gen.init = false; _data->gen.fd = -1; + _data->gen.b_cdtext_init = false; + _data->gen.b_cdtext_error = false; if (NULL == psz_orig_source) { psz_source=cdio_get_default_device_linux(); diff --git a/lib/_cdio_generic.c b/lib/_cdio_generic.c index 5e15e95f..43cb71b0 100644 --- a/lib/_cdio_generic.c +++ b/lib/_cdio_generic.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_generic.c,v 1.20 2004/07/29 02:16:20 rocky Exp $ + $Id: _cdio_generic.c,v 1.21 2004/08/07 22:58:51 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002, 2003, 2004 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_generic.c,v 1.20 2004/07/29 02:16:20 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_generic.c,v 1.21 2004/08/07 22:58:51 rocky Exp $"; #include #include @@ -84,22 +84,24 @@ cdio_generic_free (void *user_data) bool cdio_generic_init (void *user_data) { - generic_img_private_t *_env = user_data; - if (_env->init) { + generic_img_private_t *p_env = user_data; + if (p_env->init) { cdio_warn ("init called more than once"); return false; } - _env->fd = open (_env->source_name, O_RDONLY, 0); + p_env->fd = open (p_env->source_name, O_RDONLY, 0); - if (_env->fd < 0) + if (p_env->fd < 0) { - cdio_warn ("open (%s): %s", _env->source_name, strerror (errno)); + cdio_warn ("open (%s): %s", p_env->source_name, strerror (errno)); return false; } - _env->init = true; - _env->toc_init = false; + p_env->init = true; + p_env->toc_init = false; + p_env->b_cdtext_init = false; + p_env->b_cdtext_error = false; return true; } @@ -125,8 +127,8 @@ cdio_generic_read_form1_sector (void * user_data, void *data, lsn_t lsn) off_t cdio_generic_lseek (void *user_data, off_t offset, int whence) { - generic_img_private_t *_env = user_data; - return lseek(_env->fd, offset, whence); + generic_img_private_t *p_env = user_data; + return lseek(p_env->fd, offset, whence); } /*! @@ -137,8 +139,8 @@ cdio_generic_lseek (void *user_data, off_t offset, int whence) ssize_t cdio_generic_read (void *user_data, void *buf, size_t size) { - generic_img_private_t *_env = user_data; - return read(_env->fd, buf, size); + generic_img_private_t *p_env = user_data; + return read(p_env->fd, buf, size); } /*! @@ -147,14 +149,14 @@ cdio_generic_read (void *user_data, void *buf, size_t size) void cdio_generic_stdio_free (void *user_data) { - generic_img_private_t *_env = user_data; + generic_img_private_t *p_env = user_data; - if (NULL == _env) return; - if (NULL != _env->source_name) - free (_env->source_name); + if (NULL == p_env) return; + if (NULL != p_env->source_name) + free (p_env->source_name); - if (_env->data_source) - cdio_stdio_destroy (_env->data_source); + if (p_env->data_source) + cdio_stdio_destroy (p_env->data_source); } diff --git a/lib/_cdio_linux.c b/lib/_cdio_linux.c index b5e8b36c..b730f421 100644 --- a/lib/_cdio_linux.c +++ b/lib/_cdio_linux.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_linux.c,v 1.88 2004/08/05 03:58:46 rocky Exp $ + $Id: _cdio_linux.c,v 1.89 2004/08/07 22:58:51 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002, 2003, 2004 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.88 2004/08/05 03:58:46 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.89 2004/08/07 22:58:51 rocky Exp $"; #include @@ -88,8 +88,6 @@ typedef struct { cdtext_t cdtext; /* CD-TEXT */ access_mode_t access_mode; - bool b_cdtext_init; - bool b_cdtext_error; /* Some of the more OS specific things. */ cdtext_t cdtext_track[CDIO_CD_MAX_TRACKS+1]; /*CD-TEXT for each track*/ @@ -1002,11 +1000,12 @@ get_cdtext_linux (void *p_user_data, track_t i_track) if ( NULL == p_env || (0 != i_track - && i_track >= p_env->gen.i_tracks+p_env->gen.i_first_track ) ) + && i_track >= p_env->gen.i_tracks+p_env->gen.i_first_track ) ) return NULL; - p_env->b_cdtext_init = init_cdtext_linux(p_env); - if (!p_env->b_cdtext_init || p_env->b_cdtext_error) return NULL; + if (!p_env->gen.b_cdtext_init) + init_cdtext_linux(p_env); + if (!p_env->gen.b_cdtext_init) return NULL; if (0 == i_track) return &(p_env->cdtext); @@ -1197,8 +1196,8 @@ cdio_open_am_linux (const char *psz_orig_source, const char *access_mode) _data->access_mode = str_to_access_mode_linux(access_mode); _data->gen.init = false; _data->gen.fd = -1; - _data->b_cdtext_init = false; - _data->b_cdtext_error = false; + _data->gen.b_cdtext_init = false; + _data->gen.b_cdtext_error = false; if (NULL == psz_orig_source) { psz_source=cdio_get_default_device_linux(); diff --git a/lib/_cdio_sunos.c b/lib/_cdio_sunos.c index 73c5998a..d9824251 100644 --- a/lib/_cdio_sunos.c +++ b/lib/_cdio_sunos.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_sunos.c,v 1.68 2004/08/03 11:30:42 imacintosh Exp $ + $Id: _cdio_sunos.c,v 1.69 2004/08/07 22:58:51 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002, 2003, 2004 Rocky Bernstein @@ -38,7 +38,7 @@ #ifdef HAVE_SOLARIS_CDROM -static const char _rcsid[] = "$Id: _cdio_sunos.c,v 1.68 2004/08/03 11:30:42 imacintosh Exp $"; +static const char _rcsid[] = "$Id: _cdio_sunos.c,v 1.69 2004/08/07 22:58:51 rocky Exp $"; #ifdef HAVE_GLOB_H #include @@ -92,8 +92,6 @@ typedef struct { cdtext_t cdtext; /* CD-TEXT */ access_mode_t access_mode; - bool b_cdtext_init; - bool b_cdtext_error; /* Some of the more OS specific things. */ cdtext_t cdtext_track[CDIO_CD_MAX_TRACKS+1]; /*CD-TEXT for each track*/ @@ -474,7 +472,7 @@ set_cdtext_field_solaris(void *p_user_data, track_t i_track, not exist. */ static bool -_init_cdtext_solaris (_img_private_t *p_env) +init_cdtext_solaris (_img_private_t *p_env) { return scsi_mmc_init_cdtext_private( p_env->gen.cdio, &run_scsi_cmd_solaris, @@ -496,14 +494,13 @@ get_cdtext_solaris (void *p_user_data, track_t i_track) if ( NULL == p_env || (0 != i_track - && i_track >= p_env->gen.i_tracks+p_env->gen.i_first_track ) - || p_env ->b_cdtext_error ) + && i_track >= p_env->gen.i_tracks+p_env->gen.i_first_track ) ) return NULL; - if (!p_env->b_cdtext_init) - p_env->b_cdtext_init = _init_cdtext_solaris(p_env); + if (!p_env->gen.b_cdtext_init) + init_cdtext_solaris(p_env); - if (!p_env->b_cdtext_init) return NULL; + if (!p_env->gen.b_cdtext_init) return NULL; if (0 == i_track) return &(p_env->cdtext); @@ -928,8 +925,8 @@ cdio_open_am_solaris (const char *psz_orig_source, const char *access_mode) _data->access_mode = _AM_SUN_CTRL_SCSI; _data->gen.init = false; _data->gen.fd = -1; - _data->b_cdtext_init = false; - _data->b_cdtext_error = false; + _data->gen.b_cdtext_init = false; + _data->gen.b_cdtext_error = false; if (NULL == psz_orig_source) { psz_source = cdio_get_default_device_solaris(); diff --git a/lib/cdio_private.h b/lib/cdio_private.h index f4a1b8f4..8159808e 100644 --- a/lib/cdio_private.h +++ b/lib/cdio_private.h @@ -1,5 +1,5 @@ /* - $Id: cdio_private.h,v 1.36 2004/07/29 02:16:20 rocky Exp $ + $Id: cdio_private.h,v 1.37 2004/08/07 22:58:51 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein @@ -248,7 +248,10 @@ extern "C" { typedef struct { char *source_name; /**< Name used in open. */ bool init; /**< True if structure has been initialized */ - bool toc_init; /**< True TOC read in */ + bool toc_init; /**< True if TOC read in */ + bool b_cdtext_init; /**< True if CD-Text read in */ + bool b_cdtext_error; /**< True if trouble reading CD-Text */ + int ioctls_debugged; /**< for debugging */ /* Only one of the below is used. The first is for CD-ROM devices diff --git a/lib/scsi_mmc.c b/lib/scsi_mmc.c index 19b6ca75..fd7015e2 100644 --- a/lib/scsi_mmc.c +++ b/lib/scsi_mmc.c @@ -1,6 +1,6 @@ /* Common SCSI Multimedia Command (MMC) routines. - $Id: scsi_mmc.c,v 1.23 2004/08/07 09:42:34 rocky Exp $ + $Id: scsi_mmc.c,v 1.24 2004/08/07 22:58:51 rocky Exp $ Copyright (C) 2004 Rocky Bernstein @@ -505,7 +505,7 @@ scsi_mmc_init_cdtext_private ( void *p_user_data, char wdata[5000] = { 0, }; int i_status; - if ( ! p_env || ! run_scsi_mmc_cmd ) + if ( ! p_env || ! run_scsi_mmc_cmd || p_env->b_cdtext_error ) return false; /* Operation code */ @@ -527,8 +527,10 @@ scsi_mmc_init_cdtext_private ( void *p_user_data, if (i_status != 0) { cdio_info ("CD-TEXT reading failed: %s\n", strerror(errno)); + p_env->b_cdtext_error = true; return false; } else { + p_env->b_cdtext_init = true; return cdtext_data_init(p_env, p_env->i_first_track, wdata, set_cdtext_field_fn); }