which is also what other makefs fs do.
vp = NULL;
error = hammer2_nmkdir(dvp, &vp, cur->name,
- strlen(cur->name));
+ strlen(cur->name), cur->inode->st.st_mode);
if (error)
errx(1, "hammer2_nmkdir(\"%s\") failed: %s",
cur->name, strerror(error));
vp = NULL;
error = hammer2_ncreate(dvp, &vp, cur->name,
- strlen(cur->name));
+ strlen(cur->name), cur->inode->st.st_mode);
if (error)
errx(1, "hammer2_ncreate(\"%s\") failed: %s",
cur->name, strerror(error));
vp = NULL;
error = hammer2_nsymlink(dvp, &vp, cur->name,
- strlen(cur->name), cur->symlink);
+ strlen(cur->name), cur->symlink,
+ cur->inode->st.st_mode);
if (error)
errx(1, "hammer2_nsymlink(\"%s\") failed: %s",
cur->name, strerror(error));
vp = NULL;
error = hammer2_nmknod(dvp, &vp, cur->name,
- strlen(cur->name), VFIFO);
+ strlen(cur->name), VFIFO, cur->inode->st.st_mode);
if (error)
errx(1, "hammer2_nmknod(\"%s\") failed: %s",
cur->name, strerror(error));
int hammer2_reclaim(struct m_vnode *vp);
int hammer2_write(struct m_vnode *vp, void *buf, size_t size, off_t offset);
int hammer2_nresolve(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen);
-int hammer2_nmkdir(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen);
+int hammer2_nmkdir(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
+ mode_t mode);
int hammer2_nlink(struct m_vnode *dvp, struct m_vnode *vp, char *name, int nlen);
-int hammer2_ncreate(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen);
+int hammer2_ncreate(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
+ mode_t mode);
int hammer2_nmknod(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
- int type);
+ int type, mode_t mode);
int hammer2_nsymlink(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
- char *target);
+ char *target, mode_t mode);
/*
* hammer2_buf.c
}
int
-hammer2_nmkdir(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen)
+hammer2_nmkdir(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
+ mode_t mode)
{
struct namecache nc = {
.nc_name = name,
uid_t va_gid = VNOVAL; //getgid();
struct vattr va = {
.va_type = VDIR,
- .va_mode = 0755, /* should be tunable */
+ .va_mode = mode & ~S_IFMT,
.va_uid = va_uid,
.va_gid = va_gid,
};
}
int
-hammer2_ncreate(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen)
+hammer2_ncreate(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
+ mode_t mode)
{
struct namecache nc = {
.nc_name = name,
uid_t va_gid = VNOVAL; //getgid();
struct vattr va = {
.va_type = VREG,
- .va_mode = 0644, /* should be tunable */
+ .va_mode = mode & ~S_IFMT,
.va_uid = va_uid,
.va_gid = va_gid,
};
int
hammer2_nmknod(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
- int type)
+ int type, mode_t mode)
{
struct namecache nc = {
.nc_name = name,
uid_t va_gid = VNOVAL; //getgid();
struct vattr va = {
.va_type = type,
- .va_mode = 0644, /* should be tunable */
+ .va_mode = mode & ~S_IFMT,
.va_uid = va_uid,
.va_gid = va_gid,
};
int
hammer2_nsymlink(struct m_vnode *dvp, struct m_vnode **vpp, char *name, int nlen,
- char *target)
+ char *target, mode_t mode)
{
struct namecache nc = {
.nc_name = name,
uid_t va_gid = VNOVAL; //getgid();
struct vattr va = {
.va_type = VDIR,
- .va_mode = 0755, /* should be tunable */
+ .va_mode = mode & ~S_IFMT,
.va_uid = va_uid,
.va_gid = va_gid,
};