// 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. | |
// +build darwin dragonfly freebsd hurd linux nacl netbsd openbsd solaris windows | |
#include "runtime.h" | |
#include "array.h" | |
#include "arch.h" | |
extern Slice runtime_get_envs(void); | |
String | |
runtime_getenv(const char *s) | |
{ | |
int32 i, j; | |
intgo len; | |
const byte *v, *bs; | |
Slice envs; | |
String* envv; | |
int32 envc; | |
String ret; | |
bs = (const byte*)s; | |
len = runtime_findnull(bs); | |
envs = runtime_get_envs(); | |
envv = (String*)envs.__values; | |
envc = envs.__count; | |
for(i=0; i<envc; i++){ | |
if(envv[i].len <= len) | |
continue; | |
v = (const byte*)envv[i].str; | |
for(j=0; j<len; j++) | |
if(bs[j] != v[j]) | |
goto nomatch; | |
if(v[len] != '=') | |
goto nomatch; | |
ret.str = v+len+1; | |
ret.len = envv[i].len-len-1; | |
return ret; | |
nomatch:; | |
} | |
ret.str = nil; | |
ret.len = 0; | |
return ret; | |
} |