Index: trunk/src/idpath.c =================================================================== --- trunk/src/idpath.c (revision 30870) +++ trunk/src/idpath.c (revision 30871) @@ -160,10 +160,18 @@ } -void pcb_append_idpath(gds_t *dst, const pcb_idpath_t *idp) +void pcb_append_idpath(gds_t *dst, const pcb_idpath_t *idp, pcb_bool relative) { int n; + if (!relative) { + size_t end = dst->used; + gds_enlarge(dst, dst->used + 32); + dst->used = end; + pcb_data_name_by_addr(idp->data_addr, dst->array+end); + dst->used += strlen(dst->array+end); + } + for(n = 0; n < idp->len; n++) pcb_append_printf(dst, "/%ld", idp->id[n]); } @@ -174,11 +182,7 @@ gds_init(&tmp); gds_enlarge(&tmp, 32); - if (!relative) - tmp.used = strlen(pcb_data_name_by_addr(idp->data_addr, tmp.array)); - - pcb_append_idpath(&tmp, idp); - + pcb_append_idpath(&tmp, idp, relative); return tmp.array; } Index: trunk/src/idpath.h =================================================================== --- trunk/src/idpath.h (revision 30870) +++ trunk/src/idpath.h (revision 30871) @@ -61,7 +61,7 @@ pcb_idpath_t *pcb_obj2idpath(pcb_any_obj_t *obj); pcb_idpath_t *pcb_str2idpath(pcb_board_t *pcb, const char *str); /* slash separated list of ids */ char *pcb_idpath2str(const pcb_idpath_t *idp, pcb_bool relative); -void pcb_append_idpath(gds_t *dst, const pcb_idpath_t *idp); +void pcb_append_idpath(gds_t *dst, const pcb_idpath_t *idp, pcb_bool relative); pcb_any_obj_t *pcb_idpath2obj_in(pcb_data_t *data, const pcb_idpath_t *path); pcb_idpath_t *pcb_idpath_dup(const pcb_idpath_t *path); void pcb_idpath_destroy(pcb_idpath_t *path); Index: trunk/src_plugins/report/report.c =================================================================== --- trunk/src_plugins/report/report.c (revision 30870) +++ trunk/src_plugins/report/report.c (revision 30871) @@ -407,7 +407,7 @@ { pcb_idpath_t *idp = pcb_obj2idpath((pcb_any_obj_t *)ptr2); gds_append_str(&tmp, "\nidpath: "); - pcb_append_idpath(&tmp, idp); + pcb_append_idpath(&tmp, idp, 0); pcb_idpath_destroy(idp); }