X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=smouse;a=blobdiff_plain;f=src%2Funix%2Fserial.c;fp=src%2Funix%2Fserial.c;h=cdcdb88cd3fcfda4b8be03909d127ddf9f8a7563;hp=fe8aeb31744194accd3be82cc8c6984f9e4f3cee;hb=baa842556c85f24e0cc1b4fd07da03b6609160c1;hpb=b592e337adbb150e09d3e256a4066734698df3cf diff --git a/src/unix/serial.c b/src/unix/serial.c index fe8aeb3..cdcdb88 100644 --- a/src/unix/serial.c +++ b/src/unix/serial.c @@ -137,7 +137,6 @@ char *ser_getline(int fd, char *buf, int bsz) static char linebuf[512]; static int widx; int i, rd, size; - char *ptr; size = sizeof linebuf - widx; while(size && (rd = read(fd, linebuf + widx, size)) > 0) { @@ -145,27 +144,28 @@ char *ser_getline(int fd, char *buf, int bsz) size -= rd; } - ptr = linebuf; for(i=0; i= bsz ? bsz - 1 : widx; + if(linebuf[i] == '\r' || linebuf[i] == '\n') { + size = i >= bsz ? bsz - 1 : i; memcpy(buf, linebuf, size); buf[size] = 0; - memmove(linebuf, linebuf + widx, sizeof linebuf - widx); + memmove(linebuf, linebuf + i + 1, sizeof linebuf - i - 1); + printf("ser_getline-> \"%s\"\n", buf); return buf; - } else { - ++ptr; } } return 0; } +char *ser_getline_block(int fd, char *buf, int bsz) +{ + if(!ser_wait(fd, -1)) { + return 0; + } + return ser_getline(fd, buf, bsz); +} + static int baud_id(int baud) { switch(baud) {