X-Git-Url: http://www.dolda2000.com/gitweb/?a=blobdiff_plain;f=lib%2Fmtio.c;h=1f4a579b9612eb18a643972deb0528173f0466fa;hb=35737971905d2247746bc81e0da851744cc49902;hp=43cc1f7045d3478c483846ebf57a232684b5d100;hpb=330c9bc3a9008ac4937e79e80a0d383ce082f7c1;p=ashd.git diff --git a/lib/mtio.c b/lib/mtio.c index 43cc1f7..1f4a579 100644 --- a/lib/mtio.c +++ b/lib/mtio.c @@ -16,16 +16,17 @@ along with this program. If not, see . */ +#ifdef HAVE_CONFIG_H +#include +#endif #include #include +#include #include #include #include #include -#ifdef HAVE_CONFIG_H -#include -#endif #include #include #include @@ -37,7 +38,7 @@ struct stdiofd { int timeout; }; -static ssize_t mtread(void *cookie, char *buf, size_t len) +static ssize_t mtread(void *cookie, void *buf, size_t len) { struct stdiofd *d = cookie; int ev; @@ -62,7 +63,7 @@ static ssize_t mtread(void *cookie, char *buf, size_t len) } } -static ssize_t mtwrite(void *cookie, const char *buf, size_t len) +static ssize_t mtwrite(void *cookie, const void *buf, size_t len) { struct stdiofd *d = cookie; int ev; @@ -106,22 +107,26 @@ static int mtclose(void *cookie) return(0); } -static cookie_io_functions_t iofuns = { - .read = mtread, - .write = mtwrite, - .close = mtclose, -}; - FILE *mtstdopen(int fd, int issock, int timeout, char *mode) { struct stdiofd *d; FILE *ret; + int r, w; + if(!strcmp(mode, "r")) { + r = 1; w = 0; + } else if(!strcmp(mode, "w")) { + r = 0; w = 1; + } else if(!strcmp(mode, "r+")) { + r = w = 1; + } else { + return(NULL); + } omalloc(d); d->fd = fd; d->sock = issock; d->timeout = timeout; - ret = fopencookie(d, mode, iofuns); + ret = funstdio(d, r?mtread:NULL, w?mtwrite:NULL, NULL, mtclose); if(!ret) free(d); else