- if (dentry_is_root(dentry)) {
- static const tchar _root_path[] = {WIM_PATH_SEPARATOR, T('\0')};
- full_path = TSTRDUP(_root_path);
- if (full_path == NULL)
- return WIMLIB_ERR_NOMEM;
- full_path_nbytes = 1 * sizeof(tchar);
- } else {
- struct wim_dentry *parent;
- tchar *parent_full_path;
- u32 parent_full_path_nbytes;
- size_t filename_nbytes;
-
- parent = dentry->parent;
- if (dentry_is_root(parent)) {
- parent_full_path = T("");
- parent_full_path_nbytes = 0;
- } else {
- if (parent->_full_path == NULL) {
- ret = calculate_dentry_full_path(parent);
- if (ret)
- return ret;
- }
- parent_full_path = parent->_full_path;
- parent_full_path_nbytes = parent->full_path_nbytes;
- }
+ ulen = 0;
+ d = dentry;
+ do {
+ ulen += d->file_name_nbytes / sizeof(utf16lechar);
+ ulen++;
+ d = d->parent; /* assumes d == d->parent for root */
+ } while (!dentry_is_root(d));