// Copyright 2012 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 runtime

import "unsafe"

var tracebackbuf [128]byte

func gogetenv(key string) string {
	var file [128]byte
	if len(key) > len(file)-6 {
		return ""
	}

	copy(file[:], "/env/")
	copy(file[5:], key)

	fd := open(&file[0], _OREAD, 0)
	if fd < 0 {
		return ""
	}
	n := seek(fd, 0, 2)
	if n <= 0 {
		closefd(fd)
		return ""
	}

	p := make([]byte, n)

	r := pread(fd, unsafe.Pointer(&p[0]), int32(n), 0)
	closefd(fd)
	if r < 0 {
		return ""
	}

	if p[r-1] == 0 {
		r--
	}

	var s string
	sp := stringStructOf(&s)
	sp.str = unsafe.Pointer(&p[0])
	sp.len = int(r)
	return s
}

var _cgo_setenv unsafe.Pointer   // pointer to C function
var _cgo_unsetenv unsafe.Pointer // pointer to C function
