#ifndef _FSSH_SYS_STAT_H_
#define _FSSH_SYS_STAT_H_
#include "fssh_defs.h"
#include "fssh_time.h"
struct fssh_stat {
fssh_dev_t fssh_st_dev;
fssh_ino_t fssh_st_ino;
fssh_mode_t fssh_st_mode;
fssh_nlink_t fssh_st_nlink;
fssh_uid_t fssh_st_uid;
fssh_gid_t fssh_st_gid;
fssh_off_t fssh_st_size;
fssh_dev_t fssh_st_rdev;
fssh_size_t fssh_st_blksize;
fssh_timespec fssh_st_atim;
fssh_timespec fssh_st_mtim;
fssh_timespec fssh_st_ctim;
fssh_timespec fssh_st_crtim;
unsigned int fssh_st_type;
fssh_off_t fssh_st_blocks;
};
typedef struct fssh_stat fssh_struct_stat;
#define fssh_st_atime fssh_st_atim.tv_sec
#define fssh_st_mtime fssh_st_mtim.tv_sec
#define fssh_st_ctime fssh_st_ctim.tv_sec
#define fssh_st_crtime fssh_st_crtim.tv_sec
#define FSSH_S_ATTR_DIR 01000000000
#define FSSH_S_ATTR 02000000000
#define FSSH_S_INDEX_DIR 04000000000
#define FSSH_S_STR_INDEX 00100000000
#define FSSH_S_INT_INDEX 00200000000
#define FSSH_S_UINT_INDEX 00400000000
#define FSSH_S_LONG_LONG_INDEX 00010000000
#define FSSH_S_ULONG_LONG_INDEX 00020000000
#define FSSH_S_FLOAT_INDEX 00040000000
#define FSSH_S_DOUBLE_INDEX 00001000000
#define FSSH_S_ALLOW_DUPS 00002000000
#define FSSH_S_LINK_SELF_HEALING 00001000000
#define FSSH_S_LINK_AUTO_DELETE 00002000000
#define FSSH_S_IFMT 00000170000
#define FSSH_S_IFSOCK 00000140000
#define FSSH_S_IFLNK 00000120000
#define FSSH_S_IFREG 00000100000
#define FSSH_S_IFBLK 00000060000
#define FSSH_S_IFDIR 00000040000
#define FSSH_S_IFCHR 00000020000
#define FSSH_S_IFIFO 00000010000
#define FSSH_S_ISREG(mode) (((mode) & FSSH_S_IFMT) == FSSH_S_IFREG)
#define FSSH_S_ISLNK(mode) (((mode) & FSSH_S_IFMT) == FSSH_S_IFLNK)
#define FSSH_S_ISBLK(mode) (((mode) & FSSH_S_IFMT) == FSSH_S_IFBLK)
#define FSSH_S_ISDIR(mode) (((mode) & FSSH_S_IFMT) == FSSH_S_IFDIR)
#define FSSH_S_ISCHR(mode) (((mode) & FSSH_S_IFMT) == FSSH_S_IFCHR)
#define FSSH_S_ISFIFO(mode) (((mode) & FSSH_S_IFMT) == FSSH_S_IFIFO)
#define FSSH_S_ISINDEX(mode) (((mode) & FSSH_S_INDEX_DIR) == FSSH_S_INDEX_DIR)
#define FSSH_S_IUMSK 07777
#define FSSH_S_ISUID 04000
#define FSSH_S_ISGID 02000
#define FSSH_S_ISVTX 01000
#define FSSH_S_IRWXU 00700
#define FSSH_S_IRUSR 00400
#define FSSH_S_IWUSR 00200
#define FSSH_S_IXUSR 00100
#define FSSH_S_IRWXG 00070
#define FSSH_S_IRGRP 00040
#define FSSH_S_IWGRP 00020
#define FSSH_S_IXGRP 00010
#define FSSH_S_IRWXO 00007
#define FSSH_S_IROTH 00004
#define FSSH_S_IWOTH 00002
#define FSSH_S_IXOTH 00001
#define FSSH_ACCESSPERMS (FSSH_S_IRWXU | FSSH_S_IRWXG | FSSH_S_IRWXO)
#define FSSH_ALLPERMS (FSSH_S_ISUID | FSSH_S_ISGID | FSSH_S_ISVTX \
| FSSH_S_IRWXU | FSSH_S_IRWXG | FSSH_S_IRWXO)
#define FSSH_DEFFILEMODE (FSSH_S_IRUSR | FSSH_S_IWUSR | FSSH_S_IRGRP \
| FSSH_S_IWGRP | FSSH_S_IROTH | FSSH_S_IWOTH)
#ifdef __cplusplus
extern "C" {
#endif
extern int fssh_chmod(const char *path, fssh_mode_t mode);
extern int fssh_fchmod(int fd, fssh_mode_t mode);
extern int fssh_mkdir(const char *path, fssh_mode_t mode);
extern int fssh_mkfifo(const char *path, fssh_mode_t mode);
extern fssh_mode_t fssh_umask(fssh_mode_t cmask);
extern int fssh_stat(const char *path, struct fssh_stat *st);
extern int fssh_fstat(int fd, struct fssh_stat *st);
extern int fssh_lstat(const char *path, struct fssh_stat *st);
#ifdef __cplusplus
}
#endif
#endif