syscalls can return negative i/o counts. fix bugs in ReadAt and WriteAt not to include
negative counts in return values.

R=rsc
CC=golang-dev
https://golang.org/cl/170044
diff --git a/src/pkg/os/file.go b/src/pkg/os/file.go
index 03c6d57..459b78c 100644
--- a/src/pkg/os/file.go
+++ b/src/pkg/os/file.go
@@ -141,11 +141,11 @@
 		if m == 0 && e == 0 {
 			return n, EOF
 		}
-		n += m;
 		if e != 0 {
 			err = &PathError{"read", file.name, Errno(e)};
 			break;
 		}
+		n += m;
 		b = b[m:];
 		off += int64(m);
 	}
@@ -186,11 +186,11 @@
 	}
 	for len(b) > 0 {
 		m, e := syscall.Pwrite(file.fd, b, off);
-		n += m;
 		if e != 0 {
 			err = &PathError{"write", file.name, Errno(e)};
 			break;
 		}
+		n += m;
 		b = b[m:];
 		off += int64(m);
 	}