X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=lib%2Fmtio.c;h=957cbc21b90cc1714689629e7a0f0c081005ba19;hb=2931529e223c46eb32293bd5b104a84ca4df5ac6;hp=d7f36ac82d31be22e5d5c9111476d16ee2a15e99;hpb=b71ad67f41a9e99bd243d57b5038de28f1696f27;p=ashd.git diff --git a/lib/mtio.c b/lib/mtio.c index d7f36ac..957cbc2 100644 --- a/lib/mtio.c +++ b/lib/mtio.c @@ -31,6 +31,7 @@ #include #include #include +#include static ssize_t mtread(void *cookie, void *buf, size_t len) { @@ -121,6 +122,34 @@ FILE *mtstdopen(int fd, int issock, int timeout, char *mode, struct stdiofd **in return(ret); } +struct bufio *mtbioopen(int fd, int issock, int timeout, char *mode, struct stdiofd **infop) +{ + static struct bufioops ops = { + .read = mtread, .write = mtwrite, .close = mtclose, + }; + struct stdiofd *d; + struct bufio *ret; + + if(!strcmp(mode, "r")) { + } else if(!strcmp(mode, "w")) { + } else if(!strcmp(mode, "r+")) { + } else { + return(NULL); + } + omalloc(d); + d->fd = fd; + d->sock = issock; + d->timeout = timeout; + if(!(ret = bioopen(d, &ops))) { + free(d); + return(NULL); + } + fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK); + if(infop) + *infop = d; + return(ret); +} + struct pipe { struct charbuf data; size_t bufmax;