1// Copyright 2011 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 5package cgotest 6 7/* 8#include <stdlib.h> 9*/ 10import "C" 11import ( 12 "os" 13 "runtime" 14 "testing" 15 "unsafe" 16) 17 18// This is really an os package test but here for convenience. 19func testSetEnv(t *testing.T) { 20 if runtime.GOOS == "windows" { 21 // Go uses SetEnvironmentVariable on windows. Howerver, 22 // C runtime takes a *copy* at process startup of thei 23 // OS environment, and stores it in environ/envp. 24 // It is this copy that getenv/putenv manipulate. 25 t.Logf("skipping test") 26 return 27 } 28 const key = "CGO_OS_TEST_KEY" 29 const val = "CGO_OS_TEST_VALUE" 30 os.Setenv(key, val) 31 keyc := C.CString(key) 32 defer C.free(unsafe.Pointer(keyc)) 33 v := C.getenv(keyc) 34 if uintptr(unsafe.Pointer(v)) == 0 { 35 t.Fatal("getenv returned NULL") 36 } 37 vs := C.GoString(v) 38 if vs != val { 39 t.Fatalf("getenv() = %q; want %q", vs, val) 40 } 41} 42