1 // 2 // 3 // Copyright 2015 gRPC authors. 4 // 5 // Licensed under the Apache License, Version 2.0 (the "License"); 6 // you may not use this file except in compliance with the License. 7 // You may obtain a copy of the License at 8 // 9 // http://www.apache.org/licenses/LICENSE-2.0 10 // 11 // Unless required by applicable law or agreed to in writing, software 12 // distributed under the License is distributed on an "AS IS" BASIS, 13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 // See the License for the specific language governing permissions and 15 // limitations under the License. 16 // 17 // 18 19 // for secure_getenv. 20 #ifndef _GNU_SOURCE 21 #define _GNU_SOURCE 22 #endif 23 24 #include <grpc/support/port_platform.h> 25 26 #include <string> 27 28 #include "absl/types/optional.h" 29 30 #ifdef GPR_LINUX_ENV 31 32 #include <features.h> 33 #include <stdlib.h> 34 35 #include "src/core/lib/gprpp/env.h" 36 37 namespace grpc_core { 38 GetEnv(const char * name)39absl::optional<std::string> GetEnv(const char* name) { 40 char* result = nullptr; 41 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 17) 42 result = secure_getenv(name); 43 #else 44 result = getenv(name); 45 #endif 46 if (result == nullptr) return absl::nullopt; 47 return result; 48 } 49 SetEnv(const char * name,const char * value)50void SetEnv(const char* name, const char* value) { 51 int res = setenv(name, value, 1); 52 if (res != 0) abort(); 53 } 54 UnsetEnv(const char * name)55void UnsetEnv(const char* name) { 56 int res = unsetenv(name); 57 if (res != 0) abort(); 58 } 59 60 } // namespace grpc_core 61 62 #endif // GPR_LINUX_ENV 63