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