Expose hwinfo call as a cdio command. It was SCSI-MMC. This may help
on OSX.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/* -*- c -*-
|
/* -*- c -*-
|
||||||
$Id: cdio.h,v 1.60 2004/07/28 22:03:35 rocky Exp $
|
$Id: cdio.h,v 1.61 2004/08/27 02:50:13 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
||||||
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
||||||
@@ -55,6 +55,19 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/*! Size of fields returned by an INQUIRY command */
|
||||||
|
#define CDIO_MMC_HW_VENDOR_LEN 8 /**< length of vendor field */
|
||||||
|
#define CDIO_MMC_HW_MODEL_LEN 16 /**< length of model field */
|
||||||
|
#define CDIO_MMC_HW_REVISION_LEN 4 /**< length of revision field */
|
||||||
|
|
||||||
|
/*! Structure to return data given by the INQUIRY command */
|
||||||
|
typedef struct cdio_hwinfo
|
||||||
|
{
|
||||||
|
char vendor [CDIO_MMC_HW_VENDOR_LEN+1];
|
||||||
|
char model [CDIO_MMC_HW_MODEL_LEN+1];
|
||||||
|
char revision[CDIO_MMC_HW_REVISION_LEN+1];
|
||||||
|
} cdio_hwinfo_t;
|
||||||
|
|
||||||
/** This is an opaque structure for the CD object. */
|
/** This is an opaque structure for the CD object. */
|
||||||
typedef struct _CdIo CdIo;
|
typedef struct _CdIo CdIo;
|
||||||
|
|
||||||
@@ -245,6 +258,14 @@ extern "C" {
|
|||||||
cdio_drive_write_cap_t *p_write_cap,
|
cdio_drive_write_cap_t *p_write_cap,
|
||||||
cdio_drive_misc_cap_t *p_misc_cap);
|
cdio_drive_misc_cap_t *p_misc_cap);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get the CD-ROM hardware info via a SCSI MMC INQUIRY command.
|
||||||
|
False is returned if we had an error getting the information.
|
||||||
|
*/
|
||||||
|
bool cdio_get_hwinfo ( const CdIo *p_cdio,
|
||||||
|
/* out*/ cdio_hwinfo_t *p_hw_info );
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Get the media catalog number (MCN) from the CD.
|
Get the media catalog number (MCN) from the CD.
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: scsi_mmc.h,v 1.31 2004/08/10 02:29:46 rocky Exp $
|
$Id: scsi_mmc.h,v 1.32 2004/08/27 02:50:13 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
||||||
|
|
||||||
@@ -252,19 +252,6 @@
|
|||||||
conform to any
|
conform to any
|
||||||
Profile. */
|
Profile. */
|
||||||
|
|
||||||
/*! Size of fields returned by an INQUIRY command */
|
|
||||||
#define CDIO_MMC_HW_VENDOR_LEN 8 /**< length of vendor field */
|
|
||||||
#define CDIO_MMC_HW_MODEL_LEN 16 /**< length of model field */
|
|
||||||
#define CDIO_MMC_HW_REVISION_LEN 4 /**< length of revision field */
|
|
||||||
|
|
||||||
/*! Structure to return data given by the INQUIRY command */
|
|
||||||
typedef struct scsi_mmc_hwinfo
|
|
||||||
{
|
|
||||||
char vendor [CDIO_MMC_HW_VENDOR_LEN+1];
|
|
||||||
char model [CDIO_MMC_HW_MODEL_LEN+1];
|
|
||||||
char revision[CDIO_MMC_HW_REVISION_LEN+1];
|
|
||||||
} scsi_mmc_hwinfo_t;
|
|
||||||
|
|
||||||
/*! This is listed as optional in ATAPI 2.6, but is (curiously)
|
/*! This is listed as optional in ATAPI 2.6, but is (curiously)
|
||||||
missing from Mt. Fuji, Table 57. It _is_ mentioned in Mt. Fuji
|
missing from Mt. Fuji, Table 57. It _is_ mentioned in Mt. Fuji
|
||||||
Table 377 as an MMC command for SCSi devices though... Most ATAPI
|
Table 377 as an MMC command for SCSi devices though... Most ATAPI
|
||||||
@@ -407,7 +394,7 @@ discmode_t scsi_mmc_get_dvd_struct_physical ( const CdIo *p_cdio,
|
|||||||
False is returned if we had an error getting the information.
|
False is returned if we had an error getting the information.
|
||||||
*/
|
*/
|
||||||
bool scsi_mmc_get_hwinfo ( const CdIo *p_cdio,
|
bool scsi_mmc_get_hwinfo ( const CdIo *p_cdio,
|
||||||
/* out*/ scsi_mmc_hwinfo_t *p_hw_info );
|
/* out*/ cdio_hwinfo_t *p_hw_info );
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
54
lib/cdio.c
54
lib/cdio.c
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: cdio.c,v 1.67 2004/07/28 22:03:35 rocky Exp $
|
$Id: cdio.c,v 1.68 2004/08/27 02:50:13 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
||||||
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
#include <cdio/logging.h>
|
#include <cdio/logging.h>
|
||||||
#include "cdio_private.h"
|
#include "cdio_private.h"
|
||||||
|
|
||||||
static const char _rcsid[] = "$Id: cdio.c,v 1.67 2004/07/28 22:03:35 rocky Exp $";
|
static const char _rcsid[] = "$Id: cdio.c,v 1.68 2004/08/27 02:50:13 rocky Exp $";
|
||||||
|
|
||||||
|
|
||||||
const char *track_format2str[6] =
|
const char *track_format2str[6] =
|
||||||
@@ -431,6 +431,21 @@ cdio_get_devices_with_cap (char* search_devices[],
|
|||||||
return drives_ret;
|
return drives_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get medium associated with cd_obj.
|
||||||
|
*/
|
||||||
|
discmode_t
|
||||||
|
cdio_get_discmode (CdIo *cd_obj)
|
||||||
|
{
|
||||||
|
if (cd_obj == NULL) return CDIO_DISC_MODE_ERROR;
|
||||||
|
|
||||||
|
if (cd_obj->op.get_discmode) {
|
||||||
|
return cd_obj->op.get_discmode (cd_obj->env);
|
||||||
|
} else {
|
||||||
|
return CDIO_DISC_MODE_NO_INFO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Return the the kind of drive capabilities of device.
|
Return the the kind of drive capabilities of device.
|
||||||
|
|
||||||
@@ -439,7 +454,7 @@ cdio_get_devices_with_cap (char* search_devices[],
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
cdio_get_drive_cap (const CdIo *cdio,
|
cdio_get_drive_cap (const CdIo *p_cdio,
|
||||||
cdio_drive_read_cap_t *p_read_cap,
|
cdio_drive_read_cap_t *p_read_cap,
|
||||||
cdio_drive_write_cap_t *p_write_cap,
|
cdio_drive_write_cap_t *p_write_cap,
|
||||||
cdio_drive_misc_cap_t *p_misc_cap)
|
cdio_drive_misc_cap_t *p_misc_cap)
|
||||||
@@ -449,8 +464,8 @@ cdio_get_drive_cap (const CdIo *cdio,
|
|||||||
*p_write_cap = CDIO_DRIVE_CAP_UNKNOWN;
|
*p_write_cap = CDIO_DRIVE_CAP_UNKNOWN;
|
||||||
*p_misc_cap = CDIO_DRIVE_CAP_UNKNOWN;
|
*p_misc_cap = CDIO_DRIVE_CAP_UNKNOWN;
|
||||||
|
|
||||||
if (cdio && cdio->op.get_drive_cap) {
|
if (p_cdio && p_cdio->op.get_drive_cap) {
|
||||||
cdio->op.get_drive_cap(cdio->env, p_read_cap, p_write_cap, p_misc_cap);
|
p_cdio->op.get_drive_cap(p_cdio->env, p_read_cap, p_write_cap, p_misc_cap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -511,29 +526,32 @@ cdio_get_driver_id (const CdIo *cdio)
|
|||||||
CDIO_INVALID_TRACK is returned on error.
|
CDIO_INVALID_TRACK is returned on error.
|
||||||
*/
|
*/
|
||||||
track_t
|
track_t
|
||||||
cdio_get_first_track_num (const CdIo *cdio)
|
cdio_get_first_track_num (const CdIo *p_cdio)
|
||||||
{
|
{
|
||||||
if (NULL == cdio) return CDIO_INVALID_TRACK;
|
if (NULL == p_cdio) return CDIO_INVALID_TRACK;
|
||||||
|
|
||||||
if (cdio->op.get_first_track_num) {
|
if (p_cdio->op.get_first_track_num) {
|
||||||
return cdio->op.get_first_track_num (cdio->env);
|
return p_cdio->op.get_first_track_num (p_cdio->env);
|
||||||
} else {
|
} else {
|
||||||
return CDIO_INVALID_TRACK;
|
return CDIO_INVALID_TRACK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Get medium associated with cd_obj.
|
Return a string containing the name of the driver in use.
|
||||||
|
if CdIo is NULL (we haven't initialized a specific device driver),
|
||||||
|
then return NULL.
|
||||||
*/
|
*/
|
||||||
discmode_t
|
bool
|
||||||
cdio_get_discmode (CdIo *cd_obj)
|
cdio_get_hwinfo (const CdIo *p_cdio, cdio_hwinfo_t *hw_info)
|
||||||
{
|
{
|
||||||
if (cd_obj == NULL) return CDIO_DISC_MODE_ERROR;
|
if (!p_cdio) return false;
|
||||||
|
if (p_cdio->op.get_hwinfo) {
|
||||||
if (cd_obj->op.get_discmode) {
|
return p_cdio->op.get_hwinfo (p_cdio, hw_info);
|
||||||
return cd_obj->op.get_discmode (cd_obj->env);
|
|
||||||
} else {
|
} else {
|
||||||
return CDIO_DISC_MODE_NO_INFO;
|
/* Perhaps driver forgot to initialize. We are no worse off Using
|
||||||
|
scsi_mmc than returning false here. */
|
||||||
|
return scsi_mmc_get_hwinfo(p_cdio, hw_info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: cdio_private.h,v 1.39 2004/08/10 11:58:15 rocky Exp $
|
$Id: cdio_private.h,v 1.40 2004/08/27 02:50:13 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
||||||
|
|
||||||
@@ -109,18 +109,25 @@ extern "C" {
|
|||||||
cdio_drive_read_cap_t *p_read_cap,
|
cdio_drive_read_cap_t *p_read_cap,
|
||||||
cdio_drive_write_cap_t *p_write_cap,
|
cdio_drive_write_cap_t *p_write_cap,
|
||||||
cdio_drive_misc_cap_t *p_misc_cap);
|
cdio_drive_misc_cap_t *p_misc_cap);
|
||||||
/*!
|
|
||||||
Return the media catalog number MCN from the CD or NULL if
|
|
||||||
there is none or we don't have the ability to get it.
|
|
||||||
*/
|
|
||||||
char * (*get_mcn) (const void *env);
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Return the number of of the first track.
|
Return the number of of the first track.
|
||||||
CDIO_INVALID_TRACK is returned on error.
|
CDIO_INVALID_TRACK is returned on error.
|
||||||
*/
|
*/
|
||||||
track_t (*get_first_track_num) (void *env);
|
track_t (*get_first_track_num) (void *env);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get the CD-ROM hardware info via a SCSI MMC INQUIRY command.
|
||||||
|
False is returned if we had an error getting the information.
|
||||||
|
*/
|
||||||
|
bool (*get_hwinfo) ( const CdIo *p_cdio,
|
||||||
|
/* out*/ cdio_hwinfo_t *p_hw_info );
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Return the media catalog number MCN from the CD or NULL if
|
||||||
|
there is none or we don't have the ability to get it.
|
||||||
|
*/
|
||||||
|
char * (*get_mcn) (const void *env);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Return the number of tracks in the current medium.
|
Return the number of tracks in the current medium.
|
||||||
CDIO_INVALID_TRACK is returned on error.
|
CDIO_INVALID_TRACK is returned on error.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* Common SCSI Multimedia Command (MMC) routines.
|
/* Common SCSI Multimedia Command (MMC) routines.
|
||||||
|
|
||||||
$Id: scsi_mmc.c,v 1.25 2004/08/27 01:24:40 rocky Exp $
|
$Id: scsi_mmc.c,v 1.26 2004/08/27 02:50:13 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
|
||||||
|
|
||||||
@@ -429,7 +429,7 @@ scsi_mmc_get_dvd_struct_physical ( const CdIo *p_cdio, cdio_dvd_struct_t *s)
|
|||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
scsi_mmc_get_hwinfo ( const CdIo *p_cdio,
|
scsi_mmc_get_hwinfo ( const CdIo *p_cdio,
|
||||||
/*out*/ scsi_mmc_hwinfo_t *hw_info )
|
/*out*/ cdio_hwinfo_t *hw_info )
|
||||||
{
|
{
|
||||||
int i_status; /* Result of SCSI MMC command */
|
int i_status; /* Result of SCSI MMC command */
|
||||||
char buf[36] = { 0, }; /* Place to hold returned data */
|
char buf[36] = { 0, }; /* Place to hold returned data */
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: cd-drive.c,v 1.6 2004/08/07 11:26:01 rocky Exp $
|
$Id: cd-drive.c,v 1.7 2004/08/27 02:50:13 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
|
||||||
|
|
||||||
@@ -233,17 +233,17 @@ main(int argc, const char *argv[])
|
|||||||
cdio_drive_read_cap_t i_read_cap;
|
cdio_drive_read_cap_t i_read_cap;
|
||||||
cdio_drive_write_cap_t i_write_cap;
|
cdio_drive_write_cap_t i_write_cap;
|
||||||
cdio_drive_misc_cap_t i_misc_cap;
|
cdio_drive_misc_cap_t i_misc_cap;
|
||||||
|
cdio_hwinfo_t hwinfo;
|
||||||
CdIo *p_cdio = cdio_open(*ppsz_cd, DRIVER_UNKNOWN);
|
CdIo *p_cdio = cdio_open(*ppsz_cd, DRIVER_UNKNOWN);
|
||||||
scsi_mmc_hwinfo_t scsi_mmc_hwinfo;
|
|
||||||
|
|
||||||
cdio_get_drive_cap_dev(*ppsz_cd, &i_read_cap, &i_write_cap,
|
cdio_get_drive_cap_dev(*ppsz_cd, &i_read_cap, &i_write_cap,
|
||||||
&i_misc_cap);
|
&i_misc_cap);
|
||||||
printf("%28s: %s\n", "Drive", *ppsz_cd);
|
printf("%28s: %s\n", "Drive", *ppsz_cd);
|
||||||
if (scsi_mmc_get_hwinfo(p_cdio, &scsi_mmc_hwinfo)) {
|
if (cdio_get_hwinfo(p_cdio, &hwinfo)) {
|
||||||
printf("%-28s: %s\n%-28s: %s\n%-28s: %s\n",
|
printf("%-28s: %s\n%-28s: %s\n%-28s: %s\n",
|
||||||
"Vendor" , scsi_mmc_hwinfo.vendor,
|
"Vendor" , hwinfo.vendor,
|
||||||
"Model" , scsi_mmc_hwinfo.model,
|
"Model" , hwinfo.model,
|
||||||
"Revision", scsi_mmc_hwinfo.revision);
|
"Revision", hwinfo.revision);
|
||||||
}
|
}
|
||||||
print_mmc_drive_features(p_cdio);
|
print_mmc_drive_features(p_cdio);
|
||||||
print_drive_capabilities(i_read_cap, i_write_cap, i_misc_cap);
|
print_drive_capabilities(i_read_cap, i_write_cap, i_misc_cap);
|
||||||
@@ -259,17 +259,17 @@ main(int argc, const char *argv[])
|
|||||||
cdio_drive_read_cap_t i_read_cap;
|
cdio_drive_read_cap_t i_read_cap;
|
||||||
cdio_drive_write_cap_t i_write_cap;
|
cdio_drive_write_cap_t i_write_cap;
|
||||||
cdio_drive_misc_cap_t i_misc_cap;
|
cdio_drive_misc_cap_t i_misc_cap;
|
||||||
scsi_mmc_hwinfo_t scsi_mmc_hwinfo;
|
cdio_hwinfo_t hwinfo;
|
||||||
|
|
||||||
|
|
||||||
printf("Drive %s\n", source_name);
|
printf("Drive %s\n", source_name);
|
||||||
p_cdio = cdio_open (source_name, DRIVER_UNKNOWN);
|
p_cdio = cdio_open (source_name, DRIVER_UNKNOWN);
|
||||||
if (NULL != p_cdio) {
|
if (NULL != p_cdio) {
|
||||||
if (scsi_mmc_get_hwinfo(p_cdio, &scsi_mmc_hwinfo)) {
|
if (cdio_get_hwinfo(p_cdio, &hwinfo)) {
|
||||||
printf("%-28s: %s\n%-28s: %s\n%-28s: %s\n",
|
printf("%-28s: %s\n%-28s: %s\n%-28s: %s\n",
|
||||||
"Vendor" , scsi_mmc_hwinfo.vendor,
|
"Vendor" , hwinfo.vendor,
|
||||||
"Model" , scsi_mmc_hwinfo.model,
|
"Model" , hwinfo.model,
|
||||||
"Revision", scsi_mmc_hwinfo.revision);
|
"Revision", hwinfo.revision);
|
||||||
}
|
}
|
||||||
print_mmc_drive_features(p_cdio);
|
print_mmc_drive_features(p_cdio);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: cd-info.c,v 1.81 2004/08/06 00:53:58 rocky Exp $
|
$Id: cd-info.c,v 1.82 2004/08/27 02:50:13 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
|
||||||
Copyright (C) 1996, 1997, 1998 Gerd Knorr <kraxel@bytesex.org>
|
Copyright (C) 1996, 1997, 1998 Gerd Knorr <kraxel@bytesex.org>
|
||||||
@@ -985,12 +985,12 @@ main(int argc, const char *argv[])
|
|||||||
cdio_drive_read_cap_t i_read_cap;
|
cdio_drive_read_cap_t i_read_cap;
|
||||||
cdio_drive_write_cap_t i_write_cap;
|
cdio_drive_write_cap_t i_write_cap;
|
||||||
cdio_drive_misc_cap_t i_misc_cap;
|
cdio_drive_misc_cap_t i_misc_cap;
|
||||||
scsi_mmc_hwinfo_t scsi_mmc_hwinfo;
|
cdio_hwinfo_t hwinfo;
|
||||||
if (scsi_mmc_get_hwinfo(p_cdio, &scsi_mmc_hwinfo)) {
|
if (cdio_get_hwinfo(p_cdio, &hwinfo)) {
|
||||||
printf("%-28s: %s\n%-28s: %s\n%-28s: %s\n",
|
printf("%-28s: %s\n%-28s: %s\n%-28s: %s\n",
|
||||||
"Vendor" , scsi_mmc_hwinfo.vendor,
|
"Vendor" , hwinfo.vendor,
|
||||||
"Model" , scsi_mmc_hwinfo.model,
|
"Model" , hwinfo.model,
|
||||||
"Revision", scsi_mmc_hwinfo.revision);
|
"Revision", hwinfo.revision);
|
||||||
}
|
}
|
||||||
cdio_get_drive_cap(p_cdio, &i_read_cap, &i_write_cap, &i_misc_cap);
|
cdio_get_drive_cap(p_cdio, &i_read_cap, &i_write_cap, &i_misc_cap);
|
||||||
print_drive_capabilities(i_read_cap, i_write_cap, i_misc_cap);
|
print_drive_capabilities(i_read_cap, i_write_cap, i_misc_cap);
|
||||||
@@ -1004,13 +1004,13 @@ main(int argc, const char *argv[])
|
|||||||
if (NULL != d) {
|
if (NULL != d) {
|
||||||
for ( ; *d != NULL ; d++ ) {
|
for ( ; *d != NULL ; d++ ) {
|
||||||
CdIo *p_cdio = cdio_open(source_name, DRIVER_UNKNOWN);
|
CdIo *p_cdio = cdio_open(source_name, DRIVER_UNKNOWN);
|
||||||
scsi_mmc_hwinfo_t scsi_mmc_hwinfo;
|
cdio_hwinfo_t hwinfo;
|
||||||
printf("Drive %s\n", *d);
|
printf("Drive %s\n", *d);
|
||||||
if (scsi_mmc_get_hwinfo(p_cdio, &scsi_mmc_hwinfo)) {
|
if (scsi_mmc_get_hwinfo(p_cdio, &hwinfo)) {
|
||||||
printf("%-8s: %s\n%-8s: %s\n%-8s: %s\n",
|
printf("%-8s: %s\n%-8s: %s\n%-8s: %s\n",
|
||||||
"Vendor" , scsi_mmc_hwinfo.vendor,
|
"Vendor" , hwinfo.vendor,
|
||||||
"Model" , scsi_mmc_hwinfo.model,
|
"Model" , hwinfo.model,
|
||||||
"Revision", scsi_mmc_hwinfo.revision);
|
"Revision", hwinfo.revision);
|
||||||
}
|
}
|
||||||
if (p_cdio) cdio_destroy(p_cdio);
|
if (p_cdio) cdio_destroy(p_cdio);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user