Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.   Copyright (c) 1990-2005 Info-ZIP.  All rights reserved.
  3.  
  4.   See the accompanying file LICENSE, version 2000-Apr-09 or later
  5.   (the contents of which are also included in zip.h) for terms of use.
  6.   If, for some reason, all these files are missing, the Info-ZIP license
  7.   also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
  8. */
  9.  
  10. #ifndef __theos_stat_h
  11. #define __theos_stat_h
  12.  
  13. /* extended stat structure for stat, fstat, chmod */
  14. /* Written by Jean-Michel Dubois */
  15.  
  16. #pragma field word
  17. struct stat {
  18.     unsigned short  st_mode;        /* file attributes */
  19.         #define S_IFMT      0xf000      /* file type mask */
  20.         #define S_IFIFO     0x1000      /* pipe */
  21.         #define S_IFCHR     0x2000      /* char device */
  22.         #define S_IFSOCK    0x3000      /* socket */
  23.         #define S_IFDIR     0x4000      /* directory */
  24.         #define S_IFLIB     0x5000      /* library */
  25.         #define S_IFBLK     0x6000      /* block device */
  26.         #define S_IFREG     0x8000      /* regular file */
  27.         #define S_IFREL     0x9000      /* relative (direct) */
  28.         #define S_IFKEY     0xA000      /* keyed */
  29.         #define S_IFIND     0xB000      /* indexed */
  30.         #define S_IFRND     0xC000      /* ???? */
  31.         #define S_IFR16     0xD000      /* 16 bit real mode program */
  32.         #define S_IFP16     0xE000      /* 16 bit protected mode prog */
  33.         #define S_IFP32     0xF000      /* 32 bit protected mode prog */
  34.  
  35.         #define S_ISUID     0x0800      /* meaningless */
  36.         #define S_ISGID     0x0400      /* meaningless */
  37.         #define S_ISVTX     0x0200      /* meaningless */
  38.  
  39.         #define S_IMODF     0x0800      /* modified */
  40.         #define S_INHID     0x0400      /* not hidden */
  41.  
  42.         #define S_IRWXU     0x03c0      /* read,write,execute: owner */
  43.         #define S_IEUSR     0x0200      /* erase permission: owner */
  44.         #define S_IRUSR     0x0100      /* read permission: owner */
  45.         #define S_IWUSR     0x0080      /* write permission: owner */
  46.         #define S_IXUSR     0x0040      /* execute permission: owner */
  47.     /* group permissions */
  48.         #define S_IRWXG     0x0238
  49.         #define S_IEGRP     0x0200
  50.         #define S_IRGRP     0x0020
  51.         #define S_IWGRP     0x0010
  52.         #define S_IXGRP     0x0008
  53.     /* other never has erase permission */
  54.         #define S_IRWXO     0x0207      /* read,write,execute: other */
  55.         #define S_IROTH     0x0004      /* read permission: other */
  56.         #define S_IWOTH     0x0002      /* write permission: other */
  57.         #define S_IXOTH     0x0001      /* execute permission: other */
  58.  
  59.         #define S_IREAD     0x0100      /* read permission, owner */
  60.         #define S_IEXEC     0x0040      /* execute permission, owner */
  61.         #define S_IWRITE    0x0080      /* write permission, owner */
  62.     short           st_ino;         /* not used */
  63.     short           st_dev;         /* not used */
  64.     short           st_rdev;        /* not used */
  65.     short           st_nlink;       /* not used */
  66.     short           st_uid;         /* owner id */
  67.     short           st_gid;         /* not used */
  68.     unsigned long   st_size;        /* size of file */
  69.     unsigned long   st_atime;       /* not used */
  70.     unsigned long   st_mtime;       /* date & time last modified */
  71.     unsigned long   st_ctime;       /* not used */
  72.     unsigned long   st_blksize;     /* buffer size */
  73.     unsigned short  st_org;         /* organization */
  74.     unsigned short  st_rlen;        /* record size */
  75.     unsigned short  st_klen;        /* key size */
  76.     char            st_grow;        /* growing factor */
  77.     char            st_protect;     /* native protections */
  78. };
  79. #pragma field
  80.  
  81. #define S_ISREG(m)      (((m) & S_IFMT) >= S_IFREG)
  82. #define S_ISLIB(m)      (((m) & S_IFMT) == S_IFLIB)
  83. #define S_ISDIR(m)      (((m) & S_IFMT) == S_IFDIR)
  84. #define S_ISCHR(m)      (((m) & S_IFMT) == S_IFCHR)
  85. #define S_ISBLK(m)      (((m) & S_IFMT) == S_IFBLK)
  86.  
  87. #define S_ISSEQ(m)      (((m) & S_IFMT) == S_IFREG)
  88. #define S_ISREL(m)      (((m) & S_IFMT) == S_IFREL)
  89. #define S_ISKEY(m)      (((m) & S_IFMT) == S_IFKEY)
  90. #define S_ISIND(m)      (((m) & S_IFMT) == S_IFIND)
  91. #define S_ISPRG(m)      (((m) & S_IFMT) >= S_IFP16)
  92. #define S_ISLNK(m)      0
  93.  
  94. /* avoid conflict with original THEOS functions */
  95.  
  96. #define stat(a,b)       _stat(a,b)
  97. #define fstat(a,b)      _fstat(a,b)
  98. #define chmod(a,b)      _chmod(a,b)
  99.  
  100. extern int _stat(const char *file, struct stat *statptr);
  101. extern int _fstat(int fd, struct stat *statptr);
  102. extern int _chmod(const char *file, short mask);
  103.  
  104. #define _chstat(a,b)    ((int) _sc_168(a,'p',(size_t)(b)))
  105. extern unsigned short   _sc_168(const char _far *fn, int cmd, size_t value);
  106.  
  107. #endif /* !__theos_stat_h */
  108.