5abe81f516704108d982e3e2b736a72e643e5879
[akaros.git] / kern / include / ros / fs.h
1 #ifndef _ROS_INC_STAT_H
2 #define _ROS_INC_STAT_H
3
4 #include <sys/types.h>
5 #include <timing.h>
6
7 #define MAX_FILENAME_SZ 255
8 /* This will change once we have a decent readdir / getdents syscall, and
9  * send the strlen along with the d_name.  The sizes need rechecked too, since
10  * they are probably wrong. */
11 struct kdirent {
12         ino_t                                   d_ino;       /* inode number */
13         off_t                                   d_off;       /* offset to the next dirent */
14         unsigned short                          d_reclen;    /* length of this record */
15         char                                    d_name[MAX_FILENAME_SZ + 1]; /* filename */
16 };
17
18 /* These stat sizes should match the types in stat.h and types.h and the sizes
19  * in typesizes in glibc (which we modified slightly).  While glibc has it's own
20  * stat, we have this here so that the kernel is exporting the interface it
21  * expects.  We #def stat for our own internal use at the end. */
22 struct kstat {
23         __dev_t                                         st_dev;         /* Device.  */
24         __ino64_t                                       st_ino;         /* File serial number.  */
25         __mode_t                                        st_mode;        /* File mode.  */
26         __nlink_t                                       st_nlink;       /* Link count.  */
27         __uid_t                                         st_uid;         /* User ID of the file's owner. */
28         __gid_t                                         st_gid;         /* Group ID of the file's group.*/
29         __dev_t                                         st_rdev;        /* Device number, if device.  */
30         __off64_t                                       st_size;        /* Size of file, in bytes.  */
31         __blksize_t                                     st_blksize;     /* Optimal block size for I/O.  */
32         __blkcnt64_t                            st_blocks;      /* Number 512-byte blocks allocated. */
33         struct timespec                         st_atime;       /* Time of last access.  */
34         struct timespec                         st_mtime;       /* Time of last modification.  */
35         struct timespec                         st_ctime;       /* Time of last status change.  */
36 };
37
38 #ifdef ROS_KERNEL
39 #define stat kstat
40 #define dirent kdirent 
41 #endif
42
43 #endif /* _ROS_INC_STAT_H */