X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fapc.git;a=blobdiff_plain;f=src%2Fir.c;h=bdf0d36e23468ad00a5f264aef40abea4d299380;hp=12a7188edbce5b96c4e300ca3d0e21f99a080585;hb=f4410cd4b87c75bb112264cf38951461065b7ef9;hpb=c08d259f7444e5cab5e7ea2675b11becd1214d6f diff --git a/src/ir.c b/src/ir.c index 12a7188..bdf0d36 100644 --- a/src/ir.c +++ b/src/ir.c @@ -747,6 +747,9 @@ ir_linkdata_dlink_name uint8_t* bytep; size_t bytes; char setpass; + uint8_t delimiter; + static const uint8_t dlink_prefix[] = { '/', '.', '.', '/' }; +# define dlink_prefix_len 4 assert_link(link); if (link->link.dlink != NULL) return link->link.dlink; @@ -764,8 +767,8 @@ ir_linkdata_dlink_name count_bytes_in_namelist: while (namelist_iter != NULL) { bytep = namelist_iter->name; - while (*bytep++) - bytes++; + while (*bytep++); + bytes += (bytep - namelist_iter->name); namelist_iter = namelist_iter->nextsib; } if (setpass == 0) @@ -773,22 +776,26 @@ ir_linkdata_dlink_name namelist_iter = setld->namelist; goto count_bytes_in_namelist; } - bytes += 2; //trailing '\0' and preceding '.' + bytes += dlink_prefix_len; link->link.dlink = stack_alloc(&namepages, bytes); - bytes = 0; - link->link.dlink[bytes++] = '.'; //dlinks start with '.' + for (bytes = 0; bytes < dlink_prefix_len; bytes++) + link->link.dlink[bytes] = dlink_prefix[bytes]; namelist_iter = classld->namelist; setpass = 0; + delimiter = APC_CLASS_DELIMITER; copy_bytes_in_namelist: while (namelist_iter != NULL) { bytep = namelist_iter->name; while (*bytep) link->link.dlink[bytes++] = *bytep++; + link->link.dlink[bytes++] = delimiter; namelist_iter = namelist_iter->nextsib; } if (setpass == 0) { setpass = 1; namelist_iter = setld->namelist; + delimiter = APC_SET_DELIMITER; + link->link.dlink[bytes - 1] = delimiter; //overwrite last delimiter goto copy_bytes_in_namelist; } link->link.dlink[bytes] = '\0'; //tailing '\0' null termination