github.com/guyezi/gofrontend@v0.0.0-20200228202240-7a62a49e62c0/libgo/runtime/env_posix.c (about) 1 // Copyright 2012 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // +build darwin dragonfly freebsd hurd linux nacl netbsd openbsd solaris windows 6 7 #include "runtime.h" 8 #include "array.h" 9 #include "arch.h" 10 11 extern Slice runtime_get_envs(void); 12 13 String 14 runtime_getenv(const char *s) 15 { 16 int32 i, j; 17 intgo len; 18 const byte *v, *bs; 19 Slice envs; 20 String* envv; 21 int32 envc; 22 String ret; 23 24 bs = (const byte*)s; 25 len = runtime_findnull(bs); 26 envs = runtime_get_envs(); 27 envv = (String*)envs.__values; 28 envc = envs.__count; 29 for(i=0; i<envc; i++){ 30 if(envv[i].len <= len) 31 continue; 32 v = (const byte*)envv[i].str; 33 for(j=0; j<len; j++) 34 if(bs[j] != v[j]) 35 goto nomatch; 36 if(v[len] != '=') 37 goto nomatch; 38 ret.str = v+len+1; 39 ret.len = envv[i].len-len-1; 40 return ret; 41 nomatch:; 42 } 43 ret.str = nil; 44 ret.len = 0; 45 return ret; 46 }