diff options
Diffstat (limited to 'kernel/scalls')
-rw-r--r-- | kernel/scalls/shm.h | 2 | ||||
-rw-r--r-- | kernel/scalls/stat.c | 9 | ||||
-rw-r--r-- | kernel/scalls/stat.h | 24 |
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); |