view libgo/misc/cgo/test/env.go @ 133:420680fc7707

do normal call in goto codesegment in normal function
author anatofuz
date Sat, 03 Nov 2018 19:49:09 +0900 (2018-11-03)
parents 04ced10e8804
children
line wrap: on
line source
// 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

/*
#include <stdlib.h>
*/
import "C"
import (
	"os"
	"runtime"
	"testing"
	"unsafe"
)

// This is really an os package test but here for convenience.
func testSetEnv(t *testing.T) {
	if runtime.GOOS == "windows" {
		// Go uses SetEnvironmentVariable on windows. Howerver,
		// C runtime takes a *copy* at process startup of thei
		// OS environment, and stores it in environ/envp.
		// It is this copy that	getenv/putenv manipulate.
		t.Logf("skipping test")
		return
	}
	const key = "CGO_OS_TEST_KEY"
	const val = "CGO_OS_TEST_VALUE"
	os.Setenv(key, val)
	keyc := C.CString(key)
	defer C.free(unsafe.Pointer(keyc))
	v := C.getenv(keyc)
	if uintptr(unsafe.Pointer(v)) == 0 {
		t.Fatal("getenv returned NULL")
	}
	vs := C.GoString(v)
	if vs != val {
		t.Fatalf("getenv() = %q; want %q", vs, val)
	}
}