diff --git a/src/kernel/libroot/os/fs_attr.c b/src/kernel/libroot/os/fs_attr.c index e71edc3145..944b1ea55e 100644 --- a/src/kernel/libroot/os/fs_attr.c +++ b/src/kernel/libroot/os/fs_attr.c @@ -80,7 +80,7 @@ fs_stat_attr(int fd, const char *attribute, struct attr_info *attrInfo) if (attr < 0) RETURN_AND_SET_ERRNO(attr); - status = sys_read_stat(attr, &stat); + status = _kern_read_stat(attr, &stat, sizeof(struct stat)); if (status == B_OK) { attrInfo->type = stat.st_type; attrInfo->size = stat.st_size; diff --git a/src/kernel/libroot/os/syscalls.S b/src/kernel/libroot/os/syscalls.S index e0ab690d57..3b5b5b2977 100644 --- a/src/kernel/libroot/os/syscalls.S +++ b/src/kernel/libroot/os/syscalls.S @@ -56,10 +56,10 @@ SYSCALL6(sys_create_entry_ref, 84) SYSCALL1(sys_unlink, 12) SYSCALL2(sys_rename, 13) SYSCALL2(sys_access, 73); -SYSCALL2(sys_read_stat, 74) -SYSCALL3(sys_write_stat, 100) -SYSCALL3(sys_read_path_stat, 14) -SYSCALL4(sys_write_path_stat, 15) +SYSCALL3(_kern_read_stat, 74) +SYSCALL4(_kern_write_stat, 100) +SYSCALL4(_kern_read_path_stat, 14) +SYSCALL5(_kern_write_path_stat, 15) SYSCALL2(sys_getcwd, 41) SYSCALL2(sys_setcwd, 42) SYSCALL1(sys_dup, 61) diff --git a/src/kernel/libroot/posix/sys/chmod.c b/src/kernel/libroot/posix/sys/chmod.c index e15b918b96..282fab4d27 100644 --- a/src/kernel/libroot/posix/sys/chmod.c +++ b/src/kernel/libroot/posix/sys/chmod.c @@ -1,5 +1,5 @@ /* -** Copyright 2002, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Copyright 2002-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved. ** Distributed under the terms of the OpenBeOS License. */ @@ -24,7 +24,7 @@ chmod(const char *path, mode_t mode) status_t status; stat.st_mode = mode; - status = sys_write_path_stat(path, true, &stat, FS_WRITE_STAT_MODE); + status = _kern_write_path_stat(path, true, &stat, sizeof(struct stat), FS_WRITE_STAT_MODE); RETURN_AND_SET_ERRNO(status); } @@ -37,7 +37,7 @@ fchmod(int fd, mode_t mode) status_t status; stat.st_mode = mode; - status = sys_write_stat(fd, &stat, FS_WRITE_STAT_MODE); + status = _kern_write_stat(fd, &stat, sizeof(struct stat), FS_WRITE_STAT_MODE); RETURN_AND_SET_ERRNO(status); } diff --git a/src/kernel/libroot/posix/sys/stat.c b/src/kernel/libroot/posix/sys/stat.c index 773d3f9a2a..47ea57faa9 100644 --- a/src/kernel/libroot/posix/sys/stat.c +++ b/src/kernel/libroot/posix/sys/stat.c @@ -1,5 +1,5 @@ /* -** Copyright 2002, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Copyright 2002-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved. ** Distributed under the terms of the OpenBeOS License. */ @@ -17,28 +17,64 @@ return err; +// R5 compatibility + +#define R5_STAT_SIZE 60 +#undef stat +#undef fstat +#undef lstat + +extern int stat(const char *path, struct stat *stat); +extern int fstat(int fd, struct stat *stat); +extern int lstat(const char *path, struct stat *stat); + + int stat(const char *path, struct stat *stat) { - int status = sys_read_path_stat(path, true, stat); - - RETURN_AND_SET_ERRNO(status); -} - - -int -lstat(const char *path, struct stat *stat) -{ - int status = sys_read_path_stat(path, false, stat); - - RETURN_AND_SET_ERRNO(status); + return _stat(path, stat, R5_STAT_SIZE); } int fstat(int fd, struct stat *stat) { - int status = sys_read_stat(fd, stat); + return _fstat(fd, stat, R5_STAT_SIZE); +} + + +int +lstat(const char *path, struct stat *stat) +{ + return _lstat(path, stat, R5_STAT_SIZE); +} + + +// #pragma mark - + + +int +_stat(const char *path, struct stat *stat, size_t statSize) +{ + int status = _kern_read_path_stat(path, true, stat, statSize); + + RETURN_AND_SET_ERRNO(status); +} + + +int +_lstat(const char *path, struct stat *stat, size_t statSize) +{ + int status = _kern_read_path_stat(path, false, stat, statSize); + + RETURN_AND_SET_ERRNO(status); +} + + +int +_fstat(int fd, struct stat *stat, size_t statSize) +{ + int status = _kern_read_stat(fd, stat, statSize); RETURN_AND_SET_ERRNO(status); } diff --git a/src/kernel/libroot/posix/unistd/chown.c b/src/kernel/libroot/posix/unistd/chown.c index d612095711..84681ed12c 100644 --- a/src/kernel/libroot/posix/unistd/chown.c +++ b/src/kernel/libroot/posix/unistd/chown.c @@ -1,5 +1,5 @@ /* -** Copyright 2002, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Copyright 2002-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved. ** Distributed under the terms of the OpenBeOS License. */ @@ -25,7 +25,8 @@ chown(const char *path, uid_t owner, gid_t group) stat.st_uid = owner; stat.st_gid = group; - status = sys_write_path_stat(path, true, &stat, FS_WRITE_STAT_UID | FS_WRITE_STAT_GID); + status = _kern_write_path_stat(path, true, &stat, sizeof(struct stat), + FS_WRITE_STAT_UID | FS_WRITE_STAT_GID); RETURN_AND_SET_ERRNO(status); } @@ -39,7 +40,8 @@ lchown(const char *path, uid_t owner, gid_t group) stat.st_uid = owner; stat.st_gid = group; - status = sys_write_path_stat(path, false, &stat, FS_WRITE_STAT_UID | FS_WRITE_STAT_GID); + status = _kern_write_path_stat(path, false, &stat, sizeof(struct stat), + FS_WRITE_STAT_UID | FS_WRITE_STAT_GID); RETURN_AND_SET_ERRNO(status); } @@ -53,7 +55,8 @@ fchown(int fd, uid_t owner, gid_t group) stat.st_uid = owner; stat.st_gid = group; - status = sys_write_stat(fd, &stat, FS_WRITE_STAT_UID | FS_WRITE_STAT_GID); + status = _kern_write_stat(fd, &stat, sizeof(struct stat), + FS_WRITE_STAT_UID | FS_WRITE_STAT_GID); RETURN_AND_SET_ERRNO(status); } diff --git a/src/kernel/libroot/posix/unistd/truncate.c b/src/kernel/libroot/posix/unistd/truncate.c index 9442affb61..fd2b1ad25e 100644 --- a/src/kernel/libroot/posix/unistd/truncate.c +++ b/src/kernel/libroot/posix/unistd/truncate.c @@ -1,5 +1,5 @@ /* -** Copyright 2002, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Copyright 2002-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved. ** Distributed under the terms of the OpenBeOS License. */ @@ -24,7 +24,7 @@ truncate(const char *path, off_t newSize) status_t status; stat.st_size = newSize; - status = sys_write_path_stat(path, true, &stat, FS_WRITE_STAT_SIZE); + status = _kern_write_path_stat(path, true, &stat, sizeof(struct stat), FS_WRITE_STAT_SIZE); RETURN_AND_SET_ERRNO(status); } @@ -37,7 +37,7 @@ ftruncate(int fd, off_t newSize) status_t status; stat.st_size = newSize; - status = sys_write_stat(fd, &stat, FS_WRITE_STAT_SIZE); + status = _kern_write_stat(fd, &stat, sizeof(struct stat), FS_WRITE_STAT_SIZE); RETURN_AND_SET_ERRNO(status); } diff --git a/src/kernel/libroot/posix/utime.c b/src/kernel/libroot/posix/utime.c index 1e5f2d3941..daf4c6c8a9 100644 --- a/src/kernel/libroot/posix/utime.c +++ b/src/kernel/libroot/posix/utime.c @@ -1,5 +1,5 @@ /* -** Copyright 2002, Axel Dörfler, axeld@pinc-software.de. All rights reserved. +** Copyright 2002-2004, Axel Dörfler, axeld@pinc-software.de. All rights reserved. ** Distributed under the terms of the OpenBeOS License. */ @@ -30,7 +30,8 @@ utime(const char *path, const struct utimbuf *times) } else stat.st_atime = stat.st_mtime = time(NULL); - status = sys_write_path_stat(path, true, &stat, FS_WRITE_STAT_MTIME | FS_WRITE_STAT_ATIME); + status = _kern_write_path_stat(path, true, &stat, sizeof(struct stat), + FS_WRITE_STAT_MTIME | FS_WRITE_STAT_ATIME); RETURN_AND_SET_ERRNO(status); }