tbigger buffers; add rdwr - plan9port - [fork] Plan 9 from user space (HTM) git clone git://src.adamsgaard.dk/plan9port (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 05abefb2a0866dde7721be1f5c57fd35a5bd140f (DIR) parent efd7212c00a499330d2d84652a2697824142e7b7 (HTM) Author: rsc <devnull@localhost> Date: Sun, 13 Feb 2005 18:32:38 +0000 bigger buffers; add rdwr Diffstat: M src/cmd/9p.c | 48 +++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 5 deletions(-) --- (DIR) diff --git a/src/cmd/9p.c b/src/cmd/9p.c t@@ -19,6 +19,7 @@ usage(void) fprint(2, " write [-l] name\n"); fprint(2, " writefd name\n"); fprint(2, " stat name\n"); + fprint(2, " rdwr name\n"); // fprint(2, " ls name\n"); fprint(2, "without -a, name elem/path means /path on server unix!$ns/elem\n"); threadexitsall("usage"); t@@ -30,6 +31,7 @@ void xreadfd(int, char**); void xwritefd(int, char**); void xstat(int, char**); void xls(int, char**); +void xrdwr(int, char**); struct { char *s; t@@ -40,6 +42,7 @@ struct { "readfd", xreadfd, "writefd", xwritefd, "stat", xstat, + "rdwr", xrdwr, // "ls", xls, }; t@@ -127,7 +130,7 @@ xopenfd(char *name, int mode) void xread(int argc, char **argv) { - char buf[1024]; + char buf[4096]; int n; CFid *fid; t@@ -150,7 +153,7 @@ xread(int argc, char **argv) void xreadfd(int argc, char **argv) { - char buf[1024]; + char buf[4096]; int n; int fd; t@@ -173,7 +176,7 @@ xreadfd(int argc, char **argv) void xwrite(int argc, char **argv) { - char buf[1024]; + char buf[4096]; int n, did; CFid *fid; Biobuf *b; t@@ -184,6 +187,7 @@ xwrite(int argc, char **argv) ARGBEGIN{ case 'l': byline = 1; + break; default: usage(); }ARGEND t@@ -203,7 +207,7 @@ xwrite(int argc, char **argv) n = strlen(p); did = 1; if(fswrite(fid, p, n) != n) - sysfatal("write error: %r"); + fprint(2, "write: %r\n"); } free(b); }else{ t@@ -225,7 +229,7 @@ xwrite(int argc, char **argv) void xwritefd(int argc, char **argv) { - char buf[1024]; + char buf[4096]; int n; int fd; t@@ -270,3 +274,37 @@ xstat(int argc, char **argv) print("%D\n", d); threadexitsall(0); } + +void +xrdwr(int argc, char **argv) +{ + char buf[4096]; + int n; + CFid *fid; + + ARGBEGIN{ + default: + usage(); + }ARGEND + + if(argc != 1) + usage(); + + fid = xopen(argv[0], ORDWR); + for(;;){ + if((n = fsread(fid, buf, sizeof buf)) < 0) + fprint(2, "read: %r\n"); + else{ + write(1, buf, n); + write(1, "\n", 1); + } + n = read(0, buf, sizeof buf); + if(n <= 0) + break; + if(buf[n-1] == '\n') + n--; + if(fswrite(fid, buf, n) != n) + fprint(2, "write: %r\n"); + } + threadexitsall(0); +}