Remove some cast for improve error detection

Signed-off-by: Ernesto Castellotti <erny.castell@gmail.com>
This commit is contained in:
Ernesto Castellotti 2019-08-28 16:29:53 +02:00
parent 4caee1c98f
commit 89d98a759a
4 changed files with 36 additions and 38 deletions

View File

@ -22,7 +22,7 @@ align (1) struct UsbExtremeV0
char[USBEXTREME_NAME_LENGTH] name;
char[USBEXTREME_ID_LENGTH] id;
uint8_t n_parts;
uint8_t type;
SCECdvdMediaType type;
uint8_t[4] empty;
uint8_t magic;
uint8_t[USBEXTREME_NAME_EXT_LENGTH] empty2;
@ -35,10 +35,10 @@ align (1) struct UsbExtremeV1
char[USBEXTREME_NAME_LENGTH] name;
char[USBEXTREME_ID_LENGTH] id;
uint8_t n_parts;
uint8_t type;
SCECdvdMediaType type;
uint16_t size;
uint8_t videoMode;
uint8_t usbExtremeVersion;
UsbExtremeVersion usbExtremeVersion;
uint8_t magic;
char[USBEXTREME_NAME_EXT_LENGTH] nameExt;
}
@ -47,28 +47,27 @@ struct UsbExtremeHeaders
{
const(void)* firstHeader;
const(UsbExtremeBase)[] headers;
int numHeaders;
size_t numHeaders;
size_t headersLen;
UsbExtremeVersion oueVersion;
}
struct UsbExtremeFilestat
{
int offset;
size_t offset;
char[USBEXTREME_NAME_LENGTH + USBEXTREME_NAME_EXT_LENGTH] name;
SCECdvdMediaType type;
uint16_t size;
uint8_t videoMode;
UsbExtremeVersion usbExtremeVersion;
}
enum UsbExtremeVersion
enum UsbExtremeVersion : uint8_t
{
V0 = 0,
V1,
Unknown,
}
enum SCECdvdMediaType
enum SCECdvdMediaType : uint8_t
{
SCECdGDTFUNCFAIL = -1,
SCECdNODISC = 0,
SCECdDETCT,
SCECdDETCTCD,
@ -85,9 +84,9 @@ enum SCECdvdMediaType
SCECdIllegalMediaoffset,
}
extern (D) bool isOue(const(void)[] headers);
extern (D) UsbExtremeVersion getVersion(uint8_t usbExtremeVersion);
extern (D) int oueNumHeaders(const(void)[] headers);
extern (D) int ouePointHeaders(ref const(UsbExtremeBase)[] headers, const(void)[] rawHeaders);
extern (D) UsbExtremeVersion getVersion(UsbExtremeVersion usbExtremeVersion);
extern (D) size_t oueNumHeaders(const(void)[] headers);
extern (D) size_t ouePointHeaders(ref const(UsbExtremeBase)[] headers, const(void)[] rawHeaders);
extern (D) UsbExtremeVersion oueHeadersVersion(const(void)[] headers);
extern (D) int oueReadHeaders(ref UsbExtremeHeaders headers, const(void)[] rawHeaders);
extern (D) UsbExtremeFilestat[] oueRead(UsbExtremeFilestat[] filestats, const(UsbExtremeHeaders) headers);

View File

