From 9c6d1157d79aaa1001e47bdd4cd2facfbbeec670 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sat, 24 Sep 2022 00:04:30 -0300 Subject: [PATCH] fs: fix wrong mode on files --- src/fs/initrd.c | 12 ++++++------ src/fs/tmpfs.c | 8 ++++++-- src/fs/vfs.c | 4 ++-- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/fs/initrd.c b/src/fs/initrd.c index fff5e1dd..b9bcbc01 100644 --- a/src/fs/initrd.c +++ b/src/fs/initrd.c @@ -87,12 +87,12 @@ static volatile void buildentry(tar_entry* entry, void* addr){ } - entry->mode = convert(block->mode, 8); - entry->uid = convert(block->uid, 8); - entry->gid = convert(block->gid, 8); + entry->mode = convert(block->mode, 7); + entry->uid = convert(block->uid, 7); + entry->gid = convert(block->gid, 7); entry->size = convert(block->size, 11); entry->modtime = convert(block->modtime, 11); - entry->checksum = convert(block->checksum, 8); + entry->checksum = convert(block->checksum, 7); entry->type = convert(block->type, 1); if(block->link[99]){ @@ -104,8 +104,8 @@ static volatile void buildentry(tar_entry* entry, void* addr){ memcpy(entry->indicator, block->indicator, 6); memcpy(entry->version, block->version, 2); - entry->devmajor = convert(block->devmajor, 8); - entry->devminor = convert(block->devminor, 8); + entry->devmajor = convert(block->devmajor, 7); + entry->devminor = convert(block->devminor, 7); diff --git a/src/fs/tmpfs.c b/src/fs/tmpfs.c index 58e8114a..b1e5f3c3 100644 --- a/src/fs/tmpfs.c +++ b/src/fs/tmpfs.c @@ -18,9 +18,10 @@ static int tmpfs_mount(dirnode_t* mountpoint, vnode_t* device, int mountflags, v free(desc); return ENOMEM; } - + desc->calls = tmpfs_getfuncs(); mountpoint->mount = root; + root->vnode.st.st_mode = MAKETYPE(TYPE_DIR) | 0777; return 0; } @@ -84,7 +85,8 @@ static int tmpfs_mkdir(dirnode_t* parent, char* name, mode_t mode){ } stat* st = &node->vnode.st; - st->st_mode = MAKETYPE(TYPE_DIR) | GETMODE(mode); + + st->st_mode = MAKETYPE(TYPE_DIR) | mode; st->st_blksize = PAGE_SIZE; return 0; @@ -117,6 +119,8 @@ static int tmpfs_create(dirnode_t* parent, char* name, mode_t mode){ stat* st = &node->st; st->st_blksize = PAGE_SIZE; st->st_blocks = 1; + st->st_mode = MAKETYPE(TYPE_REGULAR) | mode; + st->st_nlink = 1; return 0; diff --git a/src/fs/vfs.c b/src/fs/vfs.c index e6530207..282359a5 100644 --- a/src/fs/vfs.c +++ b/src/fs/vfs.c @@ -176,7 +176,7 @@ int vfs_create(dirnode_t* ref, char* path, mode_t mode){ spinlock_release(&lock); return EEXIST; } - result = parent->vnode.fs->calls->create(parent, name, NULL); + result = parent->vnode.fs->calls->create(parent, name, mode); spinlock_release(&lock); @@ -205,7 +205,7 @@ int vfs_mkdir(dirnode_t* ref, char* path, mode_t mode){ return EEXIST; } - result = parent->vnode.fs->calls->mkdir(parent, name, NULL); + result = parent->vnode.fs->calls->mkdir(parent, name, mode); spinlock_release(&lock);