Starting changing error convention for casio_write (untested)
This commit is contained in:
parent
7210d28a16
commit
c70e3a0bef
|
@ -102,7 +102,7 @@ typedef int casio_stream_settm_t
|
|||
|
||||
typedef ssize_t casio_stream_read_t
|
||||
OF((void *, unsigned char *, size_t));
|
||||
typedef int casio_stream_write_t
|
||||
typedef ssize_t casio_stream_write_t
|
||||
OF((void *, const unsigned char *, size_t));
|
||||
typedef int casio_stream_seek_t
|
||||
OF((void *, casio_off_t *, casio_whence_t));
|
||||
|
@ -362,7 +362,7 @@ CASIO_EXTERN int CASIO_EXPORT casio_get_lasterr
|
|||
CASIO_EXTERN ssize_t CASIO_EXPORT casio_read
|
||||
OF((casio_stream_t *casio__stream,
|
||||
void *casio__dest, size_t casio__size));
|
||||
CASIO_EXTERN int CASIO_EXPORT casio_write
|
||||
CASIO_EXTERN ssize_t CASIO_EXPORT casio_write
|
||||
OF((casio_stream_t *casio__stream,
|
||||
const void *casio__data, size_t casio__size));
|
||||
|
||||
|
|
|
@ -58,7 +58,8 @@
|
|||
/* Write. */
|
||||
|
||||
# define WRITE(CASIO__BUF, CASIO__SZ) { \
|
||||
int WRITE_err = casio_write(buffer, (CASIO__BUF), (CASIO__SZ)); \
|
||||
ssize_t WRITE_ssize = casio_write(buffer, (CASIO__BUF), (CASIO__SZ)); \
|
||||
int WRITE_err = WRITE_ssize < 0 ? -WRITE_ssize : 0; \
|
||||
if (WRITE_err) return (WRITE_err); }
|
||||
# define DWRITE(CASIO__OBJECT) \
|
||||
WRITE(&(CASIO__OBJECT), sizeof(CASIO__OBJECT))
|
||||
|
|
|
@ -167,7 +167,8 @@ int CASIO_EXPORT casio_seven_get_buffer(casio_link_t *handle,
|
|||
msg((ll_info, "buffer too full, should be emptied"));
|
||||
|
||||
/* Empty the buffer in the stream. */
|
||||
buf_err = casio_write(buffer, buf, ps);
|
||||
ssize_t ssize = casio_write(buffer, buf, ps);
|
||||
buf_err = ssize < 0 ? -ssize : 0;
|
||||
if (buf_err) { err = casio_error_nowrite; goto fail; }
|
||||
|
||||
/* Reset the pointer. */
|
||||
|
|
|
@ -149,17 +149,18 @@ fail:
|
|||
* @return the error code (0 if ok).
|
||||
*/
|
||||
|
||||
CASIO_LOCAL int casio_seven_data_write(seven_data_cookie_t *cookie,
|
||||
CASIO_LOCAL ssize_t casio_seven_data_write(seven_data_cookie_t *cookie,
|
||||
const unsigned char *data, size_t size)
|
||||
{
|
||||
int err; size_t tocopy, lastlimit;
|
||||
casio_link_t *handle = cookie->_link;
|
||||
size_t writtensize = 0;
|
||||
|
||||
/* Check if the stream is faulty, or if we have already finished. */
|
||||
if (cookie->_faulty)
|
||||
return (casio_error_nowrite);
|
||||
return -(casio_error_nowrite);
|
||||
if (cookie->_id > cookie->_total)
|
||||
return (casio_error_eof);
|
||||
return -(casio_error_eof);
|
||||
|
||||
/* Current packet management. */
|
||||
if (cookie->_pos || size < BUFSIZE) {
|
||||
|
@ -171,13 +172,14 @@ CASIO_LOCAL int casio_seven_data_write(seven_data_cookie_t *cookie,
|
|||
memcpy(cookie->_current, data, tocopy);
|
||||
data += tocopy; size -= tocopy;
|
||||
cookie->_pos += tocopy;
|
||||
writtensize += tocopy;
|
||||
|
||||
/* Check if the current packet is full. */
|
||||
if (cookie->_id == cookie->_total) {
|
||||
if (cookie->_pos < cookie->_lastsize)
|
||||
return (0);
|
||||
return (writtensize);
|
||||
} else if (cookie->_pos < BUFSIZE - 1)
|
||||
return (0);
|
||||
return (writtensize);
|
||||
|
||||
/* Send the packet. */
|
||||
if (cookie->_id == 1 && cookie->_disp)
|
||||
|
@ -198,14 +200,14 @@ CASIO_LOCAL int casio_seven_data_write(seven_data_cookie_t *cookie,
|
|||
if (err) goto fail;
|
||||
if (cookie->_disp) (*cookie->_disp)(cookie->_disp_cookie,
|
||||
cookie->_id, cookie->_total);
|
||||
data += BUFSIZE; size -= BUFSIZE; cookie->_id++;
|
||||
data += BUFSIZE; size -= BUFSIZE; cookie->_id++; writtensize += BUFSIZE;
|
||||
}
|
||||
|
||||
/* Copy the last bytes of the call. */
|
||||
lastlimit = cookie->_id == cookie->_total ? cookie->_lastsize : BUFSIZE;
|
||||
tocopy = lastlimit; if (tocopy > size) tocopy = size;
|
||||
memcpy(cookie->_current, data, tocopy);
|
||||
cookie->_pos = tocopy; size -= tocopy;
|
||||
cookie->_pos = tocopy; size -= tocopy; writtensize += tocopy;
|
||||
|
||||
/* Send the last packet if required. */
|
||||
if (tocopy == lastlimit) {
|
||||
|
@ -220,14 +222,14 @@ CASIO_LOCAL int casio_seven_data_write(seven_data_cookie_t *cookie,
|
|||
/* Check if there are still some bytes left
|
||||
* (bytes after the last packet, means the announced size
|
||||
* was too small). */
|
||||
if (size) return (casio_error_nowrite);
|
||||
if (size) return -(casio_error_nowrite);
|
||||
|
||||
/* Everything went well! :) */
|
||||
return (0);
|
||||
return (writtensize);
|
||||
fail:
|
||||
/* XXX: tell the distant device we have a problem? */
|
||||
cookie->_faulty = 1;
|
||||
return (err);
|
||||
return -(err);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -286,11 +288,13 @@ CASIO_LOCAL int casio_seven_data_close(seven_data_cookie_t *cookie)
|
|||
* go directly to the end. */
|
||||
memset(zeroes, 0, BUFSIZE);
|
||||
for (; left >= BUFSIZE; left -= BUFSIZE) {
|
||||
if ((err = casio_seven_data_write(cookie, zeroes, BUFSIZE)))
|
||||
ssize_t ssize = casio_seven_data_write(cookie, zeroes, BUFSIZE);
|
||||
if ((err = ssize < 0 ? -ssize : 0))
|
||||
goto fail;
|
||||
}
|
||||
|
||||
err = casio_seven_data_write(cookie, zeroes, left);
|
||||
ssize_t ssize = casio_seven_data_write(cookie, zeroes, left);
|
||||
err = ssize < 0 ? -ssize : 0;
|
||||
}
|
||||
|
||||
err = 0;
|
||||
|
|
|
@ -202,11 +202,12 @@ CASIO_LOCAL ssize_t seven_scsi_read(seven_scsi_cookie_t *cookie,
|
|||
return copiedsize;
|
||||
}
|
||||
|
||||
CASIO_LOCAL int seven_scsi_write(seven_scsi_cookie_t *cookie,
|
||||
CASIO_LOCAL ssize_t seven_scsi_write(seven_scsi_cookie_t *cookie,
|
||||
unsigned char const *buffer, size_t size)
|
||||
{
|
||||
casio_scsi_t scsi;
|
||||
int err;
|
||||
size_t writtensize = 0;
|
||||
|
||||
do {
|
||||
casio_uint16_t activity;
|
||||
|
@ -229,7 +230,7 @@ CASIO_LOCAL int seven_scsi_write(seven_scsi_cookie_t *cookie,
|
|||
scsi.casio_scsi_data_len = 16;
|
||||
|
||||
if ((err = casio_scsi_request(cookie->stream, &scsi)))
|
||||
return (err);
|
||||
return -(err);
|
||||
|
||||
#if 0
|
||||
activity = (poll_data[10] << 8) | poll_data[11];
|
||||
|
@ -264,14 +265,15 @@ CASIO_LOCAL int seven_scsi_write(seven_scsi_cookie_t *cookie,
|
|||
scsi.casio_scsi_data_len = to_send;
|
||||
|
||||
if ((err = casio_scsi_request(cookie->stream, &scsi)))
|
||||
return (err);
|
||||
return -(err);
|
||||
|
||||
buffer += to_send;
|
||||
size -= to_send;
|
||||
writtensize += to_send;
|
||||
}
|
||||
} while (size);
|
||||
|
||||
return (0);
|
||||
return (writtensize);
|
||||
}
|
||||
|
||||
/* ---
|
||||
|
|
|
@ -91,7 +91,8 @@ CASIO_LOCAL int casio_seven_send_buf(casio_link_t *handle,
|
|||
}
|
||||
|
||||
/* send prepared packet */
|
||||
err = casio_write(handle->casio_link_stream, buf, bufsize);
|
||||
ssize_t ssize = casio_write(handle->casio_link_stream, buf, bufsize);
|
||||
err = ssize < 0 ? -ssize : 0;
|
||||
if (err) return (err);
|
||||
|
||||
/* set wasreset for logging */
|
||||
|
|
|
@ -57,7 +57,8 @@
|
|||
/* Write. */
|
||||
|
||||
# define WRITE(CASIO__BUF, CASIO__SZ) { \
|
||||
int WRITE_err = casio_write(buffer, (CASIO__BUF), (CASIO__SZ)); \
|
||||
ssize_t WRITE_ssize = casio_write(buffer, (CASIO__BUF), (CASIO__SZ)); \
|
||||
int WRITE_err = WRITE_ssize < 0 ? -WRITE_ssize : 0; \
|
||||
if (WRITE_err) return (WRITE_err); }
|
||||
# define DWRITE(CASIO__OBJECT) \
|
||||
WRITE(&(CASIO__OBJECT), sizeof(CASIO__OBJECT))
|
||||
|
|
|
@ -126,10 +126,10 @@ CASIO_LOCAL ssize_t casio_file_read(file_cookie_t *cookie,
|
|||
* @arg cookie the cookie.
|
||||
* @arg data the source
|
||||
* @arg size the source size
|
||||
* @return the error code (0 if ok)
|
||||
* @return the size written if > 0, or if < 0 the error code is -[returned value].
|
||||
*/
|
||||
|
||||
CASIO_LOCAL int casio_file_write(file_cookie_t *cookie,
|
||||
CASIO_LOCAL ssize_t casio_file_write(file_cookie_t *cookie,
|
||||
const unsigned char *data, size_t size)
|
||||
{
|
||||
size_t sent;
|
||||
|
@ -145,7 +145,7 @@ CASIO_LOCAL int casio_file_write(file_cookie_t *cookie,
|
|||
/* End of file (EOF). */
|
||||
|
||||
msg((ll_error, "encountered an end of file"));
|
||||
return (casio_error_eof);
|
||||
return -(casio_error_eof);
|
||||
|
||||
case EINTR: /* alarm */
|
||||
case ETIMEDOUT:
|
||||
|
@ -155,20 +155,20 @@ CASIO_LOCAL int casio_file_write(file_cookie_t *cookie,
|
|||
/* Timeout error. */
|
||||
|
||||
msg((ll_error, "timeout received"));
|
||||
return (casio_error_timeout);
|
||||
return -(casio_error_timeout);
|
||||
|
||||
case ENODEV:
|
||||
/* Device disconnected. */
|
||||
|
||||
msg((ll_fatal, "calculator was disconnected"));
|
||||
return (casio_error_nocalc);
|
||||
return -(casio_error_nocalc);
|
||||
|
||||
default:
|
||||
msg((ll_fatal, "errno was %d: %s", errno, strerror(errno)));
|
||||
return (casio_error_unknown);
|
||||
return -(casio_error_unknown);
|
||||
}
|
||||
|
||||
return (0);
|
||||
return sent;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -61,7 +61,7 @@ CASIO_EXTERN int CASIO_EXPORT casio_libusb_settm
|
|||
CASIO_EXTERN ssize_t CASIO_EXPORT casio_libusb_read
|
||||
OF((cookie_libusb_t *casio__cookie,
|
||||
unsigned char *casio__dest, size_t casio__size));
|
||||
CASIO_EXTERN int CASIO_EXPORT casio_libusb_write
|
||||
CASIO_EXTERN ssize_t CASIO_EXPORT casio_libusb_write
|
||||
OF((cookie_libusb_t *casio__cookie,
|
||||
const unsigned char *casio__data, size_t casio__size));
|
||||
|
||||
|
|
|
@ -26,10 +26,10 @@
|
|||
* @arg cookie the cookie.
|
||||
* @arg data the source.
|
||||
* @arg size the source size.
|
||||
* @return the error code (0 if ok).
|
||||
* @return the size written if > 0, or if < 0 the error code is -[returned value].
|
||||
*/
|
||||
|
||||
int CASIO_EXPORT casio_libusb_write(cookie_libusb_t *cookie,
|
||||
ssize_t CASIO_EXPORT casio_libusb_write(cookie_libusb_t *cookie,
|
||||
const unsigned char *data, size_t size)
|
||||
{
|
||||
int sent, libusberr;
|
||||
|
@ -44,15 +44,15 @@ int CASIO_EXPORT casio_libusb_write(cookie_libusb_t *cookie,
|
|||
case LIBUSB_ERROR_PIPE:
|
||||
case LIBUSB_ERROR_NO_DEVICE:
|
||||
msg((ll_error, "The calculator is not here anymore :("));
|
||||
return (casio_error_nocalc);
|
||||
return -(casio_error_nocalc);
|
||||
|
||||
default:
|
||||
msg((ll_fatal, "libusb error was %d: %s", libusberr,
|
||||
libusb_strerror(libusberr)));
|
||||
return (casio_error_unknown);
|
||||
return -(casio_error_unknown);
|
||||
}
|
||||
|
||||
return (0);
|
||||
return (sent);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -63,25 +63,25 @@ CASIO_LOCAL ssize_t casio_memory_read(void *vcookie, unsigned char *dest, size_t
|
|||
* @arg vcookie the cookie (uncasted).
|
||||
* @arg data the data pointer.
|
||||
* @arg size the data size.
|
||||
* @return the error code (0 if ok).
|
||||
* @return the size written if > 0, or if < 0 the error code is -[returned value].
|
||||
*/
|
||||
|
||||
CASIO_LOCAL int casio_memory_write(void *vcookie, const unsigned char *data,
|
||||
CASIO_LOCAL ssize_t casio_memory_write(void *vcookie, const unsigned char *data,
|
||||
size_t size)
|
||||
{
|
||||
memory_cookie_t *cookie = (void*)vcookie;
|
||||
|
||||
if (((size_t)-1 - cookie->_offset) < size) /* overflow */
|
||||
return (casio_error_write);
|
||||
return -(casio_error_write);
|
||||
if (cookie->_offset + (casio_off_t)size > cookie->_size) {
|
||||
cookie->_offset = cookie->_size - 1;
|
||||
return (casio_error_eof);
|
||||
return -(casio_error_eof);
|
||||
}
|
||||
|
||||
memcpy(&cookie->_memory[cookie->_offset], data, size);
|
||||
cookie->_offset += size;
|
||||
|
||||
return (0);
|
||||
return (size);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -54,7 +54,7 @@ CASIO_EXTERN int CASIO_EXPORT casio_streams_settm
|
|||
CASIO_EXTERN ssize_t CASIO_EXPORT casio_streams_read
|
||||
OF((streams_cookie_t *casio__cookie,
|
||||
unsigned char *casio__dest, size_t casio__size));
|
||||
CASIO_EXTERN int CASIO_EXPORT casio_streams_write
|
||||
CASIO_EXTERN ssize_t CASIO_EXPORT casio_streams_write
|
||||
OF((streams_cookie_t *casio__cookie,
|
||||
const unsigned char *casio__data, size_t casio__size));
|
||||
|
||||
|
|
|
@ -26,13 +26,14 @@
|
|||
* @arg cookie the cookie.
|
||||
* @arg data the source.
|
||||
* @arg size the source size.
|
||||
* @return the error (0 if ok).
|
||||
* @return the size written if > 0, or if < 0 the error code is -[returned value].
|
||||
*/
|
||||
|
||||
int CASIO_EXPORT casio_streams_write(streams_cookie_t *cookie,
|
||||
ssize_t CASIO_EXPORT casio_streams_write(streams_cookie_t *cookie,
|
||||
const unsigned char *data, size_t size)
|
||||
{
|
||||
int fd = cookie->_writefd;
|
||||
size_t writtensize = 0;
|
||||
|
||||
/* Send. */
|
||||
|
||||
|
@ -40,19 +41,20 @@ int CASIO_EXPORT casio_streams_write(streams_cookie_t *cookie,
|
|||
ssize_t wr = write(fd, data, size);
|
||||
if (wr < 0) break;
|
||||
size -= (size_t)wr;
|
||||
writtensize += (size_t)wr;
|
||||
}
|
||||
|
||||
/* Be sure it's written, or check the error. */
|
||||
|
||||
if (size) switch (errno) {
|
||||
case ENODEV:
|
||||
return (casio_error_nocalc);
|
||||
return -(casio_error_nocalc);
|
||||
default:
|
||||
msg((ll_fatal, "errno was %d: %s", errno, strerror(errno)));
|
||||
return (casio_error_unknown);
|
||||
return -(casio_error_unknown);
|
||||
}
|
||||
|
||||
return (0);
|
||||
return (writtensize);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -53,7 +53,7 @@ CASIO_EXTERN int CASIO_EXPORT casio_windows_settm
|
|||
|
||||
CASIO_EXTERN ssize_t CASIO_EXPORT casio_windows_read
|
||||
OF((win_cookie_t *cookie, unsigned char *dest, size_t size));
|
||||
CASIO_EXTERN int CASIO_EXPORT casio_windows_write
|
||||
CASIO_EXTERN ssize_t CASIO_EXPORT casio_windows_write
|
||||
OF((win_cookie_t *cookie, const unsigned char *data, size_t size));
|
||||
|
||||
/* Seek callback. */
|
||||
|
|
|
@ -26,13 +26,14 @@
|
|||
* @arg cookie the cookie.
|
||||
* @arg data the source
|
||||
* @arg size the source size
|
||||
* @return the error code (0 if ok).
|
||||
* @return the size written if > 0, or if < 0 the error code is -[returned value].
|
||||
*/
|
||||
|
||||
int CASIO_EXPORT casio_windows_write(win_cookie_t *cookie,
|
||||
ssize_t CASIO_EXPORT casio_windows_write(win_cookie_t *cookie,
|
||||
const unsigned char *data, size_t size)
|
||||
{
|
||||
BOOL wsuccess, werr;
|
||||
size_t writtensize = 0;
|
||||
|
||||
/* Make the I/O request. */
|
||||
|
||||
|
@ -49,6 +50,7 @@ int CASIO_EXPORT casio_windows_write(win_cookie_t *cookie,
|
|||
|
||||
data += wrt;
|
||||
size -= wrt;
|
||||
writtensize += wrt;
|
||||
} while (size);
|
||||
|
||||
/* Check the error. */
|
||||
|
@ -56,14 +58,14 @@ int CASIO_EXPORT casio_windows_write(win_cookie_t *cookie,
|
|||
if (!wsuccess) switch ((werr = GetLastError())) {
|
||||
case ERROR_DEV_NOT_EXIST:
|
||||
msg((ll_error, "Device has been disconnected!"));
|
||||
return (casio_error_nocalc);
|
||||
return -(casio_error_nocalc);
|
||||
|
||||
default:
|
||||
msg((ll_fatal, "Encountered error 0x%08lx", werr));
|
||||
return (casio_error_unknown);
|
||||
return -(casio_error_unknown);
|
||||
}
|
||||
|
||||
return (0);
|
||||
return (writtensize);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -25,32 +25,38 @@
|
|||
* @arg stream the stream to write to.
|
||||
* @arg data the data to write.
|
||||
* @arg size the amount of bytes to write.
|
||||
* @return the error code (0 if ok).
|
||||
* @return the size written if > 0, or if < 0 the error code is -[returned value].
|
||||
*/
|
||||
|
||||
int CASIO_EXPORT casio_write(casio_stream_t *stream,
|
||||
ssize_t CASIO_EXPORT casio_write(casio_stream_t *stream,
|
||||
const void *data, size_t size)
|
||||
{
|
||||
int err;
|
||||
int err = casio_error_ok;
|
||||
ssize_t ssize = 0;
|
||||
|
||||
/* check if we can write */
|
||||
failure(~stream->casio_stream_mode & CASIO_OPENMODE_WRITE,
|
||||
casio_error_write)
|
||||
failure(~stream->casio_stream_mode & CASIO_OPENMODE_WRITE,
|
||||
casio_error_write);
|
||||
|
||||
/* write */
|
||||
if (!size) return (0);
|
||||
err = (*getcb(stream, write))(stream->casio_stream_cookie, data, size);
|
||||
if (err) {
|
||||
msg((ll_error, "Stream writing failure: %s", casio_strerror(err)));
|
||||
if (size == 0) {
|
||||
return (0);
|
||||
}
|
||||
ssize = (*getcb(stream, write))(stream->casio_stream_cookie, data, size);
|
||||
|
||||
if (ssize < 0) {
|
||||
err = -ssize;
|
||||
msg((ll_error, "Stream reading failure: %s", casio_strerror(err)));
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* move the cursor and return */
|
||||
stream->casio_stream_offset += size;
|
||||
err = 0;
|
||||
if(ssize >= 0) {
|
||||
stream->casio_stream_offset += size;
|
||||
}
|
||||
fail:
|
||||
stream->casio_stream_lasterr = err;
|
||||
return (err);
|
||||
return ssize;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -66,5 +72,6 @@ int CASIO_EXPORT casio_write_char(casio_stream_t *stream, int car)
|
|||
{
|
||||
unsigned char ccar = car;
|
||||
|
||||
return (casio_write(stream, &ccar, 1));
|
||||
ssize_t ssize = casio_write(stream, &ccar, 1);
|
||||
return (ssize < 0 ? (int)-ssize : 0);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue