]> Cypherpunks.ru repositories - gostls13.git/blob - misc/cgo/test/issue3729.go
1bea38b6e8a61fc254a6f8830a250c80867875c6
[gostls13.git] / misc / cgo / test / issue3729.go
1 // Copyright 2012 The Go Authors.  All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4
5 // Issue 3729:  cmd/cgo: access errno from void C function
6 // void f(void) returns [0]byte, error in Go world.
7
8 // +build !windows
9
10 package cgotest
11
12 /*
13 #include <errno.h>
14
15 void g(void) {
16         errno = E2BIG;
17 }
18
19 // try to pass some non-trivial arguments to function g2
20 const char _expA = 0x42;
21 const float _expB = 3.14159;
22 const short _expC = 0x55aa;
23 const int _expD = 0xdeadbeef;
24 void g2(int x, char a, float b, short c, int d) {
25         if (a == _expA && b == _expB && c == _expC && d == _expD)
26                 errno = x;
27         else
28                 errno = -1;
29 }
30 */
31 import "C"
32
33 import (
34         "syscall"
35         "testing"
36 )
37
38 func test3729(t *testing.T) {
39         _, e := C.g()
40         if e != syscall.E2BIG {
41                 t.Errorf("got %q, expect %q", e, syscall.E2BIG)
42         }
43         _, e = C.g2(C.EINVAL, C._expA, C._expB, C._expC, C._expD)
44         if e != syscall.EINVAL {
45                 t.Errorf("got %q, expect %q", e, syscall.EINVAL)
46         }
47 }