diff options
author | Alexey Samsonov <samsonov@google.com> | 2013-04-23 12:49:12 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2013-04-23 12:49:12 +0000 |
commit | f36c5a843156d7f194c2833a9d663ca682bb018c (patch) | |
tree | e60a0fad030c6fd798138064274a9a3e21fa7e87 /compiler-rt/lib/sanitizer_common/sanitizer_linux.cc | |
parent | 262eb01bbf74e9ca0c337df44c33e0890d0607a9 (diff) | |
download | bcm5719-llvm-f36c5a843156d7f194c2833a9d663ca682bb018c.tar.gz bcm5719-llvm-f36c5a843156d7f194c2833a9d663ca682bb018c.zip |
Revert r180082 and add a test for SetEnv function
llvm-svn: 180098
Diffstat (limited to 'compiler-rt/lib/sanitizer_common/sanitizer_linux.cc')
-rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_linux.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc index cd651935b68..ef185571ada 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc @@ -264,6 +264,20 @@ const char *GetEnv(const char *name) { return 0; // Not found. } +// Does not compile for Go because dlsym() requires -ldl +#ifndef SANITIZER_GO +bool SetEnv(const char *name, const char *value) { + void *f = dlsym(RTLD_NEXT, "setenv"); + if (f == 0) + return false; + typedef int(*setenv_ft)(const char *name, const char *value, int overwrite); + setenv_ft setenv_f; + CHECK_EQ(sizeof(setenv_f), sizeof(f)); + internal_memcpy(&setenv_f, &f, sizeof(f)); + return setenv_f(name, value, 1) == 0; +} +#endif + #ifdef __GLIBC__ extern "C" { |