Index: trunk/src/board.c =================================================================== --- trunk/src/board.c (revision 18003) +++ trunk/src/board.c (revision 18004) @@ -162,8 +162,10 @@ /* copy default settings */ for (i = 0; i < PCB_MAX_LAYER; i++) - if ((ptr->Data->Layer[i].meta.real.color == NULL) || (ptr->Data->Layer[i].meta.real.color[0] == '\0')) - ptr->Data->Layer[i].meta.real.color = pcb_layer_default_color(i, pcb_layer_flags(ptr, i)); + if ((ptr->Data->Layer[i].meta.real.color == NULL) || (ptr->Data->Layer[i].meta.real.color[0] == '\0')) { + free(ptr->Data->Layer[i].meta.real.color); + ptr->Data->Layer[i].meta.real.color = pcb_strdup(pcb_layer_default_color(i, pcb_layer_flags(ptr, i))); + } } typedef struct { Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 18003) +++ trunk/src/layer.c (revision 18004) @@ -147,6 +147,7 @@ pcb_r_destroy_tree(&layer->text_tree); if (layer->polygon_tree) pcb_r_destroy_tree(&layer->polygon_tree); + free(layer->meta.real.color); } free((char *)layer->name); memset(layer, 0, sizeof(pcb_layer_t)); @@ -505,7 +506,7 @@ lp->meta.real.grp = gid; lp->meta.real.vis = 1; lp->name = pcb_strdup("New Layer"); - lp->meta.real.color = pcb_layer_default_color(idx, (gid >= 0) ? pcb->LayerGroups.grp[gid].ltype : 0); + lp->meta.real.color = pcb_strdup(pcb_layer_default_color(idx, (gid >= 0) ? pcb->LayerGroups.grp[gid].ltype : 0)); if ((gid >= 0) && (pcb->LayerGroups.grp[gid].len == 0)) { /*When adding the first layer in a group, set up comb flags automatically */ switch((pcb->LayerGroups.grp[gid].ltype) & PCB_LYT_ANYTHING) { case PCB_LYT_MASK: lp->comb = PCB_LYC_AUTO | PCB_LYC_SUB; break; Index: trunk/src/layer.h =================================================================== --- trunk/src/layer.h (revision 18003) +++ trunk/src/layer.h (revision 18004) @@ -118,7 +118,7 @@ struct { /* A real board layer */ pcb_layergrp_id_t grp; /* the group this layer is in (cross-reference) */ pcb_bool vis; /* visible flag */ - const char *color; /* color */ + char *color; /* strdup'd */ int no_drc; /* whether to ignore the layer when checking the design rules */ const char *cookie; /* for UI layers: registration cookie; NULL for unused UI layers */ } real; Index: trunk/src/layer_ui.c =================================================================== --- trunk/src/layer_ui.c (revision 18003) +++ trunk/src/layer_ui.c (revision 18004) @@ -58,7 +58,7 @@ l = vtlayer_alloc_append(&pcb_uilayer, 1); found:; l->meta.real.cookie = cookie; - l->meta.real.color = color; + l->meta.real.color = pcb_strdup(color); l->name = pcb_strdup(name); l->meta.real.vis = 1; pcb_event(PCB_EVENT_LAYERS_CHANGED, NULL);