int mdir_changefid(struct mnode *dir, const char *name, AFSFid fid) { fbuf the_fbuf; VenusFid vfid; int ret, saved_ret; int32_t len; assert (dir->flags.sbp); assert (dir->flags.fdp); vfid.Cell = 0; vfid.fid = fid; ret = fbuf_create (&the_fbuf, dir->fd, dir->sb.st_size, FBUF_READ|FBUF_WRITE|FBUF_SHARED); if (ret) return ret; saved_ret = fdir_changefid (&the_fbuf, name, &vfid); if (ret == 0) { len = fbuf_len (&the_fbuf); mnode_update_size (dir, &len); } ret = fbuf_end (&the_fbuf); if (ret) return ret; return saved_ret; }
int mdir_remove (struct mnode *node, const char *name) { fbuf the_fbuf; int ret, saved_ret; int32_t len; assert (node->flags.sbp); assert (node->flags.fdp); ret = fbuf_create (&the_fbuf, node->fd, node->sb.st_size, FBUF_READ|FBUF_WRITE|FBUF_SHARED); if (ret) return ret; saved_ret = fdir_remove (&the_fbuf, name, NULL); if (ret == 0) { len = fbuf_len (&the_fbuf); mnode_update_size (node, &len); } ret = fbuf_end (&the_fbuf); if (ret) return ret; return saved_ret; }
int mdir_mkdir (struct mnode *node, AFSFid dot, AFSFid dot_dot) { fbuf the_fbuf; int ret, saved_ret; int32_t len; assert (node->flags.sbp); assert (node->flags.fdp); ret = fbuf_create (&the_fbuf, node->fd, node->sb.st_size, FBUF_READ|FBUF_WRITE|FBUF_SHARED); if (ret) return ret; saved_ret = fdir_mkdir (&the_fbuf, dot, dot_dot); if (ret == 0) { len = fbuf_len (&the_fbuf); mnode_update_size (node, &len); } ret = fbuf_end (&the_fbuf); if (ret) return ret; return saved_ret; }
int mnode_update_size_cached (struct mnode *n) { if (n->flags.sbp == FALSE) { assert (n->flags.fdp); return mnode_update_size (n, NULL); } n->fs.Length = n->sb.st_size; return 0; }