Revert "Remove unused function."
authorAlexey Samsonov <vonosmas@gmail.com>
Sat, 31 Jan 2015 01:27:18 +0000 (01:27 +0000)
committerAlexey Samsonov <vonosmas@gmail.com>
Sat, 31 Jan 2015 01:27:18 +0000 (01:27 +0000)
This reverts commit r227633. SetEnv was prematurely deleted.

llvm-svn: 227665

compiler-rt/lib/sanitizer_common/sanitizer_common.h
compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
compiler-rt/lib/sanitizer_common/tests/sanitizer_linux_test.cc

index 80adfa1..07641b6 100644 (file)
@@ -210,6 +210,7 @@ void DisableCoreDumperIfNecessary();
 void DumpProcessMap();
 bool FileExists(const char *filename);
 const char *GetEnv(const char *name);
+bool SetEnv(const char *name, const char *value);
 const char *GetPwd();
 char *FindPathToBinary(const char *name);
 u32 GetUid();
index 9ca46a7..4568953 100644 (file)
@@ -124,6 +124,19 @@ void GetThreadStackTopAndBottom(bool at_initialization, uptr *stack_top,
   *stack_bottom = (uptr)stackaddr;
 }
 
+#if !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
+
 bool SanitizerSetThreadName(const char *name) {
 #ifdef PR_SET_NAME
   return 0 == prctl(PR_SET_NAME, (unsigned long)name, 0, 0, 0);  // NOLINT
index 2a3ba31..592d9c3 100644 (file)
@@ -187,6 +187,14 @@ TEST_F(ThreadListerTest, ResetMakesNewThreadsKnown) {
   ASSERT_TRUE(HasElement(threads_after_extra, extra_tid));
 }
 
+TEST(SanitizerCommon, SetEnvTest) {
+  const char kEnvName[] = "ENV_FOO";
+  SetEnv(kEnvName, "value");
+  EXPECT_STREQ("value", getenv(kEnvName));
+  unsetenv(kEnvName);
+  EXPECT_EQ(0, getenv(kEnvName));
+}
+
 #if defined(__x86_64__) || defined(__i386__)
 void *thread_self_offset_test_func(void *arg) {
   bool result =