From 89d98a759ab4111116fbe1cd6d130296c691dd24 Mon Sep 17 00:00:00 2001 From: Ernesto Castellotti Date: Wed, 28 Aug 2019 16:29:53 +0200 Subject: [PATCH] Remove some cast for improve error detection Signed-off-by: Ernesto Castellotti --- include/usbextreme.di | 21 ++++++++++----------- include/usbextreme.h | 10 +++++----- lib/cabi.d | 10 +++++----- lib/usbextreme.d | 33 ++++++++++++++++----------------- 4 files changed, 36 insertions(+), 38 deletions(-) diff --git a/include/usbextreme.di b/include/usbextreme.di index f9e903c..4d4c4dc 100644 --- a/include/usbextreme.di +++ b/include/usbextreme.di @@ -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); diff --git a/include/usbextreme.h b/include/usbextreme.h index 92c7b7d..41b0ce5 100644 --- a/include/usbextreme.h +++ b/include/usbextreme.h @@ -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 * diff --git a/lib/cabi.d b/lib/cabi.d index de852cb..53888b8 100644 --- a/lib/cabi.d +++ b/lib/cabi.d @@ -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; } diff --git a/lib/usbextreme.d b/lib/usbextreme.d index 7360cf9..c97516d 100644 --- a/lib/usbextreme.d +++ b/lib/usbextreme.d @@ -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;