URI:
       tiorw.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tiorw.c (2573B)
       ---
            1 #include <u.h>
            2 #include <unistd.h>
            3 #include <fcntl.h>
            4 #include <libc.h>
            5 #include <fcall.h>
            6 #include <thread.h>
            7 #include "ioproc.h"
            8 
            9 static long
           10 _ioclose(va_list *arg)
           11 {
           12         int fd;
           13 
           14         fd = va_arg(*arg, int);
           15         return close(fd);
           16 }
           17 int
           18 ioclose(Ioproc *io, int fd)
           19 {
           20         return iocall(io, _ioclose, fd);
           21 }
           22 
           23 static long
           24 _iodial(va_list *arg)
           25 {
           26         char *addr, *local, *dir;
           27         int *cdfp, fd;
           28 
           29         addr = va_arg(*arg, char*);
           30         local = va_arg(*arg, char*);
           31         dir = va_arg(*arg, char*);
           32         cdfp = va_arg(*arg, int*);
           33 
           34         fd = dial(addr, local, dir, cdfp);
           35         return fd;
           36 }
           37 int
           38 iodial(Ioproc *io, char *addr, char *local, char *dir, int *cdfp)
           39 {
           40         return iocall(io, _iodial, addr, local, dir, cdfp);
           41 }
           42 
           43 static long
           44 _ioopen(va_list *arg)
           45 {
           46         char *path;
           47         int mode;
           48 
           49         path = va_arg(*arg, char*);
           50         mode = va_arg(*arg, int);
           51         return open(path, mode);
           52 }
           53 int
           54 ioopen(Ioproc *io, char *path, int mode)
           55 {
           56         return iocall(io, _ioopen, path, mode);
           57 }
           58 
           59 static long
           60 _ioread(va_list *arg)
           61 {
           62         int fd;
           63         void *a;
           64         long n;
           65 
           66         fd = va_arg(*arg, int);
           67         a = va_arg(*arg, void*);
           68         n = va_arg(*arg, long);
           69         return read(fd, a, n);
           70 }
           71 long
           72 ioread(Ioproc *io, int fd, void *a, long n)
           73 {
           74         return iocall(io, _ioread, fd, a, n);
           75 }
           76 
           77 static long
           78 _ioreadn(va_list *arg)
           79 {
           80         int fd;
           81         void *a;
           82         long n;
           83 
           84         fd = va_arg(*arg, int);
           85         a = va_arg(*arg, void*);
           86         n = va_arg(*arg, long);
           87         n = readn(fd, a, n);
           88         return n;
           89 }
           90 long
           91 ioreadn(Ioproc *io, int fd, void *a, long n)
           92 {
           93         return iocall(io, _ioreadn, fd, a, n);
           94 }
           95 
           96 static long
           97 _iosleep(va_list *arg)
           98 {
           99         long n;
          100 
          101         n = va_arg(*arg, long);
          102         return sleep(n);
          103 }
          104 int
          105 iosleep(Ioproc *io, long n)
          106 {
          107         return iocall(io, _iosleep, n);
          108 }
          109 
          110 static long
          111 _iowrite(va_list *arg)
          112 {
          113         int fd;
          114         void *a;
          115         long n, nn;
          116 
          117         fd = va_arg(*arg, int);
          118         a = va_arg(*arg, void*);
          119         n = va_arg(*arg, long);
          120         nn = write(fd, a, n);
          121         return nn;
          122 }
          123 long
          124 iowrite(Ioproc *io, int fd, void *a, long n)
          125 {
          126         n = iocall(io, _iowrite, fd, a, n);
          127         return n;
          128 }
          129 
          130 static long
          131 _iosendfd(va_list *arg)
          132 {
          133         int n, fd, fd2;
          134 
          135         fd = va_arg(*arg, int);
          136         fd2 = va_arg(*arg, int);
          137         n = sendfd(fd, fd2);
          138         return n;
          139 }
          140 int
          141 iosendfd(Ioproc *io, int fd, int fd2)
          142 {
          143         return iocall(io, _iosendfd, fd, fd2);
          144 }
          145 
          146 static long
          147 _iorecvfd(va_list *arg)
          148 {
          149         int n, fd;
          150 
          151         fd = va_arg(*arg, int);
          152         n = recvfd(fd);
          153         return n;
          154 }
          155 int
          156 iorecvfd(Ioproc *io, int fd)
          157 {
          158         return iocall(io, _iorecvfd, fd);
          159 }
          160 
          161 static long
          162 _ioread9pmsg(va_list *arg)
          163 {
          164         int fd;
          165         void *a;
          166         int n;
          167 
          168         fd = va_arg(*arg, int);
          169         a = va_arg(*arg, void*);
          170         n = va_arg(*arg, int);
          171         read9pmsg(fd, a, n);
          172         return n;
          173 }
          174 int
          175 ioread9pmsg(Ioproc *io, int fd, void *a, int n)
          176 {
          177         return iocall(io, _ioread9pmsg, fd, a, n);
          178 }