1 /* Copyright (C) 2001-2006 Artifex Software, Inc. 2 All Rights Reserved. 3 4 This software is provided AS-IS with no warranty, either express or 5 implied. 6 7 This software is distributed under license and may not be copied, modified 8 or distributed except as expressly authorized under the terms of that 9 license. Refer to licensing information at http://www.artifex.com/ 10 or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, 11 San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information. 12 */ 13 14 /* $Id: stat_.h 8022 2007-06-05 22:23:38Z giles $ */ 15 /* Generic substitute for Unix sys/stat.h */ 16 17 #ifndef stat__INCLUDED 18 # define stat__INCLUDED 19 20 /* We must include std.h before any file that includes sys/types.h. */ 21 #include "std.h" 22 23 /* Metrowerks Standard Library doesn't use subdirs */ 24 #ifdef __MWERKS__ 25 #include <stat.h> 26 #else 27 #include <sys/stat.h> 28 #endif 29 30 /* 31 * Many environments, including the MS-DOS compilers, don't define 32 * the st_blocks member of a stat structure. 33 */ 34 #if defined(__SVR3) || defined(__EMX__) || defined(__DVX__) || defined(OSK) || defined(__MSDOS__) || defined(__QNX__) || defined(VMS) || defined(__WIN32__) || defined(__IBMC__) || defined(__BEOS__) || defined(Plan9) || defined(__WATCOMC__) 35 # define stat_blocks(psbuf) (((psbuf)->st_size + 1023) >> 10) 36 #else 37 # define stat_blocks(psbuf) ((psbuf)->st_blocks) 38 #endif 39 40 /* 41 * Microsoft C uses _stat instead of stat, 42 * for both the function name and the structure name. 43 */ 44 #ifdef _MSC_VER 45 # define stat _stat 46 #endif 47 48 /* 49 * Some (System V?) systems test for directories in a slightly different way. 50 */ 51 #if defined(OSK) || !defined(S_ISDIR) 52 # ifdef S_IFDIR 53 # define stat_is_dir(stbuf) ((stbuf).st_mode & S_IFDIR) 54 # else 55 # ifdef _S_IFDIR 56 # define stat_is_dir(stbuf) ((stbuf).st_mode & _S_IFDIR) 57 # endif 58 # endif 59 #else 60 # define stat_is_dir(stbuf) S_ISDIR((stbuf).st_mode) 61 #endif 62 63 /* 64 * Some systems have S_IFMT and S_IFCHR but not S_ISCHR. 65 */ 66 #if !defined(S_ISCHR) || !defined(S_ISREG) 67 # ifndef S_IFMT 68 # ifdef _S_IFMT 69 # define S_IFMT _S_IFMT 70 # define S_IFCHR _S_IFCHR 71 # define S_IFREG _S_IFREG 72 # else 73 # ifdef __S_IFMT 74 # define S_IFMT __S_IFMT 75 # define S_IFCHR __S_IFCHR 76 # define S_IFREG __S_IFREG 77 # endif 78 # endif 79 # endif 80 # define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) 81 # define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) 82 #endif 83 84 /* 85 * Microsoft C doesn't define S_IRUSR or S_IWUSR. 86 */ 87 #ifndef S_IRUSR 88 # ifndef S_IREAD 89 # define S_IRUSR _S_IREAD 90 # else 91 # define S_IRUSR S_IREAD 92 # endif 93 #endif 94 #ifndef S_IWUSR 95 # ifndef S_IWRITE 96 # define S_IWUSR _S_IWRITE 97 # else 98 # define S_IWUSR S_IWRITE 99 # endif 100 #endif 101 102 #endif /* stat__INCLUDED */ 103