uint8_t* bytep;\r
size_t bytes;\r
char setpass;\r
+ uint8_t delimiter;\r
+ static const uint8_t dlink_prefix[] = { '/', '.', '.', '/' };\r
+# define dlink_prefix_len 4\r
assert_link(link);\r
if (link->link.dlink != NULL)\r
return link->link.dlink;\r
count_bytes_in_namelist:\r
while (namelist_iter != NULL)\r
{ bytep = namelist_iter->name;\r
- while (*bytep++)\r
- bytes++;\r
+ while (*bytep++);\r
+ bytes += (bytep - namelist_iter->name);\r
namelist_iter = namelist_iter->nextsib;\r
}\r
if (setpass == 0)\r
namelist_iter = setld->namelist;\r
goto count_bytes_in_namelist;\r
}\r
- bytes += 2; //trailing '\0' and preceding '.'\r
+ bytes += dlink_prefix_len;\r
link->link.dlink = stack_alloc(&namepages, bytes);\r
- bytes = 0;\r
- link->link.dlink[bytes++] = '.'; //dlinks start with '.'\r
+ for (bytes = 0; bytes < dlink_prefix_len; bytes++)\r
+ link->link.dlink[bytes] = dlink_prefix[bytes];\r
namelist_iter = classld->namelist;\r
setpass = 0;\r
+ delimiter = APC_CLASS_DELIMITER;\r
copy_bytes_in_namelist:\r
while (namelist_iter != NULL)\r
{ bytep = namelist_iter->name;\r
while (*bytep)\r
link->link.dlink[bytes++] = *bytep++;\r
+ link->link.dlink[bytes++] = delimiter;\r
namelist_iter = namelist_iter->nextsib;\r
}\r
if (setpass == 0)\r
{ setpass = 1;\r
namelist_iter = setld->namelist;\r
+ delimiter = APC_SET_DELIMITER;\r
+ link->link.dlink[bytes - 1] = delimiter; //overwrite last delimiter\r
goto copy_bytes_in_namelist;\r
}\r
link->link.dlink[bytes] = '\0'; //tailing '\0' null termination\r