Fix: improve CD_ASSIGN handling when adding custom data layer
Previously, the code would incorrectly free the passed in custom data layer even when `CD_ASSIGN` was not used. Now the function actually supports assigning the data to the layer. This only fixes the case for custom data layer types that only support a single layer like `CD_MEDGE`. Informally reviewed by Hans Goudey.
This commit is contained in:
@@ -2799,11 +2799,6 @@ static CustomDataLayer *customData_add_layer__internal(CustomData *data,
|
|||||||
const LayerTypeInfo *typeInfo = layerType_getInfo(type);
|
const LayerTypeInfo *typeInfo = layerType_getInfo(type);
|
||||||
int flag = 0;
|
int flag = 0;
|
||||||
|
|
||||||
if (!typeInfo->defaultname && CustomData_has_layer(data, type)) {
|
|
||||||
MEM_SAFE_FREE(layerdata);
|
|
||||||
return &data->layers[CustomData_get_layer_index(data, type)];
|
|
||||||
}
|
|
||||||
|
|
||||||
void *newlayerdata = nullptr;
|
void *newlayerdata = nullptr;
|
||||||
switch (alloctype) {
|
switch (alloctype) {
|
||||||
case CD_SET_DEFAULT:
|
case CD_SET_DEFAULT:
|
||||||
@@ -2856,6 +2851,21 @@ static CustomDataLayer *customData_add_layer__internal(CustomData *data,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Some layer types only support a single layer. */
|
||||||
|
const bool reuse_existing_layer = !typeInfo->defaultname && CustomData_has_layer(data, type);
|
||||||
|
if (reuse_existing_layer) {
|
||||||
|
CustomDataLayer &layer = data->layers[CustomData_get_layer_index(data, type)];
|
||||||
|
if (layer.data != nullptr) {
|
||||||
|
if (typeInfo->free) {
|
||||||
|
typeInfo->free(layer.data, totelem, typeInfo->size);
|
||||||
|
}
|
||||||
|
MEM_SAFE_FREE(layer.data);
|
||||||
|
}
|
||||||
|
layer.data = newlayerdata;
|
||||||
|
layer.flag = flag;
|
||||||
|
return &layer;
|
||||||
|
}
|
||||||
|
|
||||||
int index = data->totlayer;
|
int index = data->totlayer;
|
||||||
if (index >= data->maxlayer) {
|
if (index >= data->maxlayer) {
|
||||||
if (!customData_resize(data, CUSTOMDATA_GROW)) {
|
if (!customData_resize(data, CUSTOMDATA_GROW)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user