lib: Commit missing bufio include.
[ashd.git] / lib / mtio.c
index b2f55f8..957cbc2 100644 (file)
 #include <utils.h>
 #include <mt.h>
 #include <mtio.h>
-
-struct stdiofd {
-    int fd;
-    int sock;
-    int timeout;
-};
+#include <bufio.h>
 
 static ssize_t mtread(void *cookie, void *buf, size_t len)
 {
@@ -98,7 +93,7 @@ static int mtclose(void *cookie)
     return(0);
 }
 
-FILE *mtstdopen(int fd, int issock, int timeout, char *mode)
+FILE *mtstdopen(int fd, int issock, int timeout, char *mode, struct stdiofd **infop)
 {
     struct stdiofd *d;
     FILE *ret;
@@ -117,11 +112,41 @@ FILE *mtstdopen(int fd, int issock, int timeout, char *mode)
     d->fd = fd;
     d->sock = issock;
     d->timeout = timeout;
-    ret = funstdio(d, r?mtread:NULL, w?mtwrite:NULL, NULL, mtclose);
-    if(!ret)
+    if(!(ret = funstdio(d, r?mtread:NULL, w?mtwrite:NULL, NULL, mtclose))) {
        free(d);
-    else
-       fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK);
+       return(NULL);
+    }
+    fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK);
+    if(infop)
+       *infop = d;
+    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);
 }