fix: additional case of error with blank media in medium info
This completes 396c73f5c8
This commit is contained in:
@@ -2595,6 +2595,7 @@ int ReadSectorsFast(DeviceHandle *dh, unsigned char *buf, gint64 s, int nsectors
|
|||||||
Image* OpenImageFromDevice(char *device, int query_only)
|
Image* OpenImageFromDevice(char *device, int query_only)
|
||||||
{ Image *image = NULL;
|
{ Image *image = NULL;
|
||||||
DeviceHandle *dh = NULL;
|
DeviceHandle *dh = NULL;
|
||||||
|
int subTypeMasked;
|
||||||
|
|
||||||
/* Open the device. */
|
/* Open the device. */
|
||||||
|
|
||||||
@@ -2633,7 +2634,11 @@ Image* OpenImageFromDevice(char *device, int query_only)
|
|||||||
|
|
||||||
Verbose("# query_type() returned.\n");
|
Verbose("# query_type() returned.\n");
|
||||||
|
|
||||||
if(dh->subType == UNSUPPORTED)
|
/* subType is not set by get_configuration() but by query_cd() for CD.
|
||||||
|
So if we accept blank media (query_only == 2), then UNSUPPORTED for CD
|
||||||
|
is not an error, it just mean query_cd() didn't fill it because it
|
||||||
|
doesn't work for blank media as there's no TOC */
|
||||||
|
if(dh->subType == UNSUPPORTED && !(query_only == 2 && dh->mainType == CD))
|
||||||
{ char *td = alloca(strlen(dh->typeDescr)+1);
|
{ char *td = alloca(strlen(dh->typeDescr)+1);
|
||||||
|
|
||||||
strcpy(td, dh->typeDescr);
|
strcpy(td, dh->typeDescr);
|
||||||
@@ -2642,7 +2647,7 @@ Image* OpenImageFromDevice(char *device, int query_only)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(dh->sessions>1)
|
if(dh->sessions>1 && query_only != 2)
|
||||||
{ int sessions = dh->sessions;
|
{ int sessions = dh->sessions;
|
||||||
|
|
||||||
CloseDevice(dh);
|
CloseDevice(dh);
|
||||||
@@ -2707,7 +2712,15 @@ Image* OpenImageFromDevice(char *device, int query_only)
|
|||||||
dh->sectors = query_size(image);
|
dh->sectors = query_size(image);
|
||||||
Verbose("# returned: %lld sectors\n", dh->sectors);
|
Verbose("# returned: %lld sectors\n", dh->sectors);
|
||||||
|
|
||||||
switch(dh->subType & MAIN_TYPE_MASK)
|
subTypeMasked = dh->subType & MAIN_TYPE_MASK;
|
||||||
|
/* Handle the special case of blank CDs, that have no subType
|
||||||
|
see above comment for more information: */
|
||||||
|
if (query_only == 2 && subTypeMasked == 0 && dh->mainType == CD)
|
||||||
|
{ Verbose("This may be a blank CD, adjusting subTypeMasked");
|
||||||
|
subTypeMasked = CD;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(subTypeMasked)
|
||||||
{ case BD:
|
{ case BD:
|
||||||
case DVD:
|
case DVD:
|
||||||
case CD:
|
case CD:
|
||||||
|
|||||||
Reference in New Issue
Block a user