353 bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, FlagValueOrigin origin) { |
353 bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, FlagValueOrigin origin) { |
354 Flag* result = Flag::find_flag(name, len); |
354 Flag* result = Flag::find_flag(name, len); |
355 if (result == NULL) return false; |
355 if (result == NULL) return false; |
356 if (!result->is_ccstr()) return false; |
356 if (!result->is_ccstr()) return false; |
357 ccstr old_value = result->get_ccstr(); |
357 ccstr old_value = result->get_ccstr(); |
358 char* new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1); |
358 char* new_value = NULL; |
359 strcpy(new_value, *value); |
359 if (*value != NULL) { |
|
360 new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1); |
|
361 strcpy(new_value, *value); |
|
362 } |
360 result->set_ccstr(new_value); |
363 result->set_ccstr(new_value); |
361 if (result->origin == DEFAULT && old_value != NULL) { |
364 if (result->origin == DEFAULT && old_value != NULL) { |
362 // Prior value is NOT heap allocated, but was a literal constant. |
365 // Prior value is NOT heap allocated, but was a literal constant. |
363 char* old_value_to_free = NEW_C_HEAP_ARRAY(char, strlen(old_value)+1); |
366 char* old_value_to_free = NEW_C_HEAP_ARRAY(char, strlen(old_value)+1); |
364 strcpy(old_value_to_free, old_value); |
367 strcpy(old_value_to_free, old_value); |