summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-06-24 15:35:35 -0700
committerRuss Cox <rsc@golang.org>2009-06-24 15:35:35 -0700
commitdfb87f8c51fe464d263cff5dfde93c8d1c9964e9 (patch)
treee2d71892ab2cb3612167f91d17e4022b5b1a8bcd /src
parentd61c2b2d31f0d692d0eba8101a7b7faf6b127778 (diff)
downloadgolang-dfb87f8c51fe464d263cff5dfde93c8d1c9964e9.tar.gz
make bytes.Copy both src- and dst- limited
and return the number of bytes copied. R=r DELTA=18 (6 added, 0 deleted, 12 changed) OCL=30693 CL=30712
Diffstat (limited to 'src')
-rw-r--r--src/pkg/bytes/bytes.go10
-rw-r--r--src/pkg/bytes/bytes_test.go20
2 files changed, 18 insertions, 12 deletions
diff --git a/src/pkg/bytes/bytes.go b/src/pkg/bytes/bytes.go
index dd299a82e..17f82db7c 100644
--- a/src/pkg/bytes/bytes.go
+++ b/src/pkg/bytes/bytes.go
@@ -41,10 +41,14 @@ func Equal(a, b []byte) bool {
return true
}
-// Copy copies the source to the destination, stopping when the source
-// is all transferred. The caller must guarantee that there is enough
-// room in the destination. It returns the number of bytes copied
+// Copy copies bytes from src to dst,
+// stopping when either all of src has been copied
+// or all of dst has been filled.
+// It returns the number of bytes copied.
func Copy(dst, src []byte) int {
+ if len(src) > len(dst) {
+ src = src[0:len(dst)];
+ }
for i, x := range src {
dst[i] = x
}
diff --git a/src/pkg/bytes/bytes_test.go b/src/pkg/bytes/bytes_test.go
index 4e7cdfad6..3fbe21c30 100644
--- a/src/pkg/bytes/bytes_test.go
+++ b/src/pkg/bytes/bytes_test.go
@@ -132,25 +132,27 @@ func TestSplit(t *testing.T) {
type CopyTest struct {
a string;
b string;
+ n int;
res string;
}
var copytests = []CopyTest {
- CopyTest{ "", "", "" },
- CopyTest{ "a", "", "a" },
- CopyTest{ "a", "a", "a" },
- CopyTest{ "a", "b", "b" },
- CopyTest{ "xyz", "abc", "abc" },
- CopyTest{ "wxyz", "abc", "abcz" },
+ CopyTest{ "", "", 0, "" },
+ CopyTest{ "a", "", 0, "a" },
+ CopyTest{ "a", "a", 1, "a" },
+ CopyTest{ "a", "b", 1, "b" },
+ CopyTest{ "xyz", "abc", 3, "abc" },
+ CopyTest{ "wxyz", "abc", 3, "abcz" },
+ CopyTest{ "xyz", "abcd", 3, "abc" },
}
func TestCopy(t *testing.T) {
for i := 0; i < len(copytests); i++ {
tt := copytests[i];
dst := io.StringBytes(tt.a);
- Copy(dst, io.StringBytes(tt.b));
+ n := Copy(dst, io.StringBytes(tt.b));
result := string(dst);
- if result != tt.res {
- t.Errorf(`Copy("%s", "%s") = "%s"; want "%s"`, tt.a, tt.b, result, tt.res);
+ if result != tt.res || n != tt.n {
+ t.Errorf(`Copy(%q, %q) = %d, %q; want %d, %q`, tt.a, tt.b, n, result, tt.n, tt.res);
continue;
}
}