URI: 
       tread.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
       ---
       tread.c (1349B)
       ---
            1 #include <u.h>
            2 #include <libc.h>
            3 #include <venti.h>
            4 #include <libsec.h>
            5 #include <thread.h>
            6 
            7 enum
            8 {
            9         // XXX What to do here?
           10         VtMaxLumpSize = 65535,
           11 };
           12 
           13 void
           14 usage(void)
           15 {
           16         fprint(2, "usage: read [-h host] [-t type] score\n");
           17         threadexitsall("usage");
           18 }
           19 
           20 void
           21 threadmain(int argc, char *argv[])
           22 {
           23         int type, n;
           24         uchar score[VtScoreSize];
           25         uchar *buf;
           26         VtConn *z;
           27         char *host;
           28 
           29         fmtinstall('F', vtfcallfmt);
           30         fmtinstall('V', vtscorefmt);
           31 
           32         host = nil;
           33         type = -1;
           34         ARGBEGIN{
           35         case 'h':
           36                 host = EARGF(usage());
           37                 break;
           38         case 't':
           39                 type = atoi(EARGF(usage()));
           40                 break;
           41         default:
           42                 usage();
           43                 break;
           44         }ARGEND
           45 
           46         if(argc != 1)
           47                 usage();
           48 
           49         if(vtparsescore(argv[0], nil, score) < 0)
           50                 sysfatal("could not parse score '%s': %r", argv[0]);
           51 
           52         buf = vtmallocz(VtMaxLumpSize);
           53 
           54         z = vtdial(host);
           55         if(z == nil)
           56                 sysfatal("could not connect to server: %r");
           57 
           58         if(vtconnect(z) < 0)
           59                 sysfatal("vtconnect: %r");
           60 
           61         if(type == -1){
           62                 n = -1;
           63                 for(type=0; type<VtMaxType; type++){
           64                         n = vtread(z, score, type, buf, VtMaxLumpSize);
           65                         if(n >= 0){
           66                                 fprint(2, "venti/read%s%s %V %d\n", host ? " -h" : "", host ? host : "",
           67                                         score, type);
           68                                 break;
           69                         }
           70                 }
           71         }else
           72                 n = vtread(z, score, type, buf, VtMaxLumpSize);
           73 
           74         vthangup(z);
           75         if(n < 0)
           76                 sysfatal("could not read block: %r");
           77         if(write(1, buf, n) != n)
           78                 sysfatal("write: %r");
           79         threadexitsall(0);
           80 }