Index: layer.h =================================================================== --- layer.h (revision 12344) +++ layer.h (revision 12345) @@ -28,8 +28,6 @@ #ifndef PCB_LAYER_H #define PCB_LAYER_H -/* How deep subcs can be nested */ -#define PCB_MAX_BOUND_LAYER_RECURSION 128 typedef long int pcb_layer_id_t; typedef long int pcb_layergrp_id_t; @@ -268,6 +266,25 @@ /* Open the attribute editor for a layer */ void pcb_layer_edit_attrib(pcb_layer_t *layer); + +/* How deep subcs can be nested */ +#define PCB_MAX_BOUND_LAYER_RECURSION 128 + +/* Return the real layer, resolving layer bindings. Returns NULL on + error (e.g. binding loop) */ +static inline PCB_FUNC_UNUSED pcb_layer_t *pcb_layer_get_real(pcb_layer_t *layer) +{ + int rec = 0; + + while(layer->is_bound) { + layer = layer->meta.bound.real; + rec++; + if ((rec > PCB_MAX_BOUND_LAYER_RECURSION) || (layer == NULL)) + return NULL; + } + return layer; +} + /* list of virtual layers: these are generated by the draw code but do not have a real layer in the array */ typedef struct pcb_virt_layer_s {