mirror of
https://github.com/golang/go
synced 2024-11-02 13:42:29 +00:00
cgo: fix GoBytes
R=golang-dev, adg CC=golang-dev https://golang.org/cl/4956051
This commit is contained in:
parent
4ca2172f38
commit
e1cfb6f3a9
5 changed files with 40 additions and 1 deletions
|
@ -12,6 +12,7 @@ CGOFILES=\
|
|||
callback.go\
|
||||
env.go\
|
||||
exports.go\
|
||||
helpers.go\
|
||||
issue1222.go\
|
||||
issue1328.go\
|
||||
issue1560.go\
|
||||
|
|
|
@ -65,7 +65,7 @@ func testCallbackPanic(t *testing.T) {
|
|||
func testCallbackPanicLoop(t *testing.T) {
|
||||
// Make sure we don't blow out m->g0 stack.
|
||||
for i := 0; i < 100000; i++ {
|
||||
TestCallbackPanic(t)
|
||||
testCallbackPanic(t)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -26,5 +26,6 @@ func TestBlocking(t *testing.T) { testBlocking(t) }
|
|||
func Test1328(t *testing.T) { test1328(t) }
|
||||
func TestParallelSleep(t *testing.T) { testParallelSleep(t) }
|
||||
func TestSetEnv(t *testing.T) { testSetEnv(t) }
|
||||
func TestHelpers(t *testing.T) { testHelpers(t) }
|
||||
|
||||
func BenchmarkCgoCall(b *testing.B) { benchCgoCall(b) }
|
||||
|
|
35
misc/cgo/test/helpers.go
Normal file
35
misc/cgo/test/helpers.go
Normal file
|
@ -0,0 +1,35 @@
|
|||
// Copyright 2011 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package cgotest
|
||||
|
||||
// const char *greeting = "hello, world";
|
||||
import "C"
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
const greeting = "hello, world"
|
||||
|
||||
type testPair struct {
|
||||
Name string
|
||||
Got, Want interface{}
|
||||
}
|
||||
|
||||
var testPairs = []testPair{
|
||||
{"GoString", C.GoString(C.greeting), greeting},
|
||||
{"GoStringN", C.GoStringN(C.greeting, 5), greeting[:5]},
|
||||
{"GoBytes", C.GoBytes(unsafe.Pointer(C.greeting), 5), []byte(greeting[:5])},
|
||||
}
|
||||
|
||||
func testHelpers(t *testing.T) {
|
||||
for _, pair := range testPairs {
|
||||
if !reflect.DeepEqual(pair.Got, pair.Want) {
|
||||
t.Errorf("%s: got %#v, want %#v", pair.Got, pair.Want)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -80,6 +80,8 @@ runtime·gobytes(byte *p, int32 n)
|
|||
Slice sl;
|
||||
|
||||
sl.array = runtime·mallocgc(n, FlagNoPointers, 1, 0);
|
||||
sl.len = n;
|
||||
sl.cap = n;
|
||||
runtime·memmove(sl.array, p, n);
|
||||
return sl;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue