<div dir="ltr">Primarily because we pass them verbatim to posix_spawn and other launchers, and there it is legitimate to not have an equal with trailing nothingness.  On the Xcode side, we use a ton of environment variables.<div><br></div><div>As to whether there is a difference between ARG1=\0 and ARG1\0, I'm not sure.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 22, 2016 at 9:12 AM, Zachary Turner <span dir="ltr"><<a href="mailto:zturner@google.com" target="_blank">zturner@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks for the test.  Is there any practical difference between "ARGS=" and "ARGS"?</div><div class="HOEnZb"><div class="h5"><br><div class="gmail_quote"><div dir="ltr">On Thu, Sep 22, 2016 at 9:08 AM Todd Fiala via lldb-commits <<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: tfiala<br>
Date: Thu Sep 22 11:00:01 2016<br>
New Revision: 282171<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=282171&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=282171&view=rev</a><br>
Log:<br>
added environment variable-related Args gtests<br>
<br>
Also fixed up a couple misbehaving functions.  It is perfectly<br>
legal to have env vars with no values (i.e. the '=' and following<br>
need not be present).<br>
<br>
Modified:<br>
    lldb/trunk/source/Interpreter/<wbr>Args.cpp<br>
    lldb/trunk/unittests/<wbr>Interpreter/TestArgs.cpp<br>
<br>
Modified: lldb/trunk/source/Interpreter/<wbr>Args.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/Args.cpp?rev=282171&r1=282170&r2=282171&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lldb/trunk/source/<wbr>Interpreter/Args.cpp?rev=<wbr>282171&r1=282170&r2=282171&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- lldb/trunk/source/Interpreter/<wbr>Args.cpp (original)<br>
+++ lldb/trunk/source/Interpreter/<wbr>Args.cpp Thu Sep 22 11:00:01 2016<br>
@@ -976,13 +976,15 @@ void Args::LongestCommonPrefix(std:<wbr>:stri<br>
<br>
 void Args::<wbr>AddOrReplaceEnvironmentVariabl<wbr>e(llvm::StringRef env_var_name,<br>
                                            llvm::StringRef new_value) {<br>
-  if (env_var_name.empty() || new_value.empty())<br>
+  if (env_var_name.empty())<br>
     return;<br>
<br>
   // Build the new entry.<br>
   std::string var_string(env_var_name);<br>
-  var_string += "=";<br>
-  var_string += new_value;<br>
+  if (!new_value.empty()) {<br>
+    var_string += "=";<br>
+    var_string += new_value;<br>
+  }<br>
<br>
   size_t index = 0;<br>
   if (ContainsEnvironmentVariable(<wbr>env_var_name, &index)) {<br>
@@ -1006,7 +1008,7 @@ bool Args::<wbr>ContainsEnvironmentVariable(l<br>
<br>
     llvm::StringRef name, value;<br>
     std::tie(name, value) = arg_value.split('=');<br>
-    if (name == env_var_name && !value.empty()) {<br>
+    if (name == env_var_name) {<br>
       if (argument_index)<br>
         *argument_index = i;<br>
       return true;<br>
<br>
Modified: lldb/trunk/unittests/<wbr>Interpreter/TestArgs.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Interpreter/TestArgs.cpp?rev=282171&r1=282170&r2=282171&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lldb/trunk/unittests/<wbr>Interpreter/TestArgs.cpp?rev=<wbr>282171&r1=282170&r2=282171&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- lldb/trunk/unittests/<wbr>Interpreter/TestArgs.cpp (original)<br>
+++ lldb/trunk/unittests/<wbr>Interpreter/TestArgs.cpp Thu Sep 22 11:00:01 2016<br>
@@ -11,6 +11,9 @@<br>
<br>
 #include "lldb/Interpreter/Args.h"<br>
<br>
+#include <limits><br>
+#include <sstream><br>
+<br>
 using namespace lldb_private;<br>
<br>
 TEST(ArgsTest, TestSingleArg) {<br>
@@ -153,3 +156,85 @@ TEST(ArgsTest, StringToScriptLanguage) {<br>
 }<br>
<br>
 TEST(ArgsTest, StringToVersion) {}<br>
+<br>
+// Environment Variable Tests<br>
+<br>
+class EnvVarFixture: public ::testing::Test {<br>
+protected:<br>
+<br>
+    void SetUp() {<br>
+        args.AppendArgument(llvm::<wbr>StringRef("Arg1=foo"));<br>
+        args.AppendArgument(llvm::<wbr>StringRef("Arg2"));<br>
+        args.AppendArgument(llvm::<wbr>StringRef("Arg3=bar"));<br>
+    }<br>
+<br>
+    size_t GetIndexForEnvVar(llvm::<wbr>StringRef envvar_name) {<br>
+        size_t argument_index = std::numeric_limits<size_t>::<wbr>max();<br>
+        EXPECT_TRUE(args.<wbr>ContainsEnvironmentVariable(<wbr>envvar_name,<br>
+                                                     &argument_index));<br>
+        EXPECT_LT(argument_index, args.GetArgumentCount());<br>
+        return argument_index;<br>
+    }<br>
+<br>
+    Args  args;<br>
+};<br>
+<br>
+<br>
+TEST_F(EnvVarFixture, TestContainsEnvironmentVariabl<wbr>eNoValue) {<br>
+    EXPECT_TRUE(args.<wbr>ContainsEnvironmentVariable(<wbr>llvm::StringRef("Arg2")));<br>
+}<br>
+<br>
+TEST_F(EnvVarFixture, TestContainsEnvironmentVariabl<wbr>eWithValue) {<br>
+    EXPECT_TRUE(args.<wbr>ContainsEnvironmentVariable(<wbr>llvm::StringRef("Arg3")));<br>
+}<br>
+<br>
+TEST_F(EnvVarFixture, TestContainsEnvironmentVariabl<wbr>eNonExistentVariable) {<br>
+    auto nonexistent_envvar = llvm::StringRef("<wbr>ThisEnvVarShouldNotExist");<br>
+    EXPECT_FALSE(args.<wbr>ContainsEnvironmentVariable(<wbr>nonexistent_envvar));<br>
+}<br>
+<br>
+TEST_F(EnvVarFixture, TestReplaceEnvironmentVariable<wbr>InitialNoValueWithNoValue) {<br>
+    auto envvar_name = llvm::StringRef("Arg2");<br>
+    auto argument_index = GetIndexForEnvVar(envvar_name)<wbr>;<br>
+<br>
+    args.<wbr>AddOrReplaceEnvironmentVariabl<wbr>e(envvar_name, llvm::StringRef(""));<br>
+    EXPECT_TRUE(args.<wbr>ContainsEnvironmentVariable(<wbr>envvar_name));<br>
+    EXPECT_EQ(envvar_name, args.GetArgumentAtIndex(<wbr>argument_index));<br>
+}<br>
+<br>
+TEST_F(EnvVarFixture, TestReplaceEnvironmentVariable<wbr>InitialNoValueWithValue) {<br>
+    auto envvar_name = llvm::StringRef("Arg2");<br>
+    auto argument_index = GetIndexForEnvVar(envvar_name)<wbr>;<br>
+<br>
+    auto new_value = llvm::StringRef("NewValue");<br>
+    args.<wbr>AddOrReplaceEnvironmentVariabl<wbr>e(envvar_name, new_value);<br>
+    EXPECT_TRUE(args.<wbr>ContainsEnvironmentVariable(<wbr>envvar_name));<br>
+<br>
+    std::stringstream stream;<br>
+    stream << envvar_name.str() << '=' << new_value.str();<br>
+    EXPECT_EQ(llvm::StringRef(<wbr>stream.str()),<br>
+              args.GetArgumentAtIndex(<wbr>argument_index));<br>
+}<br>
+<br>
+TEST_F(EnvVarFixture, TestReplaceEnvironmentVariable<wbr>InitialValueWithNoValue) {<br>
+    auto envvar_name = llvm::StringRef("Arg1");<br>
+    auto argument_index = GetIndexForEnvVar(envvar_name)<wbr>;<br>
+<br>
+    args.<wbr>AddOrReplaceEnvironmentVariabl<wbr>e(envvar_name, llvm::StringRef(""));<br>
+    EXPECT_TRUE(args.<wbr>ContainsEnvironmentVariable(<wbr>envvar_name));<br>
+    EXPECT_EQ(envvar_name, args.GetArgumentAtIndex(<wbr>argument_index));<br>
+}<br>
+<br>
+TEST_F(EnvVarFixture, TestReplaceEnvironmentVariable<wbr>InitialValueWithValue) {<br>
+    auto envvar_name = llvm::StringRef("Arg1");<br>
+    auto argument_index = GetIndexForEnvVar(envvar_name)<wbr>;<br>
+<br>
+    auto new_value = llvm::StringRef("NewValue");<br>
+    args.<wbr>AddOrReplaceEnvironmentVariabl<wbr>e(envvar_name, new_value);<br>
+    EXPECT_TRUE(args.<wbr>ContainsEnvironmentVariable(<wbr>envvar_name));<br>
+<br>
+    std::stringstream stream;<br>
+    stream << envvar_name.str() << '=' << new_value.str();<br>
+    EXPECT_EQ(llvm::StringRef(<wbr>stream.str()),<br>
+              args.GetArgumentAtIndex(<wbr>argument_index));<br>
+}<br>
<br>
<br>
______________________________<wbr>_________________<br>
lldb-commits mailing list<br>
<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/lldb-commits</a><br>
</blockquote></div>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">-Todd</div></div>
</div>