diff -ruN libax25-0.0.10.oh2bns/ax25io.c libax25-0.0.10.merge/ax25io.c --- libax25-0.0.10.oh2bns/ax25io.c Tue Feb 18 23:30:34 2003 +++ libax25-0.0.10.merge/ax25io.c Tue Feb 18 23:29:27 2003 @@ -44,6 +44,7 @@ new->ofd = out; new->eolmode = EOLMODE_TEXT; new->paclen = paclen; + new->gbuf_usage = 0; strncpy(new->eol, eol, 3); new->eol[3] = 0; @@ -564,43 +565,55 @@ /* --------------------------------------------------------------------- */ -char *axio_gets(char *buf, int buflen, ax25io *p) +int axio_gets(char *buf, int buflen, ax25io *p) { int c, len = 0; while (len < (buflen - 1)) { c = axio_getc(p); if (c == -1) { - if (len > 0) { - buf[len] = 0; - return buf; - } else - return NULL; + return -len; } /* NUL also interpreted as EOL */ if (c == '\n' || c == '\r' || c == 0) { buf[len] = 0; - return buf; + errno = 0; + return len; } buf[len++] = c; } buf[buflen - 1] = 0; - return buf; + errno = 0; + return len; } char *axio_getline(ax25io *p) { - static char buf[AXBUFLEN]; + int ret; - return axio_gets(buf, AXBUFLEN, p); + ret = axio_gets(p->gbuf + p->gbuf_usage, AXBUFLEN - p->gbuf_usage, p); + if (ret > 0 || (ret == 0 && errno == 0)) { + p->gbuf_usage = 0; + return p->gbuf; + } + p->gbuf_usage += ret; + return NULL; } int axio_puts(const char *s, ax25io *p) { + int count=0; + while (*s) - if (axio_putc(*s++, p) == -1) - return -1; - return 0; + if (axio_putc(*s++, p) == -1) { + if (errno != EAGAIN) + return -1; + else + break; + } else { + count++; + } + return count; } /* --------------------------------------------------------------------- */ diff -ruN libax25-0.0.10.oh2bns/ax25io.h libax25-0.0.10.merge/ax25io.h --- libax25-0.0.10.oh2bns/ax25io.h Tue Feb 18 23:30:34 2003 +++ libax25-0.0.10.merge/ax25io.h Tue Feb 18 23:28:44 2003 @@ -33,6 +33,8 @@ int paclen; /* paclen */ unsigned char ibuf[AXBUFLEN]; /* input buffer */ unsigned char obuf[AXBUFLEN]; /* output buffer */ + unsigned char gbuf[AXBUFLEN]; /* getline buffer */ + int gbuf_usage; /* getline buffer usage */ int iptr; /* input pointer */ int optr; /* output pointer */ void *zptr; /* pointer to the compression struct */ @@ -73,7 +75,7 @@ extern int axio_putc(int, ax25io *); extern char *axio_getline(ax25io *); -extern char *axio_gets(char *, int, ax25io *); +extern int axio_gets(char *, int, ax25io *); extern int axio_puts(const char *, ax25io *); extern int axio_printf(ax25io *, const char *, ...);