tzh
2024-08-22 c7d0944258c7d0943aa7b2211498fd612971ce27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#ifndef    _SYS_STAT_H
#define    _SYS_STAT_H
 
#ifdef __cplusplus
extern "C" {
#endif
 
#include <_ansi.h>
#include <time.h>
#include <sys/types.h>
 
/* dj's stat defines _STAT_H_ */
#ifndef _STAT_H_
 
/* It is intended that the layout of this structure not change when the
   sizes of any of the basic types change (short, int, long) [via a compile
   time option].  */
 
#ifdef __CYGWIN__
#include <cygwin/stat.h>
#ifdef _COMPILING_NEWLIB
#define stat64 __stat64
#endif
#else
struct    stat 
{
  dev_t        st_dev;
  ino_t        st_ino;
  mode_t    st_mode;
  nlink_t    st_nlink;
  uid_t        st_uid;
  gid_t        st_gid;
  dev_t        st_rdev;
  off_t        st_size;
#if defined(__rtems__)
  struct timespec st_atim;
  struct timespec st_mtim;
  struct timespec st_ctim;
  blksize_t     st_blksize;
  blkcnt_t    st_blocks;
#else
  /* SysV/sco doesn't have the rest... But Solaris, eabi does.  */
#if defined(__svr4__) && !defined(__PPC__) && !defined(__sun__)
  time_t    st_atime;
  time_t    st_mtime;
  time_t    st_ctime;
#else
  time_t    st_atime;
  long        st_spare1;
  time_t    st_mtime;
  long        st_spare2;
  time_t    st_ctime;
  long        st_spare3;
  long        st_blksize;
  long        st_blocks;
  long    st_spare4[2];
#endif
#endif
};
 
#if defined(__rtems__)
#define st_atime st_atim.tv_sec
#define st_ctime st_ctim.tv_sec
#define st_mtime st_mtim.tv_sec
#endif
 
#endif
 
#define    _IFMT        0170000    /* type of file */
#define        _IFDIR    0040000    /* directory */
#define        _IFCHR    0020000    /* character special */
#define        _IFBLK    0060000    /* block special */
#define        _IFREG    0100000    /* regular */
#define        _IFLNK    0120000    /* symbolic link */
#define        _IFSOCK    0140000    /* socket */
#define        _IFIFO    0010000    /* fifo */
 
#define     S_BLKSIZE  1024 /* size of a block */
 
#define    S_ISUID        0004000    /* set user id on execution */
#define    S_ISGID        0002000    /* set group id on execution */
#ifndef    _POSIX_SOURCE
#define    S_ISVTX        0001000    /* save swapped text even after use */
#define    S_IREAD        0000400    /* read permission, owner */
#define    S_IWRITE     0000200    /* write permission, owner */
#define    S_IEXEC        0000100    /* execute/search permission, owner */
#define    S_ENFMT     0002000    /* enforcement-mode locking */
 
#define    S_IFMT        _IFMT
#define    S_IFDIR        _IFDIR
#define    S_IFCHR        _IFCHR
#define    S_IFBLK        _IFBLK
#define    S_IFREG        _IFREG
#define    S_IFLNK        _IFLNK
#define    S_IFSOCK    _IFSOCK
#define    S_IFIFO        _IFIFO
#endif    /* !_POSIX_SOURCE */
 
#ifdef _WIN32
/* The Windows header files define _S_ forms of these, so we do too
   for easier portability.  */
#define _S_IFMT        _IFMT
#define _S_IFDIR    _IFDIR
#define _S_IFCHR    _IFCHR
#define _S_IFIFO    _IFIFO
#define _S_IFREG    _IFREG
#define _S_IREAD    0000400
#define _S_IWRITE    0000200
#define _S_IEXEC    0000100
#endif
 
#define    S_IRWXU     (S_IRUSR | S_IWUSR | S_IXUSR)
#define        S_IRUSR    0000400    /* read permission, owner */
#define        S_IWUSR    0000200    /* write permission, owner */
#define        S_IXUSR 0000100/* execute/search permission, owner */
#define    S_IRWXG        (S_IRGRP | S_IWGRP | S_IXGRP)
#define        S_IRGRP    0000040    /* read permission, group */
#define        S_IWGRP    0000020    /* write permission, grougroup */
#define        S_IXGRP 0000010/* execute/search permission, group */
#define    S_IRWXO        (S_IROTH | S_IWOTH | S_IXOTH)
#define        S_IROTH    0000004    /* read permission, other */
#define        S_IWOTH    0000002    /* write permission, other */
#define        S_IXOTH 0000001/* execute/search permission, other */
 
#define    S_ISBLK(m)    (((m)&_IFMT) == _IFBLK)
#define    S_ISCHR(m)    (((m)&_IFMT) == _IFCHR)
#define    S_ISDIR(m)    (((m)&_IFMT) == _IFDIR)
#define    S_ISFIFO(m)    (((m)&_IFMT) == _IFIFO)
#define    S_ISREG(m)    (((m)&_IFMT) == _IFREG)
#define    S_ISLNK(m)    (((m)&_IFMT) == _IFLNK)
#define    S_ISSOCK(m)    (((m)&_IFMT) == _IFSOCK)
 
#if defined(__CYGWIN__)
/* Special tv_nsec values for futimens(2) and utimensat(2). */
#define UTIME_NOW    -2L
#define UTIME_OMIT    -1L
#endif
 
int    _EXFUN(chmod,( const char *__path, mode_t __mode ));
int     _EXFUN(fchmod,(int __fd, mode_t __mode));
int    _EXFUN(fstat,( int __fd, struct stat *__sbuf ));
int    _EXFUN(mkdir,( const char *_path, mode_t __mode ));
int    _EXFUN(mkfifo,( const char *__path, mode_t __mode ));
int    _EXFUN(stat,( const char *__path, struct stat *__sbuf ));
mode_t    _EXFUN(umask,( mode_t __mask ));
 
#if defined (__SPU__) || defined(__rtems__) || defined(__CYGWIN__) && !defined(__INSIDE_CYGWIN__)
int    _EXFUN(lstat,( const char *__path, struct stat *__buf ));
int    _EXFUN(mknod,( const char *__path, mode_t __mode, dev_t __dev ));
#endif
 
#if defined (__CYGWIN__) && !defined(__INSIDE_CYGWIN__)
int    _EXFUN(fchmodat, (int, const char *, mode_t, int));
int    _EXFUN(fstatat, (int, const char *, struct stat *, int));
int    _EXFUN(mkdirat, (int, const char *, mode_t));
int    _EXFUN(mkfifoat, (int, const char *, mode_t));
int    _EXFUN(mknodat, (int, const char *, mode_t, dev_t));
int    _EXFUN(utimensat, (int, const char *, const struct timespec *, int));
int    _EXFUN(futimens, (int, const struct timespec *));
#endif
 
/* Provide prototypes for most of the _<systemcall> names that are
   provided in newlib for some compilers.  */
#ifdef _COMPILING_NEWLIB
int    _EXFUN(_fstat,( int __fd, struct stat *__sbuf ));
int    _EXFUN(_stat,( const char *__path, struct stat *__sbuf ));
#ifdef __LARGE64_FILES
struct stat64;
int    _EXFUN(_fstat64,( int __fd, struct stat64 *__sbuf ));
#endif
#endif
 
#endif /* !_STAT_H_ */
#ifdef __cplusplus
}
#endif
#endif /* _SYS_STAT_H */