/*
** mkisofs for the Amiga (SAS/C compiler)
** by Flavio Stanchina <flavio@ies.it> 3/97
**
** renamed functions (prefix sas_) to get the linker
** using these instead (also see REDEFINES.WTH) (ARK, 11 Sep 97)
*/

#ifndef _STAT_H
#define _STAT_H 1

#include <time.h>

typedef unsigned long  dev_t;   /* device number */
typedef unsigned long  ino_t;   /* inode number */
typedef unsigned short mode_t;  /* permissions */
typedef unsigned short nlink_t; /* link count */
typedef unsigned short uid_t;   /* owner user id */
typedef unsigned short gid_t;   /* owner group id */
typedef          long  off_t;   /* file offset */

struct stat
{
        dev_t    st_dev;       /* inode's device (Amiga: volume node) */
        ino_t    st_ino;       /* inode's number (Amiga: disk key) */
        mode_t   st_mode;      /* inode protection mode */
        nlink_t  st_nlink;     /* number of hard links */
        uid_t    st_uid;       /* file user id */
        gid_t    st_gid;       /* file group id */
        dev_t    st_rdev;      /* device type (Amiga: file system type) */
        off_t    st_size;      /* file size in bytes */
        time_t   st_atime;     /* time last accessed */
        time_t   st_mtime;     /* time last modified */
        time_t   st_ctime;     /* time last status change */
//      long     st_blksize;   /* optimal blocksize for I/O */
        long     st_blocks;    /* blocks allocated for file */
        char    *st_comment;   /* Amiga file comment */
};

#define S_IFMT  0170000   /* type of file */
#define S_IFDIR 0040000   /* directory */
#define S_IFREG 0100000   /* regular */
#define S_IFLNK 0120000   /* symbolic link */

#define S_IRWXU 0000700   /* RWX mask for owner */
#define S_IRUSR 0000400   /* R for owner */
#define S_IWUSR 0000200   /* W for owner */
#define S_IXUSR 0000100   /* X for owner */

#define S_IRWXG 0000070   /* RWX mask for group */
#define S_IRGRP 0000040   /* R for group */
#define S_IWGRP 0000020   /* W for group */
#define S_IXGRP 0000010   /* X for group */

#define S_IRWXO 0000007   /* RWX mask for other */
#define S_IROTH 0000004   /* R for other */
#define S_IWOTH 0000002   /* W for other */
#define S_IXOTH 0000001   /* X for other */

#define S_IREAD  S_IRUSR
#define S_IWRITE S_IWUSR
#define S_IEXEC  S_IXUSR

#define S_ISBLK(x) (0)
#define S_ISCHR(x) (0)
#define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR)
#define S_ISREG(x) (((x) & S_IFMT) == S_IFREG)
#define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK)

int  sas_stat(const char *path, struct stat *buf);
int sas_lstat(const char *path, struct stat *buf);
int sas_readlink(const char *path, char *buf, size_t bufsize);

#endif /* _STAT_H */
