1 /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
2 /*
3  * Header for internal stat()/fstat() assist functions.
4  *
5  */
6 
7 #ifndef __XSTAT_H
8 #define __XSTAT_H
9 
10 #include <stdio.h>
11 #include <time.h>
12 #include <sys/types.h>
13 #include <sys/stat.h>
14 #include <dpmi.h>
15 
16 /* Some errno.h headers do not define EFAULT.  Here the value is
17    taken from POSIX IEEE 1003.1.  */
18 #include <errno.h>
19 #ifndef EFAULT
20 #define EFAULT  14
21 #endif
22 
23 /* Under MS-DOS, file access permissions are shared by all, except for
24    Write permission. */
25 #define READ_ACCESS     (S_IRUSR | S_IRGRP | S_IROTH)
26 #define WRITE_ACCESS    S_IWUSR
27 #define EXEC_ACCESS     (S_IXUSR | S_IXGRP | S_IXOTH)
28 
29 /* Macro to convert a segment and an offset to a "far offset" suitable
30    for _farxxx() functions of DJGPP.  */
31 #ifndef MK_FOFF
32 #define MK_FOFF(s,o) ((int)((((unsigned long)(s)) << 4) + (unsigned short)(o)))
33 #endif
34 
35 #define MAX_TRUE_NAME   FILENAME_MAX
36 
37 extern unsigned short   _osmajor, _osminor;
38 extern const    char  * _os_flavor;
39 
40 /* Bits to flag f?stat() failed to use individual undocumented features. */
41 #define _STFAIL_SDA         1   /* Get SDA call failed */
42 #define _STFAIL_OSVER       2   /* Unsupported DOS version */
43 #define _STFAIL_BADSDA      4   /* Bad pointer to SDA */
44 #define _STFAIL_TRUENAME    8   /* _truename() failed */
45 #define _STFAIL_HASH     0x10   /* inode defaults to hashing */
46 #define _STFAIL_LABEL    0x20   /* Root dir, but no volume label */
47 #define _STFAIL_DCOUNT   0x40   /* dirent_count ridiculously large */
48 #define _STFAIL_WRITEBIT 0x80   /* fstat() failed to get write access bit */
49 #define _STFAIL_DEVNO   0x100   /* fstat() failed to get device number */
50 #define _STFAIL_BADSFT  0x200   /* SFT entry found, but can't be trusted */
51 #define _STFAIL_SFTIDX  0x400   /* bad SFT index in JFT */
52 #define _STFAIL_SFTNF   0x800   /* file entry not found in SFT array */
53 
54 extern unsigned short   _djstat_fail_bits;
55 
56 extern unsigned short   _djstat_flags;
57 
58 extern time_t           _file_time_stamp(unsigned int);
59 extern ino_t            _invent_inode(const char *, unsigned, unsigned long);
60 extern unsigned short   _get_magic(const char *, int);
61 extern unsigned short   _get_dos_version(int);
62 extern char           * _truename(const char *, char *);
63 extern int              _is_remote_drive(int);
64 extern int              _is_executable(const char *, int, const char *);
65 extern short            _get_dev_info(int);
66 extern long             __filelength(int);
67 extern int              _is_remote_handle(int);
68 extern void             _djstat_describe_lossage(FILE *);
69 extern int              _getftime(int, unsigned int *);
70 
71 #endif  /* __XSTAT_H */
72