363 bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, FlagValueOrigin origin) { |
363 bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, FlagValueOrigin origin) { |
364 Flag* result = Flag::find_flag(name, len); |
364 Flag* result = Flag::find_flag(name, len); |
365 if (result == NULL) return false; |
365 if (result == NULL) return false; |
366 if (!result->is_ccstr()) return false; |
366 if (!result->is_ccstr()) return false; |
367 ccstr old_value = result->get_ccstr(); |
367 ccstr old_value = result->get_ccstr(); |
368 char* new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1); |
368 char* new_value = NULL; |
369 strcpy(new_value, *value); |
369 if (*value != NULL) { |
|
370 new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1); |
|
371 strcpy(new_value, *value); |
|
372 } |
370 result->set_ccstr(new_value); |
373 result->set_ccstr(new_value); |
371 if (result->origin == DEFAULT && old_value != NULL) { |
374 if (result->origin == DEFAULT && old_value != NULL) { |
372 // Prior value is NOT heap allocated, but was a literal constant. |
375 // Prior value is NOT heap allocated, but was a literal constant. |
373 char* old_value_to_free = NEW_C_HEAP_ARRAY(char, strlen(old_value)+1); |
376 char* old_value_to_free = NEW_C_HEAP_ARRAY(char, strlen(old_value)+1); |
374 strcpy(old_value_to_free, old_value); |
377 strcpy(old_value_to_free, old_value); |