@ -71,7 +71,7 @@ typedef struct __attribute__((__packed__)) {
} usb_extreme_v1;
typedef struct {
int offset;
size_t offset;
char name[USBEXTREME_NAME_LENGTH + USBEXTREME_NAME_EXT_LENGTH];
SCECdvdMediaType type;
u16 size;
@ -82,7 +82,7 @@ typedef struct {
typedef struct {
void *first_header;
usb_extreme_base *headers;
int num_headers;
size_t num_headers;
size_t headerslen;
usb_extreme_versions version;
} usb_extreme_headers;
@ -92,13 +92,13 @@ typedef struct {
/* Global headers functions */
int is_oue(const void *headers, const size_t headerslen);
usb_extreme_versions get_version(u8 version);
int oue_point_headers(usb_extreme_base **headers, void *raw_headers, size_t headerslen);
int oue_num_headers(int *num_headers, const void *headers, size_t headerslen);
size_t oue_point_headers(usb_extreme_base **headers, void *raw_headers, size_t headerslen);
size_t oue_num_headers(size_t *num_headers, const void *headers, size_t headerslen);
int oue_version(usb_extreme_versions *version, const void *headers, size_t headerslen);
int oue_read_headers(usb_extreme_headers *headers, void *raw_headers, const size_t headerslen);
/* Read functions */
int oue_read(usb_extreme_filestat *filestats, const usb_extreme_headers headers, const int filestats_nlen);
size_t oue_read(usb_extreme_filestat *filestats, const usb_extreme_headers headers, const int filestats_nlen);
/* implementation in development
*

View File

@ -7,16 +7,16 @@ extern(C) int is_oue(const(void)* headers, size_t headersLen) {
}
extern(C) UsbExtremeVersion get_version(uint8_t usbExtremeVersion) {
return getVersion(usbExtremeVersion);
return getVersion(cast(UsbExtremeVersion) usbExtremeVersion);
}
extern(C) int oue_num_headers(int *numHeaders, const(void) *headers, size_t headersLen) {
extern(C) size_t oue_num_headers(size_t *numHeaders, const(void) *headers, size_t headersLen) {
auto result = oueNumHeaders(headers[0..headersLen]);
*numHeaders = result;
return result;
}
extern(C) int oue_point_headers(const(UsbExtremeBase)** headers, const(void)* rawHeaders, size_t headersLen) {
extern(C) size_t oue_point_headers(const(UsbExtremeBase)** headers, const(void)* rawHeaders, size_t headersLen) {
auto len = headersLen / UsbExtremeBase.sizeof;
const(UsbExtremeBase)[] headersArr = (*headers)[0..len];
return ouePointHeaders(headersArr, rawHeaders[0..headersLen]);
@ -37,7 +37,7 @@ extern(C) int oue_read_headers(UsbExtremeHeaders* headers, const(void)* rawHeade
return oueReadHeaders(*headers, rawHeaders[0..headersLen]);
}
extern(C) int oue_read(UsbExtremeFilestat* filestat, const(UsbExtremeHeaders) headers, int filestatsLen) {
extern(C) size_t oue_read(UsbExtremeFilestat* filestat, const(UsbExtremeHeaders) headers, int filestatsLen) {
auto result = oueRead(filestat[0..filestatsLen], headers);
return cast(int) result.length;
return result.length;
}

View File

@ -19,7 +19,7 @@ align(1) struct UsbExtremeV0 {
char[USBEXTREME_NAME_LENGTH] name;
char[USBEXTREME_ID_LENGTH] id;
uint8_t n_parts;
uint8_t type;
SCECdvdMediaType type;
uint8_t[4] empty;
uint8_t magic;
uint8_t[USBEXTREME_NAME_EXT_LENGTH] empty2;
@ -30,10 +30,10 @@ align(1) struct UsbExtremeV1 {
char[USBEXTREME_NAME_LENGTH] name;
char[USBEXTREME_ID_LENGTH] id;
uint8_t n_parts;
uint8_t type;
SCECdvdMediaType type;
uint16_t size;
uint8_t videoMode;
uint8_t usbExtremeVersion;
UsbExtremeVersion usbExtremeVersion;
uint8_t magic;
char[USBEXTREME_NAME_EXT_LENGTH] nameExt;
}
@ -41,13 +41,13 @@ align(1) struct UsbExtremeV1 {
struct UsbExtremeHeaders {
const(void)* firstHeader;
const(UsbExtremeBase)[] headers;
int numHeaders;
size_t numHeaders;
size_t headersLen;
UsbExtremeVersion oueVersion;
}
struct UsbExtremeFilestat {
int offset;
size_t offset;
char[USBEXTREME_NAME_LENGTH + USBEXTREME_NAME_EXT_LENGTH] name;
SCECdvdMediaType type;
uint16_t size;
@ -55,14 +55,13 @@ struct UsbExtremeFilestat {
UsbExtremeVersion usbExtremeVersion;
}
enum UsbExtremeVersion {
enum UsbExtremeVersion : uint8_t {
V0 = 0x00,
V1,
Unknown
}
enum SCECdvdMediaType {
SCECdGDTFUNCFAIL = -1,
enum SCECdvdMediaType : uint8_t {
SCECdNODISC = 0x00,
SCECdDETCT,
SCECdDETCTCD,
@ -93,24 +92,24 @@ extern(D) bool isOue(const(void)[] headers) {
return true;
}
extern(D) UsbExtremeVersion getVersion(uint8_t usbExtremeVersion) {
extern(D) UsbExtremeVersion getVersion(UsbExtremeVersion usbExtremeVersion) {
switch (usbExtremeVersion) {
case 0: {
case UsbExtremeVersion.V0: {
return UsbExtremeVersion.V0;
}
case 1: {
case UsbExtremeVersion.V1: {
return UsbExtremeVersion.V1;
}
default: {
return UsbExtremeVersion.V1;
return UsbExtremeVersion.V0;
}
}
}
extern(D) int oueNumHeaders(const(void)[] headers) {
auto headersLen = cast(int) (castArray!(UsbExtremeBase)(headers).length);
extern(D) size_t oueNumHeaders(const(void)[] headers) {
auto headersLen = castArray!(UsbExtremeBase)(headers).length;
if (!isOue(headers)) {
return -1;
@ -119,7 +118,7 @@ extern(D) int oueNumHeaders(const(void)[] headers) {
return headersLen;
}
extern(D) int ouePointHeaders(ref const(UsbExtremeBase)[] headers, const(void)[] rawHeaders) {
extern(D) size_t ouePointHeaders(ref const(UsbExtremeBase)[] headers, const(void)[] rawHeaders) {
auto headersLen = oueNumHeaders(rawHeaders);
if (headersLen <= 0) {
@ -195,8 +194,8 @@ extern(D) UsbExtremeFilestat[] oueRead(UsbExtremeFilestat[] filestats, const(Usb
}
filestat.size = size;
filestat.type = cast(SCECdvdMediaType) header.type;
filestat.offset = cast(int) i;
filestat.type = header.type;
filestat.offset = i;
filestat.videoMode = videoMode;
filestat.usbExtremeVersion = headerVersion;
headersLength -= 1;