X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fdentry.c;h=47ea13445d76b53dbe4ae5b430a7ec67330a45ea;hp=435a7c919665f89ee3736069e7f4f432b233d87b;hb=b40ff7c0765979aedb2766534aa9cee44bfb1b69;hpb=b0a6bbcba9dc23f4722827cb13fb0efff5e2799d diff --git a/src/dentry.c b/src/dentry.c index 435a7c91..47ea1344 100644 --- a/src/dentry.c +++ b/src/dentry.c @@ -79,7 +79,9 @@ struct wim_dentry_on_disk { /* Length of this directory entry in bytes, not including any alternate * data stream entries. Should be a multiple of 8 so that the following * dentry or alternate data stream entry is aligned on an 8-byte - * boundary. (If not, wimlib will round it up.) + * boundary. (If not, wimlib will round it up.) It must be at least as + * long as the fixed-length fields of the dentry (WIM_DENTRY_DISK_SIZE), + * plus the lengths of the file name and/or short name if present. * * It is also possible for this field to be 0. This situation, which is * undocumented, indicates the end of a list of sibling nodes in a @@ -98,26 +100,23 @@ struct wim_dentry_on_disk { * security descriptors (see: `struct wim_security_data') */ sle32 security_id; - /* Offset from the start of the uncompressed metadata resource of this - * directory's child directory entries, or 0 if this directory entry - * does not correspond to a directory or otherwise does not have any - * children. */ + /* Offset, in bytes, from the start of the uncompressed metadata + * resource of this directory's child directory entries, or 0 if this + * directory entry does not correspond to a directory or otherwise does + * not have any children. */ le64 subdir_offset; /* Reserved fields */ le64 unused_1; le64 unused_2; - /* The following three time fields should correspond to those gotten by - * calling GetFileTime() on Windows. */ - /* Creation time, in 100-nanosecond intervals since January 1, 1601. */ + /* Creation time, last access time, and last write time, in + * 100-nanosecond intervals since 12:00 a.m UTC January 1, 1601. They + * should correspond to the times gotten by calling GetFileTime() on + * Windows. */ le64 creation_time; - - /* Last access time, in 100-nanosecond intervals since January 1, 1601. */ le64 last_access_time; - - /* Last write time, in 100-nanosecond intervals since January 1, 1601. */ le64 last_write_time; /* Vaguely, the SHA-1 message digest ("hash") of the file's contents. @@ -153,7 +152,7 @@ struct wim_dentry_on_disk { * version of the following fields containing the reparse tag is valid. * Furthermore, the field notated as not_rpfixed, as far as I can tell, * is supposed to be set to 1 if reparse point fixups (a.k.a. fixing the - * targets of absolute symbolic links) were done, and otherwise 0. + * targets of absolute symbolic links) were *not* done, and otherwise 0. * * If this directory entry is not for a reparse point, then the version * of the following fields containing the hard_link_group_id is valid. @@ -170,9 +169,9 @@ struct wim_dentry_on_disk { * guaranteed that directory entries that share the same hard link * group ID are actually hard linked to each either. We have to * handle this by using special code to use distinguishing features - * (possible because some information about the underlying inode is - * repeated in each dentry) to split up these fake hard link groups - * into what they actually are supposed to be. + * (which is possible because some information about the underlying + * inode is repeated in each dentry) to split up these fake hard link + * groups into what they actually are supposed to be. */ union { struct { @@ -202,9 +201,9 @@ struct wim_dentry_on_disk { * set to 0. */ le16 file_name_nbytes; - /* Follewed by variable length file name, in UTF16-LE, if + /* Followed by variable length file name, in UTF16-LE, if * file_name_nbytes != 0. Includes null terminator. */ - utf16lechar file_name[]; + /*utf16lechar file_name[];*/ /* Followed by variable length short name, in UTF16-LE, if * short_name_nbytes != 0. Includes null terminator. */ @@ -984,13 +983,6 @@ new_timeless_inode(void) inode->i_next_stream_id = 1; inode->i_not_rpfixed = 1; INIT_LIST_HEAD(&inode->i_list); - #ifdef WITH_FUSE - if (pthread_mutex_init(&inode->i_mutex, NULL) != 0) { - ERROR_WITH_ERRNO("Error initializing mutex"); - FREE(inode); - return NULL; - } - #endif INIT_LIST_HEAD(&inode->i_dentry); } return inode; @@ -1129,16 +1121,10 @@ free_inode(struct wim_inode *inode) destroy_ads_entry(&inode->i_ads_entries[i]); FREE(inode->i_ads_entries); } - #ifdef WITH_FUSE - wimlib_assert(inode->i_num_opened_fds == 0); - FREE(inode->i_fds); - pthread_mutex_destroy(&inode->i_mutex); - #endif /* HACK: This may instead delete the inode from i_list, but the * hlist_del() behaves the same as list_del(). */ if (!hlist_unhashed(&inode->i_hlist)) hlist_del(&inode->i_hlist); - FREE(inode->i_extracted_file); FREE(inode); } } @@ -1827,7 +1813,7 @@ read_dentry(const u8 * restrict metadata_resource, u64 metadata_resource_len, * fixed-length fields */ if (dentry->length < sizeof(struct wim_dentry_on_disk)) { ERROR("Directory entry has invalid length of %"PRIu64" bytes", - entry->length); + dentry->length); return WIMLIB_ERR_INVALID_DENTRY; } @@ -2004,8 +1990,9 @@ dentry_get_file_type_string(const struct wim_dentry *dentry) * Returns zero on success; nonzero on failure. */ int -read_dentry_tree(const u8 metadata_resource[], u64 metadata_resource_len, - struct wim_dentry *dentry) +read_dentry_tree(const u8 * restrict metadata_resource, + u64 metadata_resource_len, + struct wim_dentry * restrict dentry) { u64 cur_offset = dentry->subdir_offset; struct wim_dentry *child; @@ -2251,7 +2238,7 @@ write_dentry_tree_recursive(const struct wim_dentry *parent, u8 *p) * Returns pointer to the byte after the last byte we wrote. */ u8 * -write_dentry_tree(const struct wim_dentry *root, u8 *p) +write_dentry_tree(const struct wim_dentry * restrict root, u8 * restrict p) { DEBUG("Writing dentry tree."); wimlib_assert(dentry_is_root(root));