| Index: runtime/bin/main.cc
|
| diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
|
| index a90c1a45cd78f32f45495a9c3ab5c02926505817..d17bed422f301823a9584990e1e167f4d6113e0b 100644
|
| --- a/runtime/bin/main.cc
|
| +++ b/runtime/bin/main.cc
|
| @@ -282,28 +282,32 @@ static bool ProcessEnvironmentOption(const char* arg,
|
| environment = new HashMap(&HashMap::SameStringValue, 4);
|
| }
|
| // Split the name=value part of the -Dname=value argument.
|
| - char* name;
|
| - char* value = NULL;
|
| const char* equals_pos = strchr(arg, '=');
|
| if (equals_pos == NULL) {
|
| // No equal sign (name without value) currently not supported.
|
| Log::PrintErr("No value given to -D option\n");
|
| return false;
|
| - } else {
|
| - int name_len = equals_pos - arg;
|
| - if (name_len == 0) {
|
| - Log::PrintErr("No name given to -D option\n");
|
| - return false;
|
| - }
|
| - // Split name=value into name and value.
|
| - name = reinterpret_cast<char*>(malloc(name_len + 1));
|
| - strncpy(name, arg, name_len);
|
| - name[name_len] = '\0';
|
| - value = strdup(equals_pos + 1);
|
| }
|
| +
|
| + char* name;
|
| + char* value = NULL;
|
| + int name_len = equals_pos - arg;
|
| + if (name_len == 0) {
|
| + Log::PrintErr("No name given to -D option\n");
|
| + return false;
|
| + }
|
| + // Split name=value into name and value.
|
| + name = reinterpret_cast<char*>(malloc(name_len + 1));
|
| + strncpy(name, arg, name_len);
|
| + name[name_len] = '\0';
|
| + value = strdup(equals_pos + 1);
|
| HashMap::Entry* entry = environment->Lookup(
|
| GetHashmapKeyFromString(name), HashMap::StringHash(name), true);
|
| ASSERT(entry != NULL); // Lookup adds an entry if key not found.
|
| + if (entry->value != NULL) {
|
| + free(name);
|
| + free(entry->value);
|
| + }
|
| entry->value = value;
|
| return true;
|
| }
|
|
|