X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fmount_image.c;h=2e50d6c3422c2e650727917caba50a38d8ae90e1;hb=2fd8ff1904371cf9bfbab7105287cc221379552b;hp=0bd4a1f1d76d3463aa642ce2581f8b780f38e1c2;hpb=7251c7d0afac3b738dda1c4f45e6d3d3090f2622;p=wimlib diff --git a/src/mount_image.c b/src/mount_image.c index 0bd4a1f1..2e50d6c3 100644 --- a/src/mount_image.c +++ b/src/mount_image.c @@ -37,20 +37,12 @@ # error "FUSE mount not supported on Windows! Please configure --without-fuse" #endif -#include "wimlib/dentry.h" -#include "wimlib/encoding.h" -#include "wimlib/lookup_table.h" -#include "wimlib/metadata.h" -#include "wimlib/paths.h" -#include "wimlib/progress.h" -#include "wimlib/reparse.h" -#include "wimlib/timestamp.h" -#include "wimlib/unix_data.h" -#include "wimlib/write.h" -#include "wimlib/xml.h" +#define FUSE_USE_VERSION 26 +#include #include #include +#include #include #include #include @@ -62,9 +54,17 @@ #include #include -#define FUSE_USE_VERSION 26 -#include -#include +#include "wimlib/dentry.h" +#include "wimlib/encoding.h" +#include "wimlib/lookup_table.h" +#include "wimlib/metadata.h" +#include "wimlib/paths.h" +#include "wimlib/progress.h" +#include "wimlib/reparse.h" +#include "wimlib/timestamp.h" +#include "wimlib/unix_data.h" +#include "wimlib/write.h" +#include "wimlib/xml.h" #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 /* Security only... */ @@ -324,15 +324,7 @@ close_wimfs_fd(struct wimfs_fd *fd) if (fd->f_idx < inode->i_next_fd) inode->i_next_fd = fd->f_idx; FREE(fd); - if (--inode->i_num_opened_fds == 0) { - /* The last file descriptor to this inode was closed. */ - FREE(inode->i_fds); - inode->i_fds = NULL; - inode->i_num_allocated_fds = 0; - if (inode->i_nlink == 0) - /* No links to this inode remain. Get rid of it. */ - free_inode(inode); - } + inode_dec_num_opened_fds(inode); return ret; } @@ -1439,12 +1431,10 @@ wimfs_link(const char *existing_path, const char *new_path) if (new_dentry(new_name, &new_alias)) return -ENOMEM; - new_alias->d_inode = inode; - inode_add_dentry(new_alias, inode); + inode_ref_streams(inode); + d_associate(new_alias, inode); dentry_add_child(dir, new_alias); touch_inode(dir->d_inode); - inode->i_nlink++; - inode_ref_streams(inode); return 0; }