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