Go over for coding and code style.
This commit is contained in:
@@ -16,9 +16,9 @@
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/**
|
||||||
Regression test for MMC commands which don't involve read/write access.
|
Regression test for MMC commands which don't involve read/write access.
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -39,45 +39,43 @@
|
|||||||
|
|
||||||
#define SKIP_TEST 77
|
#define SKIP_TEST 77
|
||||||
|
|
||||||
/* The compiler warns if no prototypes are given before function definition */
|
/* gcc may warn if no prototypes are given before function definition */
|
||||||
|
|
||||||
static driver_return_code_t test_get_disc_erasable(const CdIo_t *p_cdio,
|
static int handle_outcome(CdIo_t *p_cdio, driver_return_code_t i_status,
|
||||||
const char *psz_source,
|
int *pi_sense_avail,
|
||||||
bool verbose);
|
cdio_mmc_request_sense_t * p_sense_reply,
|
||||||
|
unsigned int i_flag);
|
||||||
|
|
||||||
static int test_get_disctype(CdIo_t *p_cdio, bool b_verbose);
|
static int get_disctype(CdIo_t *p_cdio, bool b_verbose);
|
||||||
|
|
||||||
|
static driver_return_code_t get_disc_erasable(const CdIo_t *p_cdio,
|
||||||
|
const char *psz_source,
|
||||||
|
bool verbose);
|
||||||
|
|
||||||
static int test_handle_outcome(CdIo_t *p_cdio, driver_return_code_t i_status,
|
static int mode_sense(CdIo_t *p_cdio, int *pi_sense_avail,
|
||||||
int *pi_sense_avail,
|
cdio_mmc_request_sense_t *p_sense_reply,
|
||||||
cdio_mmc_request_sense_t * p_sense_reply,
|
unsigned int page_code, unsigned int subpage_code,
|
||||||
|
int i_alloc_len,
|
||||||
|
unsigned char *p_buf, int *pi_size,
|
||||||
|
unsigned int i_flag);
|
||||||
|
|
||||||
|
static void print_status_sense(int i_status, int i_sense_valid,
|
||||||
|
cdio_mmc_request_sense_t *p_sense_reply,
|
||||||
unsigned int i_flag);
|
unsigned int i_flag);
|
||||||
|
|
||||||
static void test_print_status_sense(int i_status, int i_sense_valid,
|
static int test_read(char *psz_drive_path, unsigned int i_flag);
|
||||||
cdio_mmc_request_sense_t *p_sense_reply,
|
|
||||||
unsigned int i_flag);
|
|
||||||
|
|
||||||
static int test_mode_sense(CdIo_t *p_cdio, int *pi_sense_avail,
|
static int test_unit_ready(CdIo_t *p_cdio, int *pi_sense_avail,
|
||||||
cdio_mmc_request_sense_t *p_sense_reply,
|
cdio_mmc_request_sense_t *p_sense_reply,
|
||||||
unsigned int page_code, unsigned int subpage_code,
|
|
||||||
int i_alloc_len,
|
|
||||||
unsigned char *p_buf, int *pi_size,
|
|
||||||
unsigned int i_flag);
|
unsigned int i_flag);
|
||||||
|
|
||||||
static int test_test_unit_ready(CdIo_t *p_cdio, int *pi_sense_avail,
|
|
||||||
cdio_mmc_request_sense_t *p_sense_reply,
|
|
||||||
unsigned int i_flag);
|
|
||||||
|
|
||||||
static int wait_for_drive(CdIo_t *p_cdio, unsigned int max_tries, bool b_verbose);
|
static int wait_for_drive(CdIo_t *p_cdio, unsigned int max_tries, bool b_verbose);
|
||||||
|
|
||||||
static int test_read(char *drive_path, unsigned int i_flag);
|
|
||||||
|
|
||||||
|
|
||||||
/* ------------------------- Helper functions ---------------------------- */
|
/* ------------------------- Helper functions ---------------------------- */
|
||||||
|
|
||||||
|
|
||||||
static driver_return_code_t
|
static driver_return_code_t
|
||||||
test_get_disc_erasable(const CdIo_t *p_cdio, const char *psz_source,
|
get_disc_erasable(const CdIo_t *p_cdio, const char *psz_source,
|
||||||
bool verbose)
|
bool verbose)
|
||||||
{
|
{
|
||||||
driver_return_code_t i_status;
|
driver_return_code_t i_status;
|
||||||
@@ -89,31 +87,8 @@ test_get_disc_erasable(const CdIo_t *p_cdio, const char *psz_source,
|
|||||||
return i_status;
|
return i_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= verbose
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
test_print_status_sense(int i_status, int i_sense_valid,
|
|
||||||
cdio_mmc_request_sense_t *p_sense_reply,
|
|
||||||
unsigned int i_flag)
|
|
||||||
{
|
|
||||||
if (!(i_flag & 1))
|
|
||||||
return;
|
|
||||||
fprintf(stderr, "return= %d , sense(%d)", i_status, i_sense_valid);
|
|
||||||
if (i_sense_valid >= 14)
|
|
||||||
fprintf(stderr, ": KEY=%s (%1.1X), ASC= %2.2X , ASCQ= %2.2X",
|
|
||||||
mmc_sense_key2str[p_sense_reply->sense_key],
|
|
||||||
p_sense_reply->sense_key,
|
|
||||||
p_sense_reply->asc,
|
|
||||||
p_sense_reply->ascq);
|
|
||||||
fprintf(stderr, "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= verbose
|
|
||||||
*/
|
|
||||||
static int
|
static int
|
||||||
test_get_disctype(CdIo_t *p_cdio, bool b_verbose)
|
get_disctype(CdIo_t *p_cdio, bool b_verbose)
|
||||||
{
|
{
|
||||||
cdio_mmc_feature_profile_t disctype;
|
cdio_mmc_feature_profile_t disctype;
|
||||||
driver_return_code_t i_status = mmc_get_disctype(p_cdio, 0, &disctype);
|
driver_return_code_t i_status = mmc_get_disctype(p_cdio, 0, &disctype);
|
||||||
@@ -127,17 +102,18 @@ test_get_disctype(CdIo_t *p_cdio, bool b_verbose)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= verbose
|
/**
|
||||||
|
@param flag bit0= verbose
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
test_handle_outcome(CdIo_t *p_cdio, driver_return_code_t i_status,
|
handle_outcome(CdIo_t *p_cdio, driver_return_code_t i_status,
|
||||||
int *pi_sense_avail,
|
int *pi_sense_avail,
|
||||||
cdio_mmc_request_sense_t * p_sense_reply,
|
cdio_mmc_request_sense_t * p_sense_reply,
|
||||||
unsigned int i_flag)
|
unsigned int i_flag)
|
||||||
{
|
{
|
||||||
cdio_mmc_request_sense_t *p_temp_sense_reply = NULL;
|
cdio_mmc_request_sense_t *p_temp_sense_reply = NULL;
|
||||||
*pi_sense_avail = mmc_last_cmd_sense(p_cdio, &p_temp_sense_reply);
|
*pi_sense_avail = mmc_last_cmd_sense(p_cdio, &p_temp_sense_reply);
|
||||||
test_print_status_sense(i_status, *pi_sense_avail, p_temp_sense_reply, i_flag & 1);
|
print_status_sense(i_status, *pi_sense_avail, p_temp_sense_reply, i_flag & 1);
|
||||||
if (18 <= *pi_sense_avail)
|
if (18 <= *pi_sense_avail)
|
||||||
memcpy(p_sense_reply, p_temp_sense_reply, sizeof(cdio_mmc_request_sense_t));
|
memcpy(p_sense_reply, p_temp_sense_reply, sizeof(cdio_mmc_request_sense_t));
|
||||||
else
|
else
|
||||||
@@ -146,20 +122,42 @@ test_handle_outcome(CdIo_t *p_cdio, driver_return_code_t i_status,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
@param i_flag bit0= verbose
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
print_status_sense(int i_status, int i_sense_valid,
|
||||||
|
cdio_mmc_request_sense_t *p_sense_reply,
|
||||||
|
unsigned int i_flag)
|
||||||
|
{
|
||||||
|
if (!(i_flag & 1))
|
||||||
|
return;
|
||||||
|
printf("return= %d , sense(%d)", i_status, i_sense_valid);
|
||||||
|
if (i_sense_valid >= 14)
|
||||||
|
printf(": KEY=%s (%1.1X), ASC= %2.2X , ASCQ= %2.2X",
|
||||||
|
mmc_sense_key2str[p_sense_reply->sense_key],
|
||||||
|
p_sense_reply->sense_key,
|
||||||
|
p_sense_reply->asc,
|
||||||
|
p_sense_reply->ascq);
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* --------------------------- MMC commands ------------------------------ */
|
/* --------------------------- MMC commands ------------------------------ */
|
||||||
|
|
||||||
|
|
||||||
/* @param flag bit0= verbose
|
/**
|
||||||
|
@param flag bit0= verbose
|
||||||
@param sense_avail Number of available sense bytes
|
@param sense_avail Number of available sense bytes
|
||||||
(18 get copied if all 18 exist)
|
(18 get copied if all 18 exist)
|
||||||
|
|
||||||
@param sense_reply eventual sense bytes
|
@param sense_reply eventual sense bytes
|
||||||
@return return value of mmc_run_cmd()
|
@return return value of mmc_run_cmd()
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
test_test_unit_ready(CdIo_t *p_cdio,
|
test_unit_ready(CdIo_t *p_cdio,
|
||||||
int *pi_sense_avail,
|
int *pi_sense_avail,
|
||||||
cdio_mmc_request_sense_t *p_sense_reply,
|
cdio_mmc_request_sense_t *p_sense_reply,
|
||||||
unsigned int i_flag)
|
unsigned int i_flag)
|
||||||
{
|
{
|
||||||
int i_status;
|
int i_status;
|
||||||
int old_log_level = cdio_loglevel_default;
|
int old_log_level = cdio_loglevel_default;
|
||||||
@@ -167,39 +165,39 @@ test_test_unit_ready(CdIo_t *p_cdio,
|
|||||||
cdio_loglevel_default = CDIO_LOG_WARN;
|
cdio_loglevel_default = CDIO_LOG_WARN;
|
||||||
|
|
||||||
if (i_flag & 1)
|
if (i_flag & 1)
|
||||||
fprintf(stderr, "test_test_unit_ready ... ");
|
printf("test_unit_ready ... ");
|
||||||
|
|
||||||
i_status = mmc_test_unit_ready(p_cdio, 0);
|
i_status = mmc_test_unit_ready(p_cdio, 0);
|
||||||
cdio_loglevel_default = old_log_level;
|
cdio_loglevel_default = old_log_level;
|
||||||
|
|
||||||
return test_handle_outcome(p_cdio, i_status, pi_sense_avail, p_sense_reply,
|
return handle_outcome(p_cdio, i_status, pi_sense_avail, p_sense_reply,
|
||||||
i_flag & 1);
|
i_flag & 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* BARELY OBTRUSIVE: MIGHT SPOIL BURN RUNS */
|
/* BARELY OBTRUSIVE: MIGHT RUIN A SIMULTANEOUS BURNING OPERATION ON THE DRIVE */
|
||||||
/* Fetch a mode page or a part of it from the drive.
|
/**
|
||||||
@param alloc_len The number of bytes to be requested from the drive and to
|
Fetch a mode page or a part of it from the drive.
|
||||||
be copied into parameter buf.
|
@param i_alloc_len The number of bytes to be requested from the drive and to
|
||||||
This has to include the 8 bytes of header and may not
|
be copied into parameter buf.
|
||||||
be less than 10.
|
This has to include the 8 bytes of header and may not
|
||||||
@param buf Will contain at most alloc_len many bytes. The first 8 are
|
be less than 10.
|
||||||
a Mode Parameter Header as of SPC-3 7.4.3, table 240.
|
@param p_buf Will contain at most alloc_len many bytes. The first 8 are
|
||||||
The further bytes are the mode page, typically as of
|
a Mode Parameter Header as of SPC-3 7.4.3, table 240.
|
||||||
MMC-5 7.2. There are meanwhile deprecated mode pages which
|
The further bytes are the mode page, typically as of
|
||||||
appear only in older versions of MMC.
|
MMC-5 7.2. There are meanwhile deprecated mode pages which
|
||||||
@param i_size Will return the number of actually read bytes resp. the
|
appear only in older versions of MMC.
|
||||||
number of available bytes. See flag bit1.
|
@param i_size Will return the number of actually read bytes resp. the
|
||||||
@param flag bit0= verbose
|
number of available bytes. See flag bit1.
|
||||||
bit1= Peek mode:
|
@param i_flag bit0= verbose
|
||||||
|
bit1= Peek mode:
|
||||||
Reply number of available bytes in *i_size and not
|
Reply number of available bytes in *i_size and not
|
||||||
the number of actually read bytes.
|
the number of actually read bytes.
|
||||||
@return return value of mmc_run_cmd(),
|
@return return value of mmc_run_cmd(),
|
||||||
or other driver_return_code_t
|
or other driver_return_code_t
|
||||||
*/
|
*/
|
||||||
static driver_return_code_t
|
static driver_return_code_t
|
||||||
test_mode_sense(CdIo_t *p_cdio, int *pi_sense_avail,
|
mode_sense(CdIo_t *p_cdio, int *pi_sense_avail,
|
||||||
cdio_mmc_request_sense_t *p_sense_reply,
|
cdio_mmc_request_sense_t *p_sense_reply,
|
||||||
unsigned int i_page_code, unsigned int subpage_code, int i_alloc_len,
|
unsigned int i_page_code, unsigned int subpage_code, int i_alloc_len,
|
||||||
unsigned char *p_buf, int *pi_size, unsigned int i_flag)
|
unsigned char *p_buf, int *pi_size, unsigned int i_flag)
|
||||||
@@ -210,11 +208,11 @@ test_mode_sense(CdIo_t *p_cdio, int *pi_sense_avail,
|
|||||||
return DRIVER_OP_BAD_PARAMETER;
|
return DRIVER_OP_BAD_PARAMETER;
|
||||||
|
|
||||||
if (i_flag & 1)
|
if (i_flag & 1)
|
||||||
fprintf(stderr, "test_mode_sense(0x%X, %X, %d) ... ",
|
printf("mode_sense(0x%X, %X, %d) ... ",
|
||||||
i_page_code, subpage_code, i_alloc_len);
|
i_page_code, subpage_code, i_alloc_len);
|
||||||
|
|
||||||
i_status = mmc_mode_sense_10(p_cdio, p_buf, i_alloc_len, i_page_code);
|
i_status = mmc_mode_sense_10(p_cdio, p_buf, i_alloc_len, i_page_code);
|
||||||
test_handle_outcome(p_cdio, i_status, pi_sense_avail, p_sense_reply, i_flag & 1);
|
handle_outcome(p_cdio, i_status, pi_sense_avail, p_sense_reply, i_flag & 1);
|
||||||
if (DRIVER_OP_SUCCESS != i_status)
|
if (DRIVER_OP_SUCCESS != i_status)
|
||||||
return i_status;
|
return i_status;
|
||||||
if (i_flag & 2)
|
if (i_flag & 2)
|
||||||
@@ -224,7 +222,8 @@ test_mode_sense(CdIo_t *p_cdio, int *pi_sense_avail,
|
|||||||
return i_status;
|
return i_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Watch drive by test unit ready loop until ready, no media or timeout.
|
/**
|
||||||
|
Watch drive by test unit ready loop until ready, no media or timeout.
|
||||||
@param b_verbose verbose
|
@param b_verbose verbose
|
||||||
@return 1= unit ready , 0= error , -1= severe failure, 2 = no media
|
@return 1= unit ready , 0= error , -1= severe failure, 2 = no media
|
||||||
*/
|
*/
|
||||||
@@ -236,7 +235,7 @@ wait_for_drive(CdIo_t *p_cdio, unsigned int i_max_tries, bool b_verbose)
|
|||||||
|
|
||||||
memset(&sense_reply, 0, sizeof(sense_reply));
|
memset(&sense_reply, 0, sizeof(sense_reply));
|
||||||
for (i = 0; i < i_max_tries; i++) {
|
for (i = 0; i < i_max_tries; i++) {
|
||||||
i_ret = test_test_unit_ready(p_cdio, &i_sense_avail, &sense_reply, b_verbose);
|
i_ret = test_unit_ready(p_cdio, &i_sense_avail, &sense_reply, b_verbose);
|
||||||
if (i_ret == 0) /* Unit is ready */
|
if (i_ret == 0) /* Unit is ready */
|
||||||
return 1;
|
return 1;
|
||||||
if (i_sense_avail < 18)
|
if (i_sense_avail < 18)
|
||||||
@@ -272,7 +271,7 @@ wait_for_drive(CdIo_t *p_cdio, unsigned int i_max_tries, bool b_verbose)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
This function bundles tests for the read capability to perform MMC
|
This function bundles tests for the read capability to perform MMC
|
||||||
commands and detecting the sense reply of MMC commands, which
|
commands and detecting the sense reply of MMC commands, which
|
||||||
indicates error causes or important drive events.
|
indicates error causes or important drive events.
|
||||||
@@ -283,107 +282,103 @@ wait_for_drive(CdIo_t *p_cdio, unsigned int i_max_tries, bool b_verbose)
|
|||||||
else an proposal for an exit() value is returned
|
else an proposal for an exit() value is returned
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
test_read(char *drive_path, unsigned int i_flag)
|
test_read(char *psz_drive_path, unsigned int i_flag)
|
||||||
{
|
{
|
||||||
int sense_avail = 0, i_ret, i_sense_valid, i_size, alloc_len = 10, verbose;
|
int sense_avail = 0, i_ret, i_sense_valid, i_size, alloc_len = 10;
|
||||||
int old_log_level;
|
bool b_verbose = !!(i_flag & 1);
|
||||||
cdio_mmc_request_sense_t sense_reply;
|
int old_log_level = cdio_loglevel_default;
|
||||||
unsigned char buf[10];
|
cdio_mmc_request_sense_t sense_reply;
|
||||||
CdIo_t *p_cdio;
|
unsigned char buf[10];
|
||||||
const char *scsi_tuple;
|
CdIo_t *p_cdio;
|
||||||
|
const char *scsi_tuple;
|
||||||
|
|
||||||
old_log_level = cdio_loglevel_default;
|
|
||||||
verbose = i_flag & 1;
|
|
||||||
|
|
||||||
p_cdio = cdio_open(drive_path, DRIVER_DEVICE);
|
p_cdio = cdio_open(psz_drive_path, DRIVER_DEVICE);
|
||||||
if (!p_cdio)
|
if (!p_cdio)
|
||||||
i_ret = SKIP_TEST - 16;
|
i_ret = SKIP_TEST - 16;
|
||||||
|
|
||||||
/* The further code produces some intentional failures which should not be
|
/* The further code produces some intentional failures which should not be
|
||||||
reported by mmc_run_cmd() as INFO messages.
|
reported by mmc_run_cmd() as INFO messages.
|
||||||
*/
|
*/
|
||||||
cdio_loglevel_default = CDIO_LOG_WARN;
|
cdio_loglevel_default = CDIO_LOG_WARN;
|
||||||
|
|
||||||
/* Test availability of info for cdrecord style adresses .
|
/* Test availability of info for cdrecord style adresses .
|
||||||
*/
|
*/
|
||||||
scsi_tuple = cdio_get_arg(p_cdio, "scsi-tuple");
|
scsi_tuple = cdio_get_arg(p_cdio, "scsi-tuple");
|
||||||
if (scsi_tuple == NULL) {
|
if (scsi_tuple == NULL) {
|
||||||
fprintf(stderr, "Error: cdio_get_arg(\"scsi-tuple\") returns NULL.\n");
|
fprintf(stderr, "Error: cdio_get_arg(\"scsi-tuple\") returns NULL.\n");
|
||||||
i_ret = 6; goto ex;
|
i_ret = 6; goto ex;
|
||||||
} else if (i_flag & 1)
|
} else if (i_flag & 1)
|
||||||
fprintf(stderr, "cdio_get_arg(\"scsi-tuple\") returns NULL.\n");
|
fprintf(stderr, "cdio_get_arg(\"scsi-tuple\") returns NULL.\n");
|
||||||
else if (i_flag & 1)
|
else if (i_flag & 1)
|
||||||
printf("Drive '%s' has cdio_get_arg(\"scsi-tuple\") = '%s'\n",
|
printf("Drive '%s' has cdio_get_arg(\"scsi-tuple\") = '%s'\n",
|
||||||
drive_path, scsi_tuple);
|
psz_drive_path, scsi_tuple);
|
||||||
|
|
||||||
/* Test availability of sense reply in case of unready drive.
|
/* Test availability of sense reply in case of unready drive.
|
||||||
E.g. if the tray is already ejected.
|
E.g. if the tray is already ejected.
|
||||||
*/
|
*/
|
||||||
i_ret = test_test_unit_ready(p_cdio, &sense_avail, &sense_reply, !!verbose);
|
i_ret = test_unit_ready(p_cdio, &sense_avail, &sense_reply, b_verbose);
|
||||||
if (i_ret != 0 && sense_avail < 18) {
|
if (i_ret != 0 && sense_avail < 18) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Error: Drive not ready. Only %d sense bytes. Expected >= 18.\n",
|
"Error: Drive not ready. Only %d sense bytes. Expected >= 18.\n",
|
||||||
sense_avail);
|
sense_avail);
|
||||||
i_ret = 2; goto ex;
|
i_ret = 2; goto ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cause sense reply failure by requesting inappropriate mode page 3Eh */
|
/* Cause sense reply failure by requesting inappropriate mode page 3Eh */
|
||||||
i_ret = test_mode_sense(p_cdio, &sense_avail, &sense_reply,
|
i_ret = mode_sense(p_cdio, &sense_avail, &sense_reply,
|
||||||
0x3e, 0, alloc_len, buf, &i_size, !!verbose);
|
0x3e, 0, alloc_len, buf, &i_size, b_verbose);
|
||||||
if (i_ret != 0 && sense_avail < 18) {
|
if (i_ret != 0 && sense_avail < 18) {
|
||||||
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Error: Deliberately illegal command yields only %d sense bytes. Expected >= 18.\n",
|
"Error: Deliberately illegal command yields only %d sense bytes. Expected >= 18.\n",
|
||||||
sense_avail);
|
sense_avail);
|
||||||
i_ret = 3; goto ex;
|
i_ret = 3; goto ex;
|
||||||
} else {
|
} else {
|
||||||
if (sense_reply.sense_key != 5) {
|
if (sense_reply.sense_key != 5) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Error: Sense key should be 5, got %d\n",
|
"Error: Sense key should be 5, got %d\n",
|
||||||
sense_reply.sense_key);
|
sense_reply.sense_key);
|
||||||
i_ret = 3; goto ex;
|
i_ret = 3; goto ex;
|
||||||
} else if (sense_reply.asc != 0x24) {
|
} else if (sense_reply.asc != 0x24) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Error: Sense code should be 24, got %d\n",
|
"Error: Sense code should be 24, got %d\n",
|
||||||
sense_reply.asc);
|
sense_reply.asc);
|
||||||
i_ret = 4; goto ex;
|
i_ret = 4; goto ex;
|
||||||
} else if (sense_reply.ascq != 0) {
|
} else if (sense_reply.ascq != 0) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Error: Sense code should be 24, got %d\n",
|
"Error: Sense code should be 24, got %d\n",
|
||||||
sense_reply.ascq);
|
sense_reply.ascq);
|
||||||
i_ret = 4; goto ex;
|
i_ret = 4; goto ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* How are we, finally ? */
|
||||||
|
i_ret = test_unit_ready(p_cdio, &i_sense_valid, &sense_reply, b_verbose);
|
||||||
|
if ((i_flag & 1) && 0 != i_ret && 2 == sense_reply.sense_key &&
|
||||||
|
0x3a == sense_reply.asc)
|
||||||
|
fprintf(stderr, "test_unit_ready: Note: No loaded media detected.\n");
|
||||||
|
i_ret = 0;
|
||||||
|
|
||||||
/* How are we, finally ? */
|
|
||||||
i_ret = test_test_unit_ready(p_cdio, &i_sense_valid, &sense_reply, !!verbose);
|
|
||||||
if ((i_flag & 1) && 0 != i_ret && 2 == sense_reply.sense_key &&
|
|
||||||
0x3a == sense_reply.asc)
|
|
||||||
fprintf(stderr, "test_unit_ready: Note: No loaded media detected.\n");
|
|
||||||
i_ret = 0;
|
|
||||||
|
|
||||||
ex:;
|
ex:;
|
||||||
cdio_loglevel_default = old_log_level;
|
cdio_loglevel_default = old_log_level;
|
||||||
cdio_destroy(p_cdio);
|
cdio_destroy(p_cdio);
|
||||||
return i_ret;
|
return i_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* --------------------------- main ----------------------------- */
|
/* --------------------------- main ----------------------------- */
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, const char *argv[])
|
main(int argc, const char *argv[])
|
||||||
{
|
{
|
||||||
CdIo_t *p_cdio;
|
CdIo_t *p_cdio;
|
||||||
char **ppsz_drives=NULL;
|
char **ppsz_drives = NULL;
|
||||||
const char *psz_source = NULL;
|
const char *psz_source = NULL;
|
||||||
int i_ret;
|
int i_ret;
|
||||||
int exitrc = 0;
|
int exitrc = 0;
|
||||||
bool b_verbose = (argc > 1);
|
bool b_verbose = (argc > 1);
|
||||||
driver_return_code_t i_status;
|
driver_return_code_t i_status;
|
||||||
|
|
||||||
|
|
||||||
cdio_loglevel_default = b_verbose ? CDIO_LOG_DEBUG : CDIO_LOG_INFO;
|
cdio_loglevel_default = b_verbose ? CDIO_LOG_DEBUG : CDIO_LOG_INFO;
|
||||||
|
|
||||||
ppsz_drives = cdio_get_devices(DRIVER_DEVICE);
|
ppsz_drives = cdio_get_devices(DRIVER_DEVICE);
|
||||||
@@ -411,12 +406,12 @@ main(int argc, const char *argv[])
|
|||||||
exit(2);
|
exit(2);
|
||||||
} else {
|
} else {
|
||||||
if (1 == i_ret) {
|
if (1 == i_ret) {
|
||||||
i_status = test_get_disc_erasable(p_cdio, psz_source, b_verbose);
|
i_status = get_disc_erasable(p_cdio, psz_source, b_verbose);
|
||||||
if (DRIVER_OP_SUCCESS != i_status) {
|
if (DRIVER_OP_SUCCESS != i_status) {
|
||||||
printf("Got status %d back from get_disc_erasable(%s)\n",
|
printf("Got status %d back from get_disc_erasable(%s)\n",
|
||||||
i_status, psz_source);
|
i_status, psz_source);
|
||||||
}
|
}
|
||||||
i_status = test_get_disctype(p_cdio, b_verbose);
|
i_status = get_disctype(p_cdio, b_verbose);
|
||||||
|
|
||||||
if ( psz_have_mmc
|
if ( psz_have_mmc
|
||||||
&& 0 == strncmp("true", psz_have_mmc, sizeof("true")) ) {
|
&& 0 == strncmp("true", psz_have_mmc, sizeof("true")) ) {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user