X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=lib%2Fmtio.c;h=1f4a579b9612eb18a643972deb0528173f0466fa;hb=2b8eb6dfb02dc93372c5e0a4efa6dff73a8ba004;hp=b994cc20761aee71953e5eeb0c57db25aad9f2a5;hpb=945d02f51b66c1ca7b8ae959cd06b4f9ebbd0954;p=ashd.git diff --git a/lib/mtio.c b/lib/mtio.c index b994cc2..1f4a579 100644 --- a/lib/mtio.c +++ b/lib/mtio.c @@ -38,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; @@ -63,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; @@ -107,29 +107,29 @@ static int mtclose(void *cookie) return(0); } -#ifdef HAVE_GLIBC_STDIO -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 fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK); return(ret); } -#else -#error "No stdio implementation for this system" -#endif