amex: Use iobuf_write() instead of pointer casts

This commit is contained in:
Tau 2019-10-13 14:48:10 -04:00
parent bbbb6d08b0
commit 6bdd1f90bc
4 changed files with 48 additions and 52 deletions

View File

@ -149,26 +149,25 @@ static HRESULT ds_handle_ioctl(struct irp *irp)
static HRESULT ds_ioctl_get_geometry(struct irp *irp) static HRESULT ds_ioctl_get_geometry(struct irp *irp)
{ {
DISK_GEOMETRY *out; DISK_GEOMETRY out;
HRESULT hr;
if (irp->read.nbytes < sizeof(*out)) {
dprintf("DS: Invalid ioctl response buffer size\n");
return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
}
dprintf("DS: Get geometry\n"); dprintf("DS: Get geometry\n");
out = (DISK_GEOMETRY *) irp->read.bytes; memset(&out, 0, sizeof(out));
out->Cylinders.QuadPart = 1; out.Cylinders.QuadPart = 1;
out->MediaType = 0; out.MediaType = 0;
out->TracksPerCylinder = 1; out.TracksPerCylinder = 1;
out->SectorsPerTrack = 2; out.SectorsPerTrack = 2;
out->BytesPerSector = 32; out.BytesPerSector = 32;
irp->read.pos = sizeof(*out); hr = iobuf_write(&irp->read, &out, sizeof(out));
return S_OK; if (FAILED(hr)) {
dprintf("DS: Get geometry failed: %08x\n", (int) hr);
}
return hr;
} }
static HRESULT ds_ioctl_setup(struct irp *irp) static HRESULT ds_ioctl_setup(struct irp *irp)

View File

@ -118,28 +118,27 @@ static HRESULT eeprom_handle_ioctl(struct irp *irp)
static HRESULT eeprom_ioctl_get_geometry(struct irp *irp) static HRESULT eeprom_ioctl_get_geometry(struct irp *irp)
{ {
DISK_GEOMETRY *out; DISK_GEOMETRY out;
HRESULT hr;
if (irp->read.nbytes < sizeof(*out)) {
dprintf("EEPROM: Invalid ioctl response buffer size\n");
return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
}
dprintf("EEPROM: Get geometry\n"); dprintf("EEPROM: Get geometry\n");
/* Not the real values, just bullshitting something for now */ /* Not the real values, just bullshitting something for now */
out = (DISK_GEOMETRY *) irp->read.bytes; memset(&out, 0, sizeof(out));
out->Cylinders.QuadPart = 0x800; out.Cylinders.QuadPart = 0x800;
out->MediaType = 0; out.MediaType = 0;
out->TracksPerCylinder = 1; out.TracksPerCylinder = 1;
out->SectorsPerTrack = 2; out.SectorsPerTrack = 2;
out->BytesPerSector = 4; out.BytesPerSector = 4;
irp->read.pos = sizeof(*out); hr = iobuf_write(&irp->read, &out, sizeof(out));
return S_OK; if (FAILED(hr)) {
dprintf("EEPROM: Get geometry failed: %08x\n", (int) hr);
}
return hr;
} }
static HRESULT eeprom_handle_read(struct irp *irp) static HRESULT eeprom_handle_read(struct irp *irp)

View File

@ -205,18 +205,17 @@ static HRESULT gpio_ioctl_get_psw(struct irp *irp)
static HRESULT gpio_ioctl_describe(struct irp *irp) static HRESULT gpio_ioctl_describe(struct irp *irp)
{ {
HRESULT hr;
dprintf("GPIO: Describe GPIO ports\n"); dprintf("GPIO: Describe GPIO ports\n");
if (irp->read.nbytes < sizeof(gpio_ports)) { hr = iobuf_write(&irp->read, &gpio_ports, sizeof(gpio_ports));
dprintf("GPIO: Descriptor read buffer too small\n");
return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER); if (FAILED(hr)) {
dprintf("GPIO: Describe GPIO ports failed: %08x\n", (int) hr);
} }
memcpy(irp->read.bytes, &gpio_ports, sizeof(gpio_ports)); return hr;
irp->read.pos = sizeof(gpio_ports);
return S_OK;
} }
static HRESULT gpio_ioctl_set_leds(struct irp *irp) static HRESULT gpio_ioctl_set_leds(struct irp *irp)

View File

@ -114,24 +114,23 @@ static HRESULT sram_handle_ioctl(struct irp *irp)
static HRESULT sram_ioctl_get_geometry(struct irp *irp) static HRESULT sram_ioctl_get_geometry(struct irp *irp)
{ {
DISK_GEOMETRY *out; DISK_GEOMETRY out;
HRESULT hr;
if (irp->read.nbytes < sizeof(*out)) {
dprintf("SRAM: Invalid ioctl response buffer size\n");
return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
}
dprintf("SRAM: Get geometry\n"); dprintf("SRAM: Get geometry\n");
out = (DISK_GEOMETRY *) irp->read.bytes; memset(&out, 0, sizeof(out));
out->Cylinders.QuadPart = 0x20000; out.Cylinders.QuadPart = 0x20000;
out->MediaType = 0; out.MediaType = 0;
out->TracksPerCylinder = 1; out.TracksPerCylinder = 1;
out->SectorsPerTrack = 1; out.SectorsPerTrack = 1;
out->BytesPerSector = 4; out.BytesPerSector = 4;
irp->read.pos = sizeof(*out); hr = iobuf_write(&irp->read, &out, sizeof(out));
return S_OK; if (FAILED(hr)) {
dprintf("SRAM: Get geometry failed: %08x\n", (int) hr);
}
return hr;
} }