diff --git a/Kernel/FileSystem/InodeMetadata.h b/Kernel/FileSystem/InodeMetadata.h index 9eead33719..18d093eb96 100644 --- a/Kernel/FileSystem/InodeMetadata.h +++ b/Kernel/FileSystem/InodeMetadata.h @@ -117,9 +117,12 @@ struct InodeMetadata { buffer.st_size = size; buffer.st_blksize = block_size; buffer.st_blocks = block_count; - buffer.st_atime = atime; - buffer.st_mtime = mtime; - buffer.st_ctime = ctime; + buffer.st_atim.tv_sec = atime; + buffer.st_atim.tv_nsec = 0; + buffer.st_mtim.tv_sec = mtime; + buffer.st_mtim.tv_nsec = 0; + buffer.st_ctim.tv_sec = ctime; + buffer.st_ctim.tv_nsec = 0; return KSuccess; } diff --git a/Kernel/UnixTypes.h b/Kernel/UnixTypes.h index 3846dbe10e..b0614e5375 100644 --- a/Kernel/UnixTypes.h +++ b/Kernel/UnixTypes.h @@ -451,20 +451,25 @@ struct termios { speed_t c_ospeed; }; +struct timespec { + time_t tv_sec; /* Seconds */ + long tv_nsec; /* Nanoseconds */ +}; + struct stat { - dev_t st_dev; /* ID of device containing file */ - ino_t st_ino; /* inode number */ - mode_t st_mode; /* protection */ - nlink_t st_nlink; /* number of hard links */ - uid_t st_uid; /* user ID of owner */ - gid_t st_gid; /* group ID of owner */ - dev_t st_rdev; /* device ID (if special file) */ - off_t st_size; /* total size, in bytes */ - blksize_t st_blksize; /* blocksize for file system I/O */ - blkcnt_t st_blocks; /* number of 512B blocks allocated */ - time_t st_atime; /* time of last access */ - time_t st_mtime; /* time of last modification */ - time_t st_ctime; /* time of last status change */ + dev_t st_dev; /* ID of device containing file */ + ino_t st_ino; /* inode number */ + mode_t st_mode; /* protection */ + nlink_t st_nlink; /* number of hard links */ + uid_t st_uid; /* user ID of owner */ + gid_t st_gid; /* group ID of owner */ + dev_t st_rdev; /* device ID (if special file) */ + off_t st_size; /* total size, in bytes */ + blksize_t st_blksize; /* blocksize for file system I/O */ + blkcnt_t st_blocks; /* number of 512B blocks allocated */ + struct timespec st_atim; /* time of last access */ + struct timespec st_mtim; /* time of last modification */ + struct timespec st_ctim; /* time of last status change */ }; #define POLLIN (1u << 0) @@ -575,11 +580,6 @@ struct timeval { suseconds_t tv_usec; }; -struct timespec { - time_t tv_sec; - long tv_nsec; -}; - typedef enum { P_ALL = 1, P_PID, diff --git a/Userland/Libraries/LibC/sys/stat.h b/Userland/Libraries/LibC/sys/stat.h index 81f2d5175b..f7748756f9 100644 --- a/Userland/Libraries/LibC/sys/stat.h +++ b/Userland/Libraries/LibC/sys/stat.h @@ -28,6 +28,7 @@ #include #include +#include __BEGIN_DECLS @@ -69,21 +70,25 @@ __BEGIN_DECLS #define S_ISSOCK(m) (((m)&S_IFMT) == S_IFSOCK) struct stat { - dev_t st_dev; /* ID of device containing file */ - ino_t st_ino; /* inode number */ - mode_t st_mode; /* protection */ - nlink_t st_nlink; /* number of hard links */ - uid_t st_uid; /* user ID of owner */ - gid_t st_gid; /* group ID of owner */ - dev_t st_rdev; /* device ID (if special file) */ - off_t st_size; /* total size, in bytes */ - blksize_t st_blksize; /* blocksize for file system I/O */ - blkcnt_t st_blocks; /* number of 512B blocks allocated */ - time_t st_atime; /* time of last access */ - time_t st_mtime; /* time of last modification */ - time_t st_ctime; /* time of last status change */ + dev_t st_dev; /* ID of device containing file */ + ino_t st_ino; /* inode number */ + mode_t st_mode; /* protection */ + nlink_t st_nlink; /* number of hard links */ + uid_t st_uid; /* user ID of owner */ + gid_t st_gid; /* group ID of owner */ + dev_t st_rdev; /* device ID (if special file) */ + off_t st_size; /* total size, in bytes */ + blksize_t st_blksize; /* blocksize for file system I/O */ + blkcnt_t st_blocks; /* number of 512B blocks allocated */ + struct timespec st_atim; /* time of last access */ + struct timespec st_mtim; /* time of last modification */ + struct timespec st_ctim; /* time of last status change */ }; +#define st_atime st_atim.tv_sec +#define st_mtime st_mtim.tv_sec +#define st_ctime st_ctim.tv_sec + mode_t umask(mode_t); int chmod(const char* pathname, mode_t); int fchmod(int fd, mode_t);