Fixed all the signedness, non-constant initializer, and shadowed variable warnings in disk/zip.c and scsi/scsi_disk.c.

This commit is contained in:
OBattler
2018-09-12 19:46:26 +02:00
parent 4b64212b35
commit da440c30b5
3 changed files with 72 additions and 60 deletions

View File

@@ -9,7 +9,7 @@
* Implementation of the Iomega ZIP drive with SCSI(-like)
* commands, for both ATAPI and SCSI usage.
*
* Version: @(#)zip.c 1.0.21 2018/05/28
* Version: @(#)zip.c 1.0.22 2018/09/12
*
* Author: Miran Grca, <mgrca8@gmail.com>
*
@@ -129,13 +129,15 @@ const uint8_t zip_command_flags[0x100] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
static uint64_t zip_mode_sense_page_flags = (1LL << GPMODE_R_W_ERROR_PAGE) |
(1LL << 0x02LL) | (1LL << 0x2FLL) |
(1LL << GPMODE_ALL_PAGES);
static uint64_t zip_250_mode_sense_page_flags = (1LL << GPMODE_R_W_ERROR_PAGE) |
(1LL << 0x05LL) | (1LL << 0x08LL) |
(1LL << 0x2FLL) |
(1LL << GPMODE_ALL_PAGES);
static uint64_t zip_mode_sense_page_flags = (GPMODEP_R_W_ERROR_PAGE |
GPMODEP_UNK_PAGE_02 |
GPMODEP_UNK_PAGE_2F |
GPMODEP_ALL_PAGES);
static uint64_t zip_250_mode_sense_page_flags = (GPMODEP_R_W_ERROR_PAGE |
GPMODEP_UNK_PAGE_05 |
GPMODEP_UNK_PAGE_08 |
GPMODEP_UNK_PAGE_2F |
GPMODEP_ALL_PAGES);
static const mode_sense_pages_t zip_mode_sense_pages_default =
@@ -854,13 +856,13 @@ zip_mode_sense_read(zip_t *dev, uint8_t page_control, uint8_t page, uint8_t pos)
static uint32_t
zip_mode_sense(zip_t *dev, uint8_t *buf, uint32_t pos, uint8_t type, uint8_t block_descriptor_len)
{
uint64_t page_flags;
uint64_t pf;
uint8_t page_control = (type >> 6) & 3;
if (dev->drv->is_250)
page_flags = zip_250_mode_sense_page_flags;
pf = zip_250_mode_sense_page_flags;
else
page_flags = zip_mode_sense_page_flags;
pf = zip_mode_sense_page_flags;
int i = 0;
int j = 0;
@@ -889,7 +891,7 @@ zip_mode_sense(zip_t *dev, uint8_t *buf, uint32_t pos, uint8_t type, uint8_t blo
for (i = 0; i < 0x40; i++) {
if ((type == GPMODE_ALL_PAGES) || (type == i)) {
if (page_flags & (1LL << dev->current_page_code)) {
if (pf & (1LL << dev->current_page_code)) {
buf[pos++] = zip_mode_sense_read(dev, page_control, i, 0);
msplen = zip_mode_sense_read(dev, page_control, i, 1);
buf[pos++] = msplen;
@@ -907,7 +909,7 @@ zip_mode_sense(zip_t *dev, uint8_t *buf, uint32_t pos, uint8_t type, uint8_t blo
static void
zip_update_request_length(zip_t *dev, int len, int block_len)
{
uint32_t bt, min_len = 0;
int bt, min_len = 0;
dev->max_transfer_len = dev->request_length;
@@ -1227,7 +1229,7 @@ zip_data_phase_error(zip_t *dev)
static int
zip_blocks(zip_t *dev, uint32_t *len, int first_batch, int out)
zip_blocks(zip_t *dev, int32_t *len, int first_batch, int out)
{
dev->data_pos = 0;
@@ -1447,7 +1449,7 @@ zip_request_sense_for_scsi(zip_t *dev, uint8_t *buffer, uint8_t alloc_length)
static void
zip_set_buf_len(zip_t *dev, int32_t *BufLen, uint32_t *src_len)
zip_set_buf_len(zip_t *dev, int32_t *BufLen, int32_t *src_len)
{
if (dev->drv->bus_type == ZIP_BUS_SCSI) {
if (*BufLen == -1)
@@ -1485,9 +1487,10 @@ zip_command(zip_t *dev, uint8_t *cdb)
{
int pos = 0, block_desc = 0;
int ret;
uint32_t len, max_len;
uint32_t alloc_length, i = 0;
unsigned size_idx, idx = 0;
int32_t len, max_len;
int32_t alloc_length;
uint32_t i = 0;
int size_idx, idx = 0;
unsigned preamble_len;
int32_t blen = 0;
int32_t *BufLen;
@@ -1660,7 +1663,7 @@ zip_command(zip_t *dev, uint8_t *cdb)
dev->requested_blocks = max_len;
dev->packet_len = alloc_length;
zip_set_buf_len(dev, BufLen, &dev->packet_len);
zip_set_buf_len(dev, BufLen, (int32_t *) &dev->packet_len);
zip_data_command_finish(dev, alloc_length, 512, alloc_length, 0);
@@ -1747,7 +1750,7 @@ zip_command(zip_t *dev, uint8_t *cdb)
dev->requested_blocks = max_len;
dev->packet_len = max_len << 9;
zip_set_buf_len(dev, BufLen, &dev->packet_len);
zip_set_buf_len(dev, BufLen, (int32_t *) &dev->packet_len);
zip_data_command_finish(dev, dev->packet_len, 512, dev->packet_len, 1);
@@ -1809,7 +1812,7 @@ zip_command(zip_t *dev, uint8_t *cdb)
dev->requested_blocks = max_len;
dev->packet_len = alloc_length;
zip_set_buf_len(dev, BufLen, &dev->packet_len);
zip_set_buf_len(dev, BufLen, (int32_t *) &dev->packet_len);
zip_data_command_finish(dev, dev->packet_len, 512, dev->packet_len, 1);
@@ -2059,7 +2062,7 @@ atapi_out:
zip_buf_alloc(dev, 8);
if (zip_read_capacity(dev, dev->current_cdb, zipbufferb, &len) == 0) {
if (zip_read_capacity(dev, dev->current_cdb, zipbufferb, (uint32_t *) &len) == 0) {
zip_buf_free(dev);
return;
}
@@ -2165,9 +2168,11 @@ zip_phase_data_out(zip_t *dev)
uint8_t hdr_len, val, old_val, ch;
uint32_t last_to_write = 0, len = 0;
uint32_t last_to_write = 0;
uint32_t c, h, s;
int len = 0;
switch(dev->current_cdb[0]) {
case GPCMD_VERIFY_6:
case GPCMD_VERIFY_10:

View File

@@ -8,7 +8,7 @@
*
* SCSI controller handler header.
*
* Version: @(#)scsi_h 1.0.17 2018/06/02
* Version: @(#)scsi_h 1.0.18 2018/09/12
*
* Authors: TheCollector1995, <mariogplayer@gmail.com>
* Miran Grca, <mgrca8@gmail.com>
@@ -105,9 +105,16 @@
/* Mode page codes for presence */
#define GPMODEP_R_W_ERROR_PAGE 0x0000000000000002LL
#define GPMODEP_UNK_PAGE_02 0x0000000000000004LL
#define GPMODEP_UNK_PAGE_03 0x0000000000000008LL
#define GPMODEP_UNK_PAGE_04 0x0000000000000010LL
#define GPMODEP_UNK_PAGE_05 0x0000000000000020LL
#define GPMODEP_UNK_PAGE_08 0x0000000000000100LL
#define GPMODEP_CDROM_PAGE 0x0000000000002000LL
#define GPMODEP_CDROM_AUDIO_PAGE 0x0000000000004000LL
#define GPMODEP_CAPABILITIES_PAGE 0x0000040000000000LL
#define GPMODEP_UNK_PAGE_2F 0x0000800000000000LL
#define GPMODEP_UNK_PAGE_30 0x0001000000000000LL
#define GPMODEP_ALL_PAGES 0x8000000000000000LL
/* SCSI Status Codes */

View File

@@ -6,7 +6,7 @@
*
* Emulation of SCSI fixed disks.
*
* Version: @(#)scsi_disk.c 1.0.20 2018/05/28
* Version: @(#)scsi_disk.c 1.0.21 2018/09/12
*
* Author: Miran Grca, <mgrca8@gmail.com>
*
@@ -126,7 +126,10 @@ const uint8_t scsi_disk_command_flags[0x100] = {
};
uint64_t scsi_disk_mode_sense_page_flags = (1LL << 0x03) | (1LL << 0x04) | (1LL << 0x30) | (1LL << 0x3F);
uint64_t scsi_disk_mode_sense_page_flags = (GPMODEP_UNK_PAGE_03 |
GPMODEP_UNK_PAGE_04 |
GPMODEP_UNK_PAGE_30 |
GPMODEP_ALL_PAGES);
/* This should be done in a better way but for time being, it's been done this way so it's not as huge and more readable. */
static const mode_sense_pages_t scsi_disk_mode_sense_pages_default =
@@ -572,16 +575,29 @@ scsi_disk_request_sense_for_scsi(scsi_disk_t *dev, uint8_t *buffer, uint8_t allo
}
static void
scsi_disk_set_buf_len(scsi_disk_t *dev, int32_t *BufLen, int32_t *src_len)
{
if (*BufLen == -1)
*BufLen = *src_len;
else {
*BufLen = MIN(*src_len, *BufLen);
*src_len = *BufLen;
}
scsi_disk_log("SCSI HD %i: Actual transfer length: %i\n", dev->id, *BufLen);
}
void
scsi_disk_command(scsi_disk_t *dev, uint8_t *cdb)
{
uint8_t *hdbufferb;
int32_t *BufLen;
uint32_t len;
int max_len, pos = 0;
unsigned idx = 0;
int32_t len, max_len, alloc_length;
int pos = 0;
int idx = 0;
unsigned size_idx, preamble_len;
uint32_t alloc_length, last_sector = 0;
uint32_t last_sector = 0;
char device_identify[9] = { '8', '6', 'B', '_', 'H', 'D', '0', '0', 0 };
char device_identify_ex[15] = { '8', '6', 'B', '_', 'H', 'D', '0', '0', ' ', 'v', '1', '.', '0', '0', 0 };
int block_desc = 0;
@@ -646,8 +662,8 @@ scsi_disk_command(scsi_disk_t *dev, uint8_t *cdb)
case GPCMD_REQUEST_SENSE:
/* If there's a unit attention condition and there's a buffered not ready, a standalone REQUEST SENSE
should forget about the not ready, and report unit attention straight away. */
if ((*BufLen == -1) || (cdb[4] < *BufLen))
*BufLen = cdb[4];
len = cdb[4];
scsi_disk_set_buf_len(dev, BufLen, &len);
if (*BufLen < cdb[4])
cdb[4] = *BufLen;
@@ -660,10 +676,7 @@ scsi_disk_command(scsi_disk_t *dev, uint8_t *cdb)
case GPCMD_MECHANISM_STATUS:
len = (cdb[7] << 16) | (cdb[8] << 8) | cdb[9];
if ((*BufLen == -1) || (len < *BufLen))
*BufLen = len;
scsi_disk_set_buf_len(dev, BufLen, &len);
scsi_disk_set_phase(dev, SCSI_PHASE_DATA_IN);
scsi_disk_data_command_finish(dev, 8, 8, len, 0);
break;
@@ -704,9 +717,7 @@ scsi_disk_command(scsi_disk_t *dev, uint8_t *cdb)
alloc_length = dev->packet_len = max_len << 9;
if ((*BufLen == -1) || (alloc_length < *BufLen))
*BufLen = alloc_length;
scsi_disk_set_buf_len(dev, BufLen, &alloc_length);
scsi_disk_set_phase(dev, SCSI_PHASE_DATA_IN);
if (dev->requested_blocks > 1)
@@ -770,9 +781,7 @@ scsi_disk_command(scsi_disk_t *dev, uint8_t *cdb)
alloc_length = dev->packet_len = max_len << 9;
if ((*BufLen == -1) || (alloc_length < *BufLen))
*BufLen = alloc_length;
scsi_disk_set_buf_len(dev, BufLen, &alloc_length);
scsi_disk_set_phase(dev, SCSI_PHASE_DATA_OUT);
if (dev->requested_blocks > 1)
@@ -810,9 +819,7 @@ scsi_disk_command(scsi_disk_t *dev, uint8_t *cdb)
alloc_length = dev->packet_len = max_len << 9;
if ((*BufLen == -1) || (alloc_length < *BufLen))
*BufLen = alloc_length;
scsi_disk_set_buf_len(dev, BufLen, &alloc_length);
scsi_disk_set_phase(dev, SCSI_PHASE_DATA_OUT);
if (dev->requested_blocks > 1)
@@ -865,9 +872,7 @@ scsi_disk_command(scsi_disk_t *dev, uint8_t *cdb)
else if (len < alloc_length)
alloc_length = len;
if ((*BufLen == -1) || (alloc_length < *BufLen))
*BufLen = alloc_length;
scsi_disk_set_buf_len(dev, BufLen, &alloc_length);
scsi_disk_log("SCSI HDD %i: Reading mode page: %02X...\n", dev->id, cdb[2]);
scsi_disk_data_command_finish(dev, len, len, alloc_length, 0);
@@ -882,12 +887,9 @@ scsi_disk_command(scsi_disk_t *dev, uint8_t *cdb)
else
len = (cdb[7] << 8) | cdb[8];
if ((*BufLen == -1) || (len < *BufLen))
*BufLen = len;
scsi_disk_set_buf_len(dev, BufLen, &len);
dev->total_length = len;
dev->do_page_save = cdb[1] & 1;
scsi_disk_data_command_finish(dev, len, len, len, 1);
return;
@@ -989,8 +991,7 @@ atapi_out:
if (len > max_len)
len = max_len;
if ((*BufLen == -1) || (len < *BufLen))
*BufLen = len;
scsi_disk_set_buf_len(dev, BufLen, &len);
if (len > *BufLen)
len = *BufLen;
@@ -1023,13 +1024,12 @@ atapi_out:
case GPCMD_READ_CDROM_CAPACITY:
dev->temp_buffer = (uint8_t *) malloc(8);
if (scsi_disk_read_capacity(dev, dev->current_cdb, dev->temp_buffer, &len) == 0) {
if (scsi_disk_read_capacity(dev, dev->current_cdb, dev->temp_buffer, (uint32_t *) &len) == 0) {
scsi_disk_set_phase(dev, SCSI_PHASE_STATUS);
return;
}
if ((*BufLen == -1) || (len < *BufLen))
*BufLen = len;
scsi_disk_set_buf_len(dev, BufLen, &len);
scsi_disk_set_phase(dev, SCSI_PHASE_DATA_IN);
scsi_disk_data_command_finish(dev, len, len, len, 0);
@@ -1070,7 +1070,7 @@ scsi_disk_phase_data_in(scsi_disk_t *dev)
case GPCMD_READ_10:
case GPCMD_READ_12:
if ((dev->requested_blocks > 0) && (*BufLen > 0)) {
if (dev->packet_len > *BufLen)
if (dev->packet_len > (uint32_t) *BufLen)
hdd_image_read(dev->id, dev->sector_pos, *BufLen >> 9, hdbufferb);
else
hdd_image_read(dev->id, dev->sector_pos, dev->requested_blocks, hdbufferb);
@@ -1126,7 +1126,7 @@ scsi_disk_phase_data_out(scsi_disk_t *dev)
case GPCMD_WRITE_12:
case GPCMD_WRITE_AND_VERIFY_12:
if ((dev->requested_blocks > 0) && (*BufLen > 0)) {
if (dev->packet_len > *BufLen)
if (dev->packet_len > (uint32_t) *BufLen)
hdd_image_write(dev->id, dev->sector_pos, *BufLen >> 9, hdbufferb);
else
hdd_image_write(dev->id, dev->sector_pos, dev->requested_blocks, hdbufferb);
@@ -1138,7 +1138,7 @@ scsi_disk_phase_data_out(scsi_disk_t *dev)
else
last_to_write = dev->sector_pos + dev->sector_len - 1;
for (i = dev->sector_pos; i <= last_to_write; i++) {
for (i = dev->sector_pos; i <= (int) last_to_write; i++) {
if (dev->current_cdb[1] & 2) {
hdbufferb[0] = (i >> 24) & 0xff;
hdbufferb[1] = (i >> 16) & 0xff;