summaryrefslogtreecommitdiff
path: root/kernel/scalls
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/scalls')
-rw-r--r--kernel/scalls/shm.h2
-rw-r--r--kernel/scalls/stat.c9
-rw-r--r--kernel/scalls/stat.h24
3 files changed, 5 insertions, 30 deletions
diff --git a/kernel/scalls/shm.h b/kernel/scalls/shm.h
index 61a30b0..a247cfd 100644
--- a/kernel/scalls/shm.h
+++ b/kernel/scalls/shm.h
@@ -2,7 +2,7 @@
#define SYS_SHM_H
#include <stddef.h>
#include <typedefs.h>
-typedef int mode_t;
+#include <sys/types.h>
typedef struct SYS_SHM_OPEN_PARAMS {
const char *name;
diff --git a/kernel/scalls/stat.c b/kernel/scalls/stat.c
index 0850151..9fc115b 100644
--- a/kernel/scalls/stat.c
+++ b/kernel/scalls/stat.c
@@ -5,9 +5,8 @@
int syscall_stat(SYS_STAT_PARAMS *args) {
const char *pathname = copy_and_allocate_user_string(args->pathname);
struct stat *statbuf = args->statbuf;
- vfs_inode_t *i = vfs_internal_open(pathname);
- if (!i)
- return -ENOENT;
- statbuf->st_size = i->file_size;
- return 0;
+ int fd = vfs_open(pathname, O_READ, 0);
+ int rc = vfs_fstat(fd, statbuf);
+ vfs_close(fd);
+ return rc;
}
diff --git a/kernel/scalls/stat.h b/kernel/scalls/stat.h
index 78e8c45..24c5d7c 100644
--- a/kernel/scalls/stat.h
+++ b/kernel/scalls/stat.h
@@ -6,28 +6,4 @@ typedef struct SYS_STAT_PARAMS {
struct stat *statbuf;
} __attribute__((packed)) SYS_STAT_PARAMS;
-struct stat {
- dev_t st_dev; // Device ID of device containing file.
- ino_t st_ino; // File serial number.
- mode_t st_mode; // Mode of file (see below).
- nlink_t st_nlink; // Number of hard links to the file.
- uid_t st_uid; // User ID of file.
- gid_t st_gid; // Group ID of file.
- dev_t st_rdev; // Device ID (if file is character or block special).
- off_t st_size; // For regular files, the file size in bytes.
- // For symbolic links, the length in bytes of the
- // pathname contained in the symbolic link.
- // For a shared memory object, the length in bytes.
- // For a typed memory object, the length in bytes.
- // For other file types, the use of this field is
- // unspecified.
- struct timespec st_atim; // Last data access timestamp.
- struct timespec st_mtim; // Last data modification timestamp.
- struct timespec st_ctim; // Last file status change timestamp.
- blksize_t st_blksize; // A file system-specific preferred I/O block size
- // for this object. In some file system types, this
- // may vary from file to file.
- blkcnt_t st_blocks; // Number of blocks allocated for this object.
-};
-
int syscall_stat(SYS_STAT_PARAMS *args);