lib: Added mtio-driven bufio implementation.
authorFredrik Tolf <fredrik@dolda2000.com>
Mon, 25 Apr 2016 13:08:14 +0000 (15:08 +0200)
committerFredrik Tolf <fredrik@dolda2000.com>
Mon, 25 Apr 2016 13:08:14 +0000 (15:08 +0200)
lib/mtio.c
lib/mtio.h

index d7f36ac..183f9f2 100644 (file)
@@ -121,6 +121,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;
index 75928eb..f6611df 100644 (file)
@@ -16,6 +16,7 @@ int block(int fd, int ev, time_t to);
 int ioloop(void);
 void exitioloop(int status);
 FILE *mtstdopen(int fd, int issock, int timeout, char *mode, struct stdiofd **infop);
+struct bufio *mtbioopen(int fd, int issock, int timeout, char *mode, struct stdiofd **infop);
 void mtiopipe(FILE **read, FILE **write);
 
 #endif