/* Calculate the full path of @dentry. The full path of its parent must have
* already been calculated, or it must be the root dentry. */
-static int
+int
calculate_dentry_full_path(struct wim_dentry *dentry)
{
tchar *full_path;
int
print_dentry_full_path(struct wim_dentry *dentry, void *_ignore)
{
- tchar *full_path = dentry_full_path(dentry);
- if (!full_path)
- return WIMLIB_ERR_NOMEM;
- tprintf(T("%"TS"\n"), full_path);
- FREE(full_path);
- dentry->_full_path = 0;
+ int ret = calculate_dentry_full_path(dentry);
+ if (ret)
+ return ret;
+ tprintf(T("%"TS"\n"), dentry->_full_path);
+ FREE(dentry->_full_path);
+ dentry->_full_path = NULL;
dentry->full_path_nbytes = 0;
return 0;
}
if (inode) {
inode->i_security_id = -1;
inode->i_nlink = 1;
- #ifdef WITH_FUSE
inode->i_next_stream_id = 1;
+ #ifdef WITH_FUSE
if (pthread_mutex_init(&inode->i_mutex, NULL) != 0) {
ERROR_WITH_ERRNO("Error initializing mutex");
FREE(inode);
new_entry = &inode->i_ads_entries[num_ads - 1];
if (init_ads_entry(new_entry, stream_name, stream_name_nbytes, is_utf16le))
return NULL;
-#ifdef WITH_FUSE
new_entry->stream_id = inode->i_next_stream_id++;
-#endif
inode->i_num_ads = num_ads;
return new_entry;
}
p = get_bytes(p, SHA1_HASH_SIZE, inode->i_hash);
- /*
- * I don't know what's going on here. It seems like M$ screwed up the
+ /* I don't know what's going on here. It seems like M$ screwed up the
* reparse points, then put the fields in the same place and didn't
- * document it. The WIM_HDR_FLAG_RP_FIX flag in the WIM header might
- * have something to do with this, but it's not documented.
- */
+ * document it. */
if (inode->i_attributes & FILE_ATTRIBUTE_REPARSE_POINT) {
- /* ??? */
p += 4;
p = get_u32(p, &inode->i_reparse_tag);
p += 4;
} else {
- p = get_u32(p, &inode->i_reparse_tag);
+ p += 4;
+ /* i_reparse_tag is irrelevant; just leave it at 0. */
p = get_u64(p, &inode->i_ino);
}