Change a number of sprintf's to snprintf.

This commit is contained in:
R. Bernstein
2011-05-27 17:50:56 -04:00
parent 958c3cad4d
commit 9be0980337
3 changed files with 727 additions and 724 deletions

View File

@@ -1,5 +1,5 @@
/* /*
Copyright (C) 2004, 2005, 2008, 2010 Rocky Bernstein <rocky@gnu.org> Copyright (C) 2004, 2005, 2008, 2010, 2011 Rocky Bernstein <rocky@gnu.org>
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@@ -54,24 +54,24 @@
#include "cdio/logging.h" #include "cdio/logging.h"
#if defined (_XBOX) #if defined (_XBOX)
#define windows_error(loglevel,i_err) { \ #define windows_error(loglevel,i_err) { \
cdio_log(loglevel, "Error: file %s: line %d (%s) %ld\n", \ cdio_log(loglevel, "Error: file %s: line %d (%s) %ld\n", \
__FILE__, __LINE__, __PRETTY_FUNCTION__, i_err); \ __FILE__, __LINE__, __PRETTY_FUNCTION__, i_err); \
} }
#else #else
#define windows_error(loglevel,i_err) { \ #define windows_error(loglevel,i_err) { \
char error_msg[80]; \ char error_msg[80]; \
long int count; \ long int count; \
count = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, \ count = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, \
NULL, i_err, MAKELANGID(LANG_NEUTRAL, \ NULL, i_err, MAKELANGID(LANG_NEUTRAL, \
SUBLANG_DEFAULT), \ SUBLANG_DEFAULT), \
error_msg, sizeof(error_msg), NULL); \ error_msg, sizeof(error_msg), NULL); \
(count != 0) ? \ (count != 0) ? \
cdio_log(loglevel, "Error: file %s: line %d (%s)\n\t%s\n", \ cdio_log(loglevel, "Error: file %s: line %d (%s)\n\t%s\n", \
__FILE__, __LINE__, __PRETTY_FUNCTION__, error_msg) \ __FILE__, __LINE__, __PRETTY_FUNCTION__, error_msg) \
: \ : \
cdio_log(loglevel, "Error: file %s: line %d (%s) %ld\n", \ cdio_log(loglevel, "Error: file %s: line %d (%s) %ld\n", \
__FILE__, __LINE__, __PRETTY_FUNCTION__, i_err); \ __FILE__, __LINE__, __PRETTY_FUNCTION__, i_err); \
} }
#endif #endif
@@ -133,7 +133,7 @@ audio_pause_win32ioctl (void *p_user_data)
bool b_success = bool b_success =
DeviceIoControl(p_env->h_device_handle, IOCTL_CDROM_PAUSE_AUDIO, DeviceIoControl(p_env->h_device_handle, IOCTL_CDROM_PAUSE_AUDIO,
NULL, (DWORD) 0, NULL, 0, &dw_bytes_returned, NULL); NULL, (DWORD) 0, NULL, 0, &dw_bytes_returned, NULL);
if ( ! b_success ) { if ( ! b_success ) {
windows_error(CDIO_LOG_INFO, GetLastError()); windows_error(CDIO_LOG_INFO, GetLastError());
@@ -149,7 +149,7 @@ audio_pause_win32ioctl (void *p_user_data)
*/ */
driver_return_code_t driver_return_code_t
audio_play_msf_win32ioctl (void *p_user_data, msf_t *p_start_msf, audio_play_msf_win32ioctl (void *p_user_data, msf_t *p_start_msf,
msf_t *p_end_msf) msf_t *p_end_msf)
{ {
const _img_private_t *p_env = p_user_data; const _img_private_t *p_env = p_user_data;
CDROM_PLAY_AUDIO_MSF play; CDROM_PLAY_AUDIO_MSF play;
@@ -165,7 +165,7 @@ audio_play_msf_win32ioctl (void *p_user_data, msf_t *p_start_msf,
bool b_success = bool b_success =
DeviceIoControl(p_env->h_device_handle, IOCTL_CDROM_PLAY_AUDIO_MSF, DeviceIoControl(p_env->h_device_handle, IOCTL_CDROM_PLAY_AUDIO_MSF,
&play, sizeof(play), NULL, 0, &dw_bytes_returned, NULL); &play, sizeof(play), NULL, 0, &dw_bytes_returned, NULL);
if ( ! b_success ) { if ( ! b_success ) {
windows_error(CDIO_LOG_INFO, GetLastError()); windows_error(CDIO_LOG_INFO, GetLastError());
@@ -183,7 +183,7 @@ audio_play_msf_win32ioctl (void *p_user_data, msf_t *p_start_msf,
*/ */
driver_return_code_t driver_return_code_t
audio_read_subchannel_win32ioctl (void *p_user_data, audio_read_subchannel_win32ioctl (void *p_user_data,
cdio_subchannel_t *p_subchannel) cdio_subchannel_t *p_subchannel)
{ {
const _img_private_t *p_env = p_user_data; const _img_private_t *p_env = p_user_data;
DWORD dw_bytes_returned; DWORD dw_bytes_returned;
@@ -192,13 +192,13 @@ audio_read_subchannel_win32ioctl (void *p_user_data,
q_data_format.Format = CDIO_SUBCHANNEL_CURRENT_POSITION; q_data_format.Format = CDIO_SUBCHANNEL_CURRENT_POSITION;
q_data_format.Track=0; /* Not sure if this has to be set or if so what q_data_format.Track=0; /* Not sure if this has to be set or if so what
it should be. */ it should be. */
if( ! DeviceIoControl( p_env->h_device_handle, if( ! DeviceIoControl( p_env->h_device_handle,
IOCTL_CDROM_READ_Q_CHANNEL, IOCTL_CDROM_READ_Q_CHANNEL,
&q_data_format, sizeof(q_data_format), &q_data_format, sizeof(q_data_format),
&q_subchannel_data, sizeof(q_subchannel_data), &q_subchannel_data, sizeof(q_subchannel_data),
&dw_bytes_returned, NULL ) ) { &dw_bytes_returned, NULL ) ) {
windows_error(CDIO_LOG_INFO, GetLastError()); windows_error(CDIO_LOG_INFO, GetLastError());
return DRIVER_OP_ERROR; return DRIVER_OP_ERROR;
} }
@@ -244,7 +244,7 @@ audio_resume_win32ioctl (void *p_user_data)
bool b_success = bool b_success =
DeviceIoControl(p_env->h_device_handle, IOCTL_CDROM_RESUME_AUDIO, DeviceIoControl(p_env->h_device_handle, IOCTL_CDROM_RESUME_AUDIO,
NULL, (DWORD) 0, NULL, 0, &dw_bytes_returned, NULL); NULL, (DWORD) 0, NULL, 0, &dw_bytes_returned, NULL);
if ( ! b_success ) { if ( ! b_success ) {
windows_error(CDIO_LOG_INFO, GetLastError()); windows_error(CDIO_LOG_INFO, GetLastError());
@@ -262,15 +262,15 @@ audio_resume_win32ioctl (void *p_user_data)
*/ */
driver_return_code_t driver_return_code_t
audio_set_volume_win32ioctl (void *p_user_data, audio_set_volume_win32ioctl (void *p_user_data,
/*in*/ cdio_audio_volume_t *p_volume) /*in*/ cdio_audio_volume_t *p_volume)
{ {
const _img_private_t *p_env = p_user_data; const _img_private_t *p_env = p_user_data;
DWORD dw_bytes_returned; DWORD dw_bytes_returned;
bool b_success = bool b_success =
DeviceIoControl(p_env->h_device_handle, IOCTL_CDROM_SET_VOLUME, DeviceIoControl(p_env->h_device_handle, IOCTL_CDROM_SET_VOLUME,
p_volume, (DWORD) sizeof(cdio_audio_volume_t), p_volume, (DWORD) sizeof(cdio_audio_volume_t),
NULL, 0, &dw_bytes_returned, NULL); NULL, 0, &dw_bytes_returned, NULL);
if ( ! b_success ) { if ( ! b_success ) {
windows_error(CDIO_LOG_INFO, GetLastError()); windows_error(CDIO_LOG_INFO, GetLastError());
@@ -281,16 +281,16 @@ audio_set_volume_win32ioctl (void *p_user_data,
driver_return_code_t driver_return_code_t
audio_get_volume_win32ioctl (void *p_user_data, audio_get_volume_win32ioctl (void *p_user_data,
/*out*/ cdio_audio_volume_t *p_volume) /*out*/ cdio_audio_volume_t *p_volume)
{ {
const _img_private_t *p_env = p_user_data; const _img_private_t *p_env = p_user_data;
DWORD dw_bytes_returned; DWORD dw_bytes_returned;
bool b_success = bool b_success =
DeviceIoControl(p_env->h_device_handle, IOCTL_CDROM_GET_VOLUME, DeviceIoControl(p_env->h_device_handle, IOCTL_CDROM_GET_VOLUME,
NULL, 0, NULL, 0,
p_volume, (DWORD) sizeof(cdio_audio_volume_t), p_volume, (DWORD) sizeof(cdio_audio_volume_t),
&dw_bytes_returned, NULL); &dw_bytes_returned, NULL);
if ( ! b_success ) { if ( ! b_success ) {
windows_error(CDIO_LOG_INFO, GetLastError()); windows_error(CDIO_LOG_INFO, GetLastError());
@@ -313,7 +313,7 @@ audio_stop_win32ioctl (void *p_user_data)
bool b_success = bool b_success =
DeviceIoControl(p_env->h_device_handle, IOCTL_CDROM_STOP_AUDIO, DeviceIoControl(p_env->h_device_handle, IOCTL_CDROM_STOP_AUDIO,
NULL, (DWORD) 0, NULL, 0, &dw_bytes_returned, NULL); NULL, (DWORD) 0, NULL, 0, &dw_bytes_returned, NULL);
if ( ! b_success ) { if ( ! b_success ) {
windows_error(CDIO_LOG_INFO, GetLastError()); windows_error(CDIO_LOG_INFO, GetLastError());
@@ -349,12 +349,12 @@ close_tray_win32ioctl (const char *psz_win32_drive)
else dw_access_flags = GENERIC_READ; else dw_access_flags = GENERIC_READ;
h_device_handle = CreateFile( psz_win32_drive, h_device_handle = CreateFile( psz_win32_drive,
dw_access_flags, dw_access_flags,
FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, NULL,
OPEN_EXISTING, OPEN_EXISTING,
0, 0,
NULL ); NULL );
if( h_device_handle == INVALID_HANDLE_VALUE ) { if( h_device_handle == INVALID_HANDLE_VALUE ) {
return DRIVER_OP_ERROR; return DRIVER_OP_ERROR;
@@ -362,7 +362,7 @@ close_tray_win32ioctl (const char *psz_win32_drive)
b_success = b_success =
DeviceIoControl(h_device_handle, IOCTL_STORAGE_LOAD_MEDIA2, DeviceIoControl(h_device_handle, IOCTL_STORAGE_LOAD_MEDIA2,
NULL, (DWORD) 0, NULL, 0, &dw_bytes_returned, NULL); NULL, (DWORD) 0, NULL, 0, &dw_bytes_returned, NULL);
CloseHandle(h_device_handle); CloseHandle(h_device_handle);
@@ -397,19 +397,19 @@ set_scsi_tuple_win32ioctl(_img_private_t *env)
memset(dataBuffer, 0, sizeof(dataBuffer)); memset(dataBuffer, 0, sizeof(dataBuffer));
if (DeviceIoControl(env->h_device_handle, if (DeviceIoControl(env->h_device_handle,
IOCTL_SCSI_GET_ADDRESS, IOCTL_SCSI_GET_ADDRESS,
NULL, NULL,
0, 0,
dataBuffer, dataBuffer,
sizeof(dataBuffer), sizeof(dataBuffer),
&bytesReturned, &bytesReturned,
FALSE FALSE
)) { )) {
sprintf(tuple, "%d,%d,%d,%d", snprintf(tuple, sizeof(tuple) "%d,%d,%d,%d",
scsiAddress->PortNumber, scsiAddress->PortNumber,
scsiAddress->PathId, scsiAddress->PathId,
scsiAddress->TargetId, scsiAddress->TargetId,
scsiAddress->Lun); scsiAddress->Lun);
env->gen.scsi_tuple = strdup(tuple); env->gen.scsi_tuple = strdup(tuple);
return 1; return 1;
} else { } else {
@@ -428,14 +428,14 @@ set_scsi_tuple_win32ioctl(_img_private_t *env)
/** /**
Run a SCSI MMC command. Run a SCSI MMC command.
env private CD structure env private CD structure
i_timeout time in milliseconds we will wait for the command i_timeout time in milliseconds we will wait for the command
to complete. If this value is -1, use the default to complete. If this value is -1, use the default
time-out value. time-out value.
p_buf Buffer for data, both sending and receiving p_buf Buffer for data, both sending and receiving
i_buf Size of buffer i_buf Size of buffer
e_direction direction the transfer is to go. e_direction direction the transfer is to go.
cdb CDB bytes. All values that are needed should be set on cdb CDB bytes. All values that are needed should be set on
input. We'll figure out what the right CDB length should be. input. We'll figure out what the right CDB length should be.
Return 0 if command completed successfully. Return 0 if command completed successfully.
@@ -443,10 +443,10 @@ set_scsi_tuple_win32ioctl(_img_private_t *env)
#if 1 #if 1
int int
run_mmc_cmd_win32ioctl( void *p_user_data, run_mmc_cmd_win32ioctl( void *p_user_data,
unsigned int i_timeout_ms, unsigned int i_timeout_ms,
unsigned int i_cdb, const mmc_cdb_t * p_cdb, unsigned int i_cdb, const mmc_cdb_t * p_cdb,
cdio_mmc_direction_t e_direction, cdio_mmc_direction_t e_direction,
unsigned int i_buf, /*in/out*/ void *p_buf ) unsigned int i_buf, /*in/out*/ void *p_buf )
{ {
_img_private_t *p_env = p_user_data; _img_private_t *p_env = p_user_data;
SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER swb; SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER swb;
@@ -460,7 +460,7 @@ run_mmc_cmd_win32ioctl( void *p_user_data,
swb.sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT); swb.sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT);
swb.sptd.PathId = 0; /* SCSI card ID will be filled in swb.sptd.PathId = 0; /* SCSI card ID will be filled in
automatically */ automatically */
swb.sptd.TargetId= 0; /* SCSI target ID will also be filled in */ swb.sptd.TargetId= 0; /* SCSI target ID will also be filled in */
swb.sptd.Lun = 0; /* SCSI lun ID will also be filled in */ swb.sptd.Lun = 0; /* SCSI lun ID will also be filled in */
swb.sptd.CdbLength = i_cdb; swb.sptd.CdbLength = i_cdb;
@@ -485,20 +485,20 @@ run_mmc_cmd_win32ioctl( void *p_user_data,
swb.sptd.TimeOutValue = msecs2secs(i_timeout_ms); swb.sptd.TimeOutValue = msecs2secs(i_timeout_ms);
swb.sptd.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, swb.sptd.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER,
SenseBuf); SenseBuf);
p_env->gen.scsi_mmc_sense_valid = 0; p_env->gen.scsi_mmc_sense_valid = 0;
memcpy(swb.sptd.Cdb, p_cdb, i_cdb); memcpy(swb.sptd.Cdb, p_cdb, i_cdb);
/* Send the command to drive */ /* Send the command to drive */
b_success = DeviceIoControl(p_env->h_device_handle, b_success = DeviceIoControl(p_env->h_device_handle,
IOCTL_SCSI_PASS_THROUGH_DIRECT, IOCTL_SCSI_PASS_THROUGH_DIRECT,
(void *)&swb, (void *)&swb,
sizeof(swb), sizeof(swb),
&swb, &swb,
sizeof(swb), sizeof(swb),
&dw_bytes_returned, &dw_bytes_returned,
NULL); NULL);
if (i_buf == 1) memcpy(p_buf, &dummy_buf[0], 1); if (i_buf == 1) memcpy(p_buf, &dummy_buf[0], 1);
@@ -532,10 +532,10 @@ run_mmc_cmd_win32ioctl( void *p_user_data,
#else #else
int int
run_mmc_cmd_win32ioctl( void *p_user_data, run_mmc_cmd_win32ioctl( void *p_user_data,
unsigned int i_timeout_ms, unsigned int i_timeout_ms,
unsigned int i_cdb, const mmc_cdb_t * p_cdb, unsigned int i_cdb, const mmc_cdb_t * p_cdb,
cdio_mmc_direction_t e_direction, cdio_mmc_direction_t e_direction,
unsigned int i_buf, /*in/out*/ void *p_buf ) unsigned int i_buf, /*in/out*/ void *p_buf )
{ {
_img_private_t *p_env = p_user_data; _img_private_t *p_env = p_user_data;
SCSI_PASS_THROUGH_WITH_BUFFER sptwb; SCSI_PASS_THROUGH_WITH_BUFFER sptwb;
@@ -548,7 +548,7 @@ run_mmc_cmd_win32ioctl( void *p_user_data,
sptwb.Spt.Length = sizeof(sptwb.Spt); sptwb.Spt.Length = sizeof(sptwb.Spt);
sptwb.Spt.PathId = 0; /* SCSI card ID will be filled in sptwb.Spt.PathId = 0; /* SCSI card ID will be filled in
automatically */ automatically */
sptwb.Spt.TargetId= 0; /* SCSI target ID will also be filled in */ sptwb.Spt.TargetId= 0; /* SCSI target ID will also be filled in */
sptwb.Spt.Lun = 0; /* SCSI lun ID will also be filled in */ sptwb.Spt.Lun = 0; /* SCSI lun ID will also be filled in */
sptwb.Spt.CdbLength = i_cdb; sptwb.Spt.CdbLength = i_cdb;
@@ -575,13 +575,13 @@ run_mmc_cmd_win32ioctl( void *p_user_data,
/* Send the command to drive */ /* Send the command to drive */
b_success = DeviceIoControl(p_env->h_device_handle, b_success = DeviceIoControl(p_env->h_device_handle,
IOCTL_SCSI_PASS_THROUGH, IOCTL_SCSI_PASS_THROUGH,
(void *)&sptwb, (void *)&sptwb,
sizeof(SCSI_PASS_THROUGH), sizeof(SCSI_PASS_THROUGH),
&sptwb, &sptwb,
length, length,
&dw_bytes_returned, &dw_bytes_returned,
NULL); NULL);
if ( 0 == b_success ) { if ( 0 == b_success ) {
windows_error(CDIO_LOG_INFO, GetLastError()); windows_error(CDIO_LOG_INFO, GetLastError());
@@ -594,8 +594,8 @@ run_mmc_cmd_win32ioctl( void *p_user_data,
*/ */
if (sptwb.SenseBuf[7]) { if (sptwb.SenseBuf[7]) {
int sense_size = sptwb.SenseBuf[7] + 8; /* SPC 4.5.3, Table 26: int sense_size = sptwb.SenseBuf[7] + 8; /* SPC 4.5.3, Table 26:
252 bytes legal, 263 bytes 252 bytes legal, 263 bytes
possible */ possible */
if (sense_size > sizeof(sptwb.SenseBuf)) if (sense_size > sizeof(sptwb.SenseBuf))
sense_size = sizeof(sptwb.SenseBuf); sense_size = sizeof(sptwb.SenseBuf);
memcpy((void *) p_env->gen.scsi_mmc_sense, &sptwb.SenseBuf, sense_size); memcpy((void *) p_env->gen.scsi_mmc_sense, &sptwb.SenseBuf, sense_size);
@@ -622,7 +622,7 @@ dvd_discmode_win32ioctl (_img_private_t *p_env)
dvd.physical.layer_num = 0; dvd.physical.layer_num = 0;
rc = mmc_get_dvd_struct_physical_private (p_env, &run_mmc_cmd_win32ioctl, rc = mmc_get_dvd_struct_physical_private (p_env, &run_mmc_cmd_win32ioctl,
&dvd); &dvd);
if (DRIVER_OP_SUCCESS == rc) { if (DRIVER_OP_SUCCESS == rc) {
switch(dvd.physical.layer[0].book_type) { switch(dvd.physical.layer[0].book_type) {
@@ -666,44 +666,44 @@ get_discmode_win32ioctl (_img_private_t *p_env)
switch(track_fmt) { switch(track_fmt) {
case TRACK_FORMAT_AUDIO: case TRACK_FORMAT_AUDIO:
switch(discmode) { switch(discmode) {
case CDIO_DISC_MODE_NO_INFO: case CDIO_DISC_MODE_NO_INFO:
discmode = CDIO_DISC_MODE_CD_DA; discmode = CDIO_DISC_MODE_CD_DA;
break; break;
case CDIO_DISC_MODE_CD_DA: case CDIO_DISC_MODE_CD_DA:
case CDIO_DISC_MODE_CD_MIXED: case CDIO_DISC_MODE_CD_MIXED:
case CDIO_DISC_MODE_ERROR: case CDIO_DISC_MODE_ERROR:
/* No change*/ /* No change*/
break; break;
default: default:
discmode = CDIO_DISC_MODE_CD_MIXED; discmode = CDIO_DISC_MODE_CD_MIXED;
} }
break; break;
case TRACK_FORMAT_XA: case TRACK_FORMAT_XA:
switch(discmode) { switch(discmode) {
case CDIO_DISC_MODE_NO_INFO: case CDIO_DISC_MODE_NO_INFO:
discmode = CDIO_DISC_MODE_CD_XA; discmode = CDIO_DISC_MODE_CD_XA;
break; break;
case CDIO_DISC_MODE_CD_XA: case CDIO_DISC_MODE_CD_XA:
case CDIO_DISC_MODE_CD_MIXED: case CDIO_DISC_MODE_CD_MIXED:
case CDIO_DISC_MODE_ERROR: case CDIO_DISC_MODE_ERROR:
/* No change*/ /* No change*/
break; break;
default: default:
discmode = CDIO_DISC_MODE_CD_MIXED; discmode = CDIO_DISC_MODE_CD_MIXED;
} }
break; break;
case TRACK_FORMAT_DATA: case TRACK_FORMAT_DATA:
switch(discmode) { switch(discmode) {
case CDIO_DISC_MODE_NO_INFO: case CDIO_DISC_MODE_NO_INFO:
discmode = CDIO_DISC_MODE_CD_DATA; discmode = CDIO_DISC_MODE_CD_DATA;
break; break;
case CDIO_DISC_MODE_CD_DATA: case CDIO_DISC_MODE_CD_DATA:
case CDIO_DISC_MODE_CD_MIXED: case CDIO_DISC_MODE_CD_MIXED:
case CDIO_DISC_MODE_ERROR: case CDIO_DISC_MODE_ERROR:
/* No change*/ /* No change*/
break; break;
default: default:
discmode = CDIO_DISC_MODE_CD_MIXED; discmode = CDIO_DISC_MODE_CD_MIXED;
} }
break; break;
case TRACK_FORMAT_ERROR: case TRACK_FORMAT_ERROR:
@@ -756,7 +756,7 @@ is_cdrom_win32ioctl(const char c_drive_letter)
*/ */
driver_return_code_t driver_return_code_t
read_audio_sectors_win32ioctl (_img_private_t *p_env, void *data, lsn_t lsn, read_audio_sectors_win32ioctl (_img_private_t *p_env, void *data, lsn_t lsn,
unsigned int nblocks) unsigned int nblocks)
{ {
DWORD dw_bytes_returned; DWORD dw_bytes_returned;
RAW_READ_INFO cdrom_raw; RAW_READ_INFO cdrom_raw;
@@ -767,12 +767,12 @@ read_audio_sectors_win32ioctl (_img_private_t *p_env, void *data, lsn_t lsn,
cdrom_raw.TrackMode = CDDA; cdrom_raw.TrackMode = CDDA;
if( DeviceIoControl( p_env->h_device_handle, if( DeviceIoControl( p_env->h_device_handle,
IOCTL_CDROM_RAW_READ, &cdrom_raw, IOCTL_CDROM_RAW_READ, &cdrom_raw,
sizeof(RAW_READ_INFO), data, sizeof(RAW_READ_INFO), data,
CDIO_CD_FRAMESIZE_RAW * nblocks, CDIO_CD_FRAMESIZE_RAW * nblocks,
&dw_bytes_returned, NULL ) == 0 ) { &dw_bytes_returned, NULL ) == 0 ) {
cdio_info("Error reading audio-mode lsn %lu\n)", cdio_info("Error reading audio-mode lsn %lu\n)",
(long unsigned int) lsn); (long unsigned int) lsn);
windows_error(CDIO_LOG_INFO, GetLastError()); windows_error(CDIO_LOG_INFO, GetLastError());
return DRIVER_OP_ERROR; return DRIVER_OP_ERROR;
} }
@@ -796,9 +796,9 @@ read_raw_sector (_img_private_t *p_env, void *p_buf, lsn_t lsn)
cdb.field[9]=0xF8; /* Raw read, 2352 bytes per sector */ cdb.field[9]=0xF8; /* Raw read, 2352 bytes per sector */
return run_mmc_cmd_win32ioctl(p_env, OP_TIMEOUT_MS, return run_mmc_cmd_win32ioctl(p_env, OP_TIMEOUT_MS,
mmc_get_cmd_len(cdb.field[0]), mmc_get_cmd_len(cdb.field[0]),
&cdb, SCSI_MMC_DATA_READ, &cdb, SCSI_MMC_DATA_READ,
CDIO_CD_FRAMESIZE_RAW, p_buf); CDIO_CD_FRAMESIZE_RAW, p_buf);
} }
/** /**
@@ -807,7 +807,7 @@ read_raw_sector (_img_private_t *p_env, void *p_buf, lsn_t lsn)
*/ */
int int
read_mode2_sector_win32ioctl (_img_private_t *p_env, void *p_data, read_mode2_sector_win32ioctl (_img_private_t *p_env, void *p_data,
lsn_t lsn, bool b_form2) lsn_t lsn, bool b_form2)
{ {
char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, }; char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, };
int ret = read_raw_sector (p_env, buf, lsn); int ret = read_raw_sector (p_env, buf, lsn);
@@ -815,8 +815,8 @@ read_mode2_sector_win32ioctl (_img_private_t *p_env, void *p_data,
if ( 0 != ret) return ret; if ( 0 != ret) return ret;
memcpy (p_data, memcpy (p_data,
buf + CDIO_CD_SYNC_SIZE + CDIO_CD_XA_HEADER, buf + CDIO_CD_SYNC_SIZE + CDIO_CD_XA_HEADER,
b_form2 ? M2RAW_SECTOR_SIZE: CDIO_CD_FRAMESIZE); b_form2 ? M2RAW_SECTOR_SIZE: CDIO_CD_FRAMESIZE);
return 0; return 0;
@@ -828,7 +828,7 @@ read_mode2_sector_win32ioctl (_img_private_t *p_env, void *p_data,
*/ */
int int
read_mode1_sector_win32ioctl (_img_private_t *env, void *data, read_mode1_sector_win32ioctl (_img_private_t *env, void *data,
lsn_t lsn, bool b_form2) lsn_t lsn, bool b_form2)
{ {
char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, }; char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, };
int ret = read_raw_sector (env, buf, lsn); int ret = read_raw_sector (env, buf, lsn);
@@ -836,8 +836,8 @@ read_mode1_sector_win32ioctl (_img_private_t *env, void *data,
if ( 0 != ret) return ret; if ( 0 != ret) return ret;
memcpy (data, memcpy (data,
buf + CDIO_CD_SYNC_SIZE+CDIO_CD_HEADER_SIZE, buf + CDIO_CD_SYNC_SIZE+CDIO_CD_HEADER_SIZE,
b_form2 ? M2RAW_SECTOR_SIZE: CDIO_CD_FRAMESIZE); b_form2 ? M2RAW_SECTOR_SIZE: CDIO_CD_FRAMESIZE);
return 0; return 0;
@@ -881,50 +881,52 @@ init_win32ioctl (_img_private_t *env)
if (cdio_is_device_win32(env->gen.source_name)) if (cdio_is_device_win32(env->gen.source_name))
{ {
#ifdef _XBOX #ifdef _XBOX
// Use XBOX cdrom, no matter what drive letter is given. // Use XBOX cdrom, no matter what drive letter is given.
RtlInitAnsiString(&filename,"\\Device\\Cdrom0"); RtlInitAnsiString(&filename,"\\Device\\Cdrom0");
InitializeObjectAttributes(&attributes, &filename, OBJ_CASE_INSENSITIVE, InitializeObjectAttributes(&attributes, &filename, OBJ_CASE_INSENSITIVE,
NULL); NULL);
error = NtCreateFile( &hDevice, error = NtCreateFile( &hDevice,
GENERIC_READ |SYNCHRONIZE | FILE_READ_ATTRIBUTES, GENERIC_READ |SYNCHRONIZE | FILE_READ_ATTRIBUTES,
&attributes, &attributes,
&status, &status,
NULL, NULL,
0, 0,
FILE_SHARE_READ, FILE_SHARE_READ,
FILE_OPEN, FILE_OPEN,
FILE_NON_DIRECTORY_FILE FILE_NON_DIRECTORY_FILE
| FILE_SYNCHRONOUS_IO_NONALERT ); | FILE_SYNCHRONOUS_IO_NONALERT );
if (!NT_SUCCESS(error)) if (!NT_SUCCESS(error))
{ {
return false; return false;
} }
env->h_device_handle = hDevice; env->h_device_handle = hDevice;
#else #else
sprintf( psz_win32_drive, "\\\\.\\%c:", env->gen.source_name[len-2] ); snprintf( psz_win32_drive, sizeof(psz_win32_drive,
"\\\\.\\%c:",
env->gen.source_name[len-2] );
env->h_device_handle = CreateFile( psz_win32_drive, env->h_device_handle = CreateFile( psz_win32_drive,
dw_access_flags, dw_access_flags,
FILE_SHARE_READ | FILE_SHARE_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, NULL,
OPEN_EXISTING, OPEN_EXISTING,
0, 0,
NULL ); NULL );
if( env->h_device_handle == INVALID_HANDLE_VALUE ) if( env->h_device_handle == INVALID_HANDLE_VALUE )
{ {
/* No good. try toggle write. */ /* No good. try toggle write. */
dw_access_flags ^= GENERIC_WRITE; dw_access_flags ^= GENERIC_WRITE;
env->h_device_handle = CreateFile( psz_win32_drive, env->h_device_handle = CreateFile( psz_win32_drive,
dw_access_flags, dw_access_flags,
FILE_SHARE_READ, FILE_SHARE_READ,
NULL, NULL,
OPEN_EXISTING, OPEN_EXISTING,
0, 0,
NULL ); NULL );
if (env->h_device_handle == NULL) if (env->h_device_handle == NULL)
return false; return false;
} }
#endif #endif
env->b_ioctl_init = true; env->b_ioctl_init = true;
@@ -962,9 +964,9 @@ read_fulltoc_win32mmc (_img_private_t *p_env)
CDIO_MMC_SET_READ_LENGTH16(cdb.field, sizeof(cdrom_toc_full)); CDIO_MMC_SET_READ_LENGTH16(cdb.field, sizeof(cdrom_toc_full));
i_status = run_mmc_cmd_win32ioctl (p_env, 1000*60*3, i_status = run_mmc_cmd_win32ioctl (p_env, 1000*60*3,
mmc_get_cmd_len(cdb.field[0]), mmc_get_cmd_len(cdb.field[0]),
&cdb, SCSI_MMC_DATA_READ, &cdb, SCSI_MMC_DATA_READ,
sizeof(cdrom_toc_full), &cdrom_toc_full); sizeof(cdrom_toc_full), &cdrom_toc_full);
if ( 0 != i_status ) { if ( 0 != i_status ) {
cdio_debug ("SCSI MMC READ_TOC failed\n"); cdio_debug ("SCSI MMC READ_TOC failed\n");
@@ -984,7 +986,7 @@ read_fulltoc_win32mmc (_img_private_t *p_env)
if ( 0xA1 == cdrom_toc_full.TrackData[i].POINT ) { if ( 0xA1 == cdrom_toc_full.TrackData[i].POINT ) {
/* Last track number */ /* Last track number */
p_env->gen.i_tracks = p_env->gen.i_tracks =
cdrom_toc_full.TrackData[i].PMIN - p_env->gen.i_first_track + 1; cdrom_toc_full.TrackData[i].PMIN - p_env->gen.i_first_track + 1;
i_seen_flag|=0x02; i_seen_flag|=0x02;
} }
@@ -992,41 +994,41 @@ read_fulltoc_win32mmc (_img_private_t *p_env)
if ( 0xA2 == j ) { if ( 0xA2 == j ) {
/* Start position of the lead out */ /* Start position of the lead out */
p_env->tocent[ p_env->gen.i_tracks ].start_lsn = p_env->tocent[ p_env->gen.i_tracks ].start_lsn =
cdio_lba_to_lsn( cdio_lba_to_lsn(
cdio_msf3_to_lba( cdio_msf3_to_lba(
cdrom_toc_full.TrackData[i].PMIN, cdrom_toc_full.TrackData[i].PMIN,
cdrom_toc_full.TrackData[i].PSEC, cdrom_toc_full.TrackData[i].PSEC,
cdrom_toc_full.TrackData[i].PFRAME cdrom_toc_full.TrackData[i].PFRAME
) )
); );
p_env->tocent[ p_env->gen.i_tracks ].Control p_env->tocent[ p_env->gen.i_tracks ].Control
= cdrom_toc_full.TrackData[i].Control; = cdrom_toc_full.TrackData[i].Control;
p_env->tocent[ p_env->gen.i_tracks ].Format = i_track_format; p_env->tocent[ p_env->gen.i_tracks ].Format = i_track_format;
i_seen_flag|=0x04; i_seen_flag|=0x04;
} }
if (cdrom_toc_full.TrackData[i].POINT > 0 if (cdrom_toc_full.TrackData[i].POINT > 0
&& cdrom_toc_full.TrackData[i].POINT <= p_env->gen.i_tracks) { && cdrom_toc_full.TrackData[i].POINT <= p_env->gen.i_tracks) {
p_env->tocent[j-1].start_lsn = p_env->tocent[j-1].start_lsn =
cdio_lba_to_lsn( cdio_lba_to_lsn(
cdio_msf3_to_lba( cdio_msf3_to_lba(
cdrom_toc_full.TrackData[i].PMIN, cdrom_toc_full.TrackData[i].PMIN,
cdrom_toc_full.TrackData[i].PSEC, cdrom_toc_full.TrackData[i].PSEC,
cdrom_toc_full.TrackData[i].PFRAME cdrom_toc_full.TrackData[i].PFRAME
) )
); );
p_env->tocent[j-1].Control = p_env->tocent[j-1].Control =
cdrom_toc_full.TrackData[i].Control; cdrom_toc_full.TrackData[i].Control;
p_env->tocent[j-1].Format = i_track_format; p_env->tocent[j-1].Format = i_track_format;
set_track_flags(&(p_env->gen.track_flags[j]), set_track_flags(&(p_env->gen.track_flags[j]),
p_env->tocent[j-1].Control); p_env->tocent[j-1].Control);
cdio_debug("p_sectors: %i, %lu", i, cdio_debug("p_sectors: %i, %lu", i,
(unsigned long int) (p_env->tocent[i].start_lsn)); (unsigned long int) (p_env->tocent[i].start_lsn));
if (cdrom_toc_full.TrackData[i].POINT == p_env->gen.i_tracks) if (cdrom_toc_full.TrackData[i].POINT == p_env->gen.i_tracks)
i_seen_flag|=0x08; i_seen_flag|=0x08;
} }
if ( 0x0F == i_seen_flag ) break; if ( 0x0F == i_seen_flag ) break;
@@ -1049,7 +1051,7 @@ read_toc_win32ioctl (_img_private_t *p_env)
DWORD dw_bytes_returned; DWORD dw_bytes_returned;
unsigned int i, j; unsigned int i, j;
bool b_fulltoc_first; /* Do we do fulltoc or DeviceIoControl bool b_fulltoc_first; /* Do we do fulltoc or DeviceIoControl
first? */ first? */
if ( ! p_env ) return false; if ( ! p_env ) return false;
/* /*
@@ -1079,9 +1081,9 @@ read_toc_win32ioctl (_img_private_t *p_env)
initiaily. Try reading TOC via DeviceIoControl... */ initiaily. Try reading TOC via DeviceIoControl... */
if( DeviceIoControl( p_env->h_device_handle, if( DeviceIoControl( p_env->h_device_handle,
IOCTL_CDROM_READ_TOC, IOCTL_CDROM_READ_TOC,
NULL, 0, &cdrom_toc, sizeof(CDROM_TOC), NULL, 0, &cdrom_toc, sizeof(CDROM_TOC),
&dw_bytes_returned, NULL ) == 0 ) { &dw_bytes_returned, NULL ) == 0 ) {
cdio_log_level_t loglevel = b_fulltoc_first cdio_log_level_t loglevel = b_fulltoc_first
? CDIO_LOG_WARN : CDIO_LOG_DEBUG; ? CDIO_LOG_WARN : CDIO_LOG_DEBUG;
@@ -1100,10 +1102,10 @@ read_toc_win32ioctl (_img_private_t *p_env)
for( i = 0 ; i <= p_env->gen.i_tracks ; i++, j++ ) { for( i = 0 ; i <= p_env->gen.i_tracks ; i++, j++ ) {
p_env->tocent[ i ].start_lsn = p_env->tocent[ i ].start_lsn =
cdio_lba_to_lsn( cdio_lba_to_lsn(
cdio_msf3_to_lba( cdrom_toc.TrackData[i].Address[1], cdio_msf3_to_lba( cdrom_toc.TrackData[i].Address[1],
cdrom_toc.TrackData[i].Address[2], cdrom_toc.TrackData[i].Address[2],
cdrom_toc.TrackData[i].Address[3] ) cdrom_toc.TrackData[i].Address[3] )
); );
p_env->tocent[i].Control = cdrom_toc.TrackData[i].Control; p_env->tocent[i].Control = cdrom_toc.TrackData[i].Control;
p_env->tocent[i].Format = cdrom_toc.TrackData[i].Adr; p_env->tocent[i].Format = cdrom_toc.TrackData[i].Adr;
@@ -1120,7 +1122,7 @@ read_toc_win32ioctl (_img_private_t *p_env)
cdio_debug("p_sectors: %i, %lu", i, cdio_debug("p_sectors: %i, %lu", i,
(unsigned long int) (p_env->tocent[i].start_lsn)); (unsigned long int) (p_env->tocent[i].start_lsn));
} }
p_env->gen.toc_init = true; p_env->gen.toc_init = true;
return true; return true;
@@ -1150,10 +1152,10 @@ get_mcn_win32ioctl (const _img_private_t *p_env) {
q_data_format.Track=0; q_data_format.Track=0;
if( ! DeviceIoControl( p_env->h_device_handle, if( ! DeviceIoControl( p_env->h_device_handle,
IOCTL_CDROM_READ_Q_CHANNEL, IOCTL_CDROM_READ_Q_CHANNEL,
&q_data_format, sizeof(q_data_format), &q_data_format, sizeof(q_data_format),
&mcn, sizeof(mcn), &mcn, sizeof(mcn),
&dw_bytes_returned, NULL ) ) { &dw_bytes_returned, NULL ) ) {
cdio_warn( "could not read Q Channel at track %d", 1); cdio_warn( "could not read Q Channel at track %d", 1);
} else if (mcn.Mcval) } else if (mcn.Mcval)
return strdup((const char *) mcn.MediaCatalog); return strdup((const char *) mcn.MediaCatalog);

View File

@@ -1,5 +1,5 @@
/* /*
Copyright (C) 2002, 2003, 2004, 2005, 2006, 2009 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2009, 2011
Rocky Bernstein <rocky@gnu.org> Rocky Bernstein <rocky@gnu.org>
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
@@ -277,9 +277,9 @@ init_solaris (_img_private_t *p_env)
*/ */
static driver_return_code_t static driver_return_code_t
run_mmc_cmd_solaris(void *p_user_data, unsigned int i_timeout_ms, run_mmc_cmd_solaris(void *p_user_data, unsigned int i_timeout_ms,
unsigned int i_cdb, const mmc_cdb_t *p_cdb, unsigned int i_cdb, const mmc_cdb_t *p_cdb,
cdio_mmc_direction_t e_direction, cdio_mmc_direction_t e_direction,
unsigned int i_buf, /*in/out*/ void *p_buf) unsigned int i_buf, /*in/out*/ void *p_buf)
{ {
const _img_private_t *p_env = p_user_data; const _img_private_t *p_env = p_user_data;
struct uscsi_cmd cgc; struct uscsi_cmd cgc;
@@ -1038,7 +1038,7 @@ cdio_get_devices_solaris (void)
/* Check if this is a directory, if so it's probably Solaris media */ /* Check if this is a directory, if so it's probably Solaris media */
if(S_ISDIR(st.st_mode)) { if(S_ISDIR(st.st_mode)) {
sprintf(volpath, "%s/s0", globbuf.gl_pathv[i]); snprintf(volpath, sizeof(volpath), "%s/s0", globbuf.gl_pathv[i]);
if(stat(volpath, &st) == 0) if(stat(volpath, &st) == 0)
cdio_add_device_list(&drives, volpath, &i_files); cdio_add_device_list(&drives, volpath, &i_files);
}else }else
@@ -1049,7 +1049,7 @@ cdio_get_devices_solaris (void)
if(stat(DEFAULT_CDIO_DEVICE, &st) == 0) { if(stat(DEFAULT_CDIO_DEVICE, &st) == 0) {
/* Check if this is a directory, if so it's probably Solaris media */ /* Check if this is a directory, if so it's probably Solaris media */
if(S_ISDIR(st.st_mode)) { if(S_ISDIR(st.st_mode)) {
sprintf(volpath, "%s/s0", DEFAULT_CDIO_DEVICE); snprintf(volpath, sizeof(volpath), "%s/s0", DEFAULT_CDIO_DEVICE);
if(stat(volpath, &st) == 0) if(stat(volpath, &st) == 0)
cdio_add_device_list(&drives, volpath, &i_files); cdio_add_device_list(&drives, volpath, &i_files);
}else }else

File diff suppressed because it is too large Load Diff