dentry.{c,h}: Cleanup and fixes
authorEric Biggers <ebiggers3@gmail.com>
Wed, 22 May 2013 23:34:43 +0000 (18:34 -0500)
committerEric Biggers <ebiggers3@gmail.com>
Wed, 22 May 2013 23:34:43 +0000 (18:34 -0500)
include/wimlib/dentry.h
src/dentry.c
src/extract.c

index 9e24529..a571e02 100644 (file)
@@ -562,15 +562,18 @@ inode_set_unix_data(struct wim_inode *inode, uid_t uid, gid_t gid, mode_t mode,
 #endif
 
 extern int
-read_dentry(const u8 *metadata_resource, u64 metadata_resource_len,
-           u64 offset, struct wim_dentry *dentry);
+read_dentry(const u8 * restrict metadata_resource,
+           u64 metadata_resource_len, u64 offset,
+           struct wim_dentry * restrict dentry);
 
 extern 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);
 
 extern u8 *
-write_dentry_tree(const struct wim_dentry *tree, u8 *p);
+write_dentry_tree(const struct wim_dentry * restrict tree,
+                 u8 * restrict p);
 
 static inline bool
 dentry_is_root(const struct wim_dentry *dentry)
@@ -581,8 +584,9 @@ dentry_is_root(const struct wim_dentry *dentry)
 static inline bool
 inode_is_directory(const struct wim_inode *inode)
 {
-       return (inode->i_attributes & FILE_ATTRIBUTE_DIRECTORY)
-               && !(inode->i_attributes & FILE_ATTRIBUTE_REPARSE_POINT);
+       return (inode->i_attributes & (FILE_ATTRIBUTE_DIRECTORY |
+                                      FILE_ATTRIBUTE_REPARSE_POINT))
+                       == FILE_ATTRIBUTE_DIRECTORY;
 }
 
 static inline bool
@@ -602,18 +606,6 @@ inode_is_symlink(const struct wim_inode *inode)
 }
 
 static inline bool
-inode_is_regular_file(const struct wim_inode *inode)
-{
-       return !inode_is_directory(inode) && !inode_is_symlink(inode);
-}
-
-static inline bool
-dentry_is_regular_file(const struct wim_dentry *dentry)
-{
-       return inode_is_regular_file(dentry->d_inode);
-}
-
-static inline bool
 inode_has_children(const struct wim_inode *inode)
 {
        return inode->i_children.rb_node != NULL;
@@ -643,7 +635,7 @@ inode_ref_streams(struct wim_inode *inode);
 extern int
 dentry_tree_fix_inodes(struct wim_dentry *root, struct list_head *inode_list);
 
-int
+extern int
 verify_inode(struct wim_inode *inode, const struct wim_security_data *sd);
 
-#endif
+#endif /* _WIMLIB_DENTRY_H */
index 451d412..70250a7 100644 (file)
@@ -1994,8 +1994,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;
@@ -2241,7 +2242,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));
index 3e0e6af..d6cc9c4 100644 (file)
@@ -439,9 +439,11 @@ static int
 extract_dentry_to_stdout(struct wim_dentry *dentry)
 {
        int ret = 0;
-       if (!dentry_is_regular_file(dentry)) {
+       if (dentry->d_inode->i_attributes & (FILE_ATTRIBUTE_REPARSE_POINT |
+                                            FILE_ATTRIBUTE_DIRECTORY))
+       {
                ERROR("\"%"TS"\" is not a regular file and therefore cannot be "
-                     "extracted to standard output", dentry->_full_path);
+                     "extracted to standard output", dentry_full_path(dentry));
                ret = WIMLIB_ERR_NOT_A_REGULAR_FILE;
        } else {
                struct wim_lookup_table_entry *lte;