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