|  | // 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 |