#pragma once

#include <sys/types.h>
#include <ros/limits.h>
#include <ros/time.h>

/* This will change once we have a decent readdir / getdents syscall, and
 * send the strlen along with the d_name.  The sizes need rechecked too, since
 * they are probably wrong. */
struct kdirent {
	__ino64_t					d_ino;		/* inode number */
	__off64_t					d_off;		/* offset to the next dirent */
	unsigned short				d_reclen;	/* length of this record */
	unsigned char				d_type;
	char						d_name[MAX_FILENAME_SZ + 1];	/* filename */
} __attribute__((aligned(8)));

/* These stat sizes should match the types in stat.h and types.h and the sizes
 * in typesizes in glibc (which we modified slightly).  While glibc has it's own
 * stat, we have this here so that the kernel is exporting the interface it
 * expects.  We #def stat for our own internal use at the end. */
struct kstat {
	__dev_t						st_dev;		/* Device.  */
	__ino64_t					st_ino;		/* File serial number.	*/
	__mode_t					st_mode;	/* File mode.  */
	__nlink_t					st_nlink;	/* Link count.  */
	__uid_t						st_uid;		/* User ID of the file's owner.	*/
	__gid_t						st_gid;		/* Group ID of the file's group.*/
	__dev_t						st_rdev;	/* Device number, if device.  */
	__off64_t					st_size;	/* Size of file, in bytes.  */
	__blksize_t					st_blksize;	/* Optimal block size for I/O.  */
	__blkcnt64_t				st_blocks;	/* Number 512-byte blocks allocd. */
	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.  */
};

/* File access modes for open and fcntl. */
#define O_READ			0x01		/* Open for reading */
#define O_WRITE			0x02		/* Open for writing */
#define O_EXEC			0x04		/* Open for exec */
#define O_RDONLY		O_READ		/* Open read-only */
#define O_WRONLY		O_WRITE		/* Open write-only */
#define O_RDWR			(O_READ | O_WRITE)		/* Open read/write */
#define O_ACCMODE		0x07

/* Bits OR'd into the second argument to open */
#define O_CREAT			00000100	/* not fcntl */
#define O_CREATE		O_CREAT		/* fucking saving space with the 'E'? */
#define O_EXCL			00000200	/* not fcntl */
#define O_NOCTTY		00000400	/* not fcntl */
#define O_TRUNC			00001000	/* not fcntl */
#define O_APPEND		00002000
#define O_NONBLOCK		00004000
#define O_SYNC			00010000
#define O_FSYNC			O_SYNC
#define O_ASYNC			00020000
#define O_DIRECT		00040000	/* Direct disk access. */
#define O_PATH			00100000	/* Path only, no I/O */
#define O_DIRECTORY		00200000	/* Must be a directory. */
#define O_NOFOLLOW		00400000	/* Do not follow links. */
#define O_NOATIME		01000000	/* Do not set atime. */
#define O_CLOEXEC		02000000	/* Set close_on_exec. */
#define O_REMCLO		04000000	/* Remove on close (unsupported). */

/* Keep this value in sync with glibc (io/fcntl.h) */
#define AT_FDCWD	-100

#define F_DUPFD		0	/* Duplicate file descriptor */
#define F_GETFD		1	/* Get file descriptor flags */
#define F_SETFD		2	/* Set file descriptor flags */
#define F_GETFL		3	/* Get file status flags */
#define F_SETFL		4	/* Set file status flags */
#define F_SYNC		101	/* fsync() */
#define F_ADVISE	102	/* posix_fadvise{,64}() */

/* For F_[GET|SET]FD */
#define FD_CLOEXEC	1
#define FD_VALID_FLAGS (FD_CLOEXEC)

/* Advise to `posix_fadvise'.  */
#define POSIX_FADV_NORMAL		0	/* No further special treatment */
#define POSIX_FADV_RANDOM		1	/* Expect random page references */
#define POSIX_FADV_SEQUENTIAL	2	/* Expect sequential page references */
#define POSIX_FADV_WILLNEED		3	/* Will need these pages */
#define POSIX_FADV_DONTNEED		4	/* Don't need these pages */
#define POSIX_FADV_NOREUSE		5	/* Data will be accessed once */

/* TODO: have userpsace use our stuff from bits/stats.h */
#ifdef ROS_KERNEL

/* Access mode bits (unistd.h) */
#define R_OK 4
#define W_OK 2
#define X_OK 1
#define F_OK 0

/* File creation modes (access controls) */
#define S_IRWXU 00700	/* user (file owner) has read, write and execute perms */
#define S_IRUSR 00400	/* user has read permission */
#define S_IWUSR 00200	/* user has write permission */
#define S_IXUSR 00100	/* user has execute permission */
#define S_IRWXG 00070	/* group has read, write and execute permission */
#define S_IRGRP 00040	/* group has read permission */
#define S_IWGRP 00020	/* group has write permission */
#define S_IXGRP 00010	/* group has execute permission */
#define S_IRWXO 00007	/* others have read, write and execute permission */
#define S_IROTH 00004	/* others have read permission */
#define S_IWOTH 00002	/* others have write permission */
#define S_IXOTH 00001	/* others have execute permission */
#define S_PMASK 00777	/* mask for all perms */

/* File type is encoded in the file mode */
#define __S_IFMT		000170000	/* These bits determine file type */
/* File types */
#define __S_IFDIR		000040000	/* Directory */
#define __S_IFCHR		000020000	/* Character device */
#define __S_IFBLK		000060000	/* Block device */
#define __S_IFREG		000100000	/* Regular file */
#define __S_IFIFO		000010000	/* FIFO */
#define __S_IFLNK		000120000	/* Symbolic link */
#define __S_IFSOCK		000140000	/* Socket */
/* Protection bits */
#define __S_ISUID		000004000	/* Set user ID on execution */
#define __S_ISGID		000002000	/* Set group ID on execution */
#define __S_ISVTX		000001000	/* Save swapped text after use (sticky) */
#define __S_IREAD		000000400	/* Read by owner */
#define __S_IWRITE		000000200	/* Write by owner */
#define __S_IEXEC		000000100	/* Execute by owner */

/* Test macros for file types */
#define __S_ISTYPE(mode, mask)	(((mode) & __S_IFMT) == (mask))
#define S_ISDIR(mode)	__S_ISTYPE((mode), __S_IFDIR)
#define S_ISCHR(mode)	__S_ISTYPE((mode), __S_IFCHR)
#define S_ISBLK(mode)	__S_ISTYPE((mode), __S_IFBLK)
#define S_ISREG(mode)	__S_ISTYPE((mode), __S_IFREG)
#define S_ISFIFO(mode)	__S_ISTYPE((mode), __S_IFIFO)
#define S_ISLNK(mode)	__S_ISTYPE((mode), __S_IFLNK)

#endif /* ROS_KERNEL */

/* Non-standard bits */
#define __S_NONSTD		077000000	/* Magic Akaros bits */
#define __S_READABLE	001000000	/* File is readable */
#define __S_WRITABLE	002000000	/* File is writable */

/* Test macros for non-standard bits */
#define S_READABLE(mode)	(((mode) & __S_READABLE) != 0)
#define S_WRITABLE(mode)	(((mode) & __S_WRITABLE) != 0)
