summaryrefslogtreecommitdiffstats
path: root/src/devices/bus/coco/coco_dwsock.cpp
diff options
context:
space:
mode:
author Vas Crabb <cuavas@users.noreply.github.com>2021-08-22 09:06:15 +1000
committer GitHub <noreply@github.com>2021-08-22 09:06:15 +1000
commite8bbea1fc6e94e14768509d322f6c624403ffb36 (patch)
tree74dd1606a900d83de8aecff17a6737af4113308d /src/devices/bus/coco/coco_dwsock.cpp
parente319bde5fc3696d7f48f62b15b6366c4377fe5d1 (diff)
formats, osd, util: Started refactoring file I/O stuff. (#8456)
Added more modern generic I/O interfaces with implementation backed by stdio, osd_file and core_file, replacing io_generic. Also replaced core_file's build-in zlib compression with a filter. unzip.cpp, un7z.cpp: Added option to supply abstract I/O interface rather than filename. Converted osd_file, core_file, archive_file, chd_file and device_image_interface to use std::error_condition rather than their own error enums. Allow mounting TI-99 RPK from inside archives.
Diffstat (limited to 'src/devices/bus/coco/coco_dwsock.cpp')
-rw-r--r--src/devices/bus/coco/coco_dwsock.cpp41
1 files changed, 19 insertions, 22 deletions
diff --git a/src/devices/bus/coco/coco_dwsock.cpp b/src/devices/bus/coco/coco_dwsock.cpp
index b970458c91c..a69ac57b4c4 100644
--- a/src/devices/bus/coco/coco_dwsock.cpp
+++ b/src/devices/bus/coco/coco_dwsock.cpp
@@ -82,18 +82,14 @@ beckerport_device::~beckerport_device()
void beckerport_device::device_start()
{
- char chAddress[64];
-
- /* format address string for opening the port */
- snprintf(chAddress, sizeof(chAddress), "socket.%s:%d", m_hostname, m_dwtcpport);
-
- osd_printf_verbose("Connecting to Drivewire server on %s:%d... ", m_hostname, m_dwtcpport);
+ osd_printf_verbose("%s: Connecting to Drivewire server on %s:%d... ", tag(), m_hostname, m_dwtcpport);
u64 filesize; // unused
- osd_file::error filerr = osd_file::open(chAddress, 0, m_pSocket, filesize);
- if (filerr != osd_file::error::NONE)
+ /* format address string for opening the port */
+ std::error_condition filerr = osd_file::open(util::string_format("socket.%s:%d", m_hostname, m_dwtcpport), 0, m_pSocket, filesize);
+ if (filerr)
{
- osd_printf_verbose("Error: osd_open returned error %i!\n", (int) filerr);
+ osd_printf_verbose("Error: osd_open returned error %s:%d %s!\n", filerr.category().name(), filerr.value(), filerr.message());
return;
}
@@ -108,7 +104,7 @@ void beckerport_device::device_stop()
{
if (m_pSocket)
{
- printf("Closing connection to Drivewire server\n");
+ printf("%s: Closing connection to Drivewire server\n", tag());
m_pSocket.reset();
}
}
@@ -140,23 +136,24 @@ u8 beckerport_device::read(offs_t offset)
if (!m_rx_pending)
{
/* Try to read from dws */
- osd_file::error filerr = m_pSocket->read(m_buf, 0, sizeof(m_buf), m_rx_pending);
- if (filerr != osd_file::error::NONE && filerr != osd_file::error::FAILURE) // osd_file::error::FAILURE means no data available, so don't throw error message
- fprintf(stderr, "coco_dwsock.c: beckerport_device::read() socket read operation failed with osd_file::error %i\n", int(filerr));
+ std::error_condition filerr = m_pSocket->read(m_buf, 0, sizeof(m_buf), m_rx_pending);
+ if (filerr)
+ osd_printf_error("%s: coco_dwsock.c: beckerport_device::read() socket read operation failed with error %s:%d %s\n", tag(), filerr.category().name(), filerr.value(), filerr.message());
else
m_head = 0;
}
- //printf("beckerport_device: status read. %i bytes remaining.\n", m_rx_pending);
+ //logerror("beckerport_device: status read. %i bytes remaining.\n", m_rx_pending);
data = (m_rx_pending > 0) ? 2 : 0;
break;
case DWS_DATA:
- if (!m_rx_pending) {
- fprintf(stderr, "coco_dwsock.c: beckerport_device::read() buffer underrun\n");
+ if (!m_rx_pending)
+ {
+ osd_printf_error("%s: coco_dwsock.c: beckerport_device::read() buffer underrun\n", tag());
break;
}
data = m_buf[m_head++];
m_rx_pending--;
- //printf("beckerport_device: data read 1 byte (0x%02x). %i bytes remaining.\n", data&0xff, m_rx_pending);
+ //logerror("beckerport_device: data read 1 byte (0x%02x). %i bytes remaining.\n", data&0xff, m_rx_pending);
break;
default:
fprintf(stderr, "%s: read from bad offset %d\n", __FILE__, offset);
@@ -172,7 +169,7 @@ u8 beckerport_device::read(offs_t offset)
void beckerport_device::write(offs_t offset, u8 data)
{
char d = char(data);
- osd_file::error filerr;
+ std::error_condition filerr;
u32 written;
if (!m_pSocket)
@@ -181,13 +178,13 @@ void beckerport_device::write(offs_t offset, u8 data)
switch (offset)
{
case DWS_STATUS:
- //printf("beckerport_write: error: write (0x%02x) to status register\n", d);
+ //logerror("beckerport_write: error: write (0x%02x) to status register\n", d);
break;
case DWS_DATA:
filerr = m_pSocket->write(&d, 0, 1, written);
- if (filerr != osd_file::error::NONE)
- fprintf(stderr, "coco_dwsock.c: beckerport_device::write() socket write operation failed with osd_file::error %i\n", int(filerr));
- //printf("beckerport_write: data write one byte (0x%02x)\n", d & 0xff);
+ if (filerr)
+ osd_printf_error("%s: coco_dwsock.c: beckerport_device::write() socket write operation failed with error %s:%d %s\n", tag(), filerr.category().name(), filerr.value(), filerr.message());
+ //logerror("beckerport_write: data write one byte (0x%02x)\n", d & 0xff);
break;
default:
fprintf(stderr, "%s: write to bad offset %d\n", __FILE__, offset);