summaryrefslogtreecommitdiff
path: root/altosui
diff options
context:
space:
mode:
Diffstat (limited to 'altosui')
-rw-r--r--altosui/AltosSerial.java14
-rw-r--r--altosui/libaltos/libaltos.c4
2 files changed, 14 insertions, 4 deletions
diff --git a/altosui/AltosSerial.java b/altosui/AltosSerial.java
index c4e9c697..8b692fa9 100644
--- a/altosui/AltosSerial.java
+++ b/altosui/AltosSerial.java
@@ -54,13 +54,19 @@ public class AltosSerial extends AltosLink implements Runnable {
Frame frame;
public int getchar() {
+ if (altos == null)
+ return ERROR;
return libaltos.altos_getchar(altos, 0);
}
public void flush_output() {
super.flush_output();
if (altos != null) {
- libaltos.altos_flush(altos);
+ if (libaltos.altos_flush(altos) != 0) {
+ libaltos.altos_close(altos);
+ altos = null;
+ abort_reply();
+ }
}
}
@@ -155,7 +161,11 @@ public class AltosSerial extends AltosLink implements Runnable {
private void putc(char c) {
if (altos != null)
- libaltos.altos_putchar(altos, c);
+ if (libaltos.altos_putchar(altos, c) != 0) {
+ libaltos.altos_close(altos);
+ altos = null;
+ abort_reply();
+ }
}
public void print(String data) {
diff --git a/altosui/libaltos/libaltos.c b/altosui/libaltos/libaltos.c
index 1cc27cbe..515432f9 100644
--- a/altosui/libaltos/libaltos.c
+++ b/altosui/libaltos/libaltos.c
@@ -221,7 +221,7 @@ altos_flush(struct altos_file *file)
#endif
if (ret < 0) {
altos_set_last_posix_error();
- return -errno;
+ return -last_error.code;
}
if (ret) {
memmove(file->out_data, file->out_data + ret,
@@ -247,7 +247,7 @@ altos_putchar(struct altos_file *file, char c)
ret = 0;
if (file->out_used == USB_BUF_SIZE)
ret = altos_flush(file);
- return 0;
+ return ret;
}
#ifdef USE_POLL