1 /** \file fs.h 2 * \brief Header: fs compatibility definitions 3 */ 4 5 /* Include file to use opendir/closedir/readdir */ 6 7 #ifndef MC_FS_H 8 #define MC_FS_H 9 10 #include <sys/types.h> 11 #include <unistd.h> 12 #include <sys/stat.h> 13 #include <dirent.h> 14 15 /*** typedefs(not structures) and defined constants **********************************************/ 16 17 #ifdef S_ISREG 18 #define HAVE_S_ISREG 1 19 #else 20 #define HAVE_S_ISREG 0 21 #define S_ISREG(x) 0 22 #endif 23 24 #ifdef S_ISDIR 25 #define HAVE_S_ISDIR 1 26 #else 27 #define HAVE_S_ISDIR 0 28 #define S_ISDIR(x) 0 29 #endif 30 31 /* Replacement for permission bits missing in sys/stat.h */ 32 #ifdef S_ISLNK 33 #define HAVE_S_ISLNK 1 34 #else 35 #define HAVE_S_ISLNK 0 36 #define S_ISLNK(x) 0 37 #endif 38 39 #ifdef S_ISSOCK 40 #define HAVE_S_ISSOCK 1 41 #else 42 #define HAVE_S_ISSOCK 0 43 #define S_ISSOCK(x) 0 44 #endif 45 46 #ifdef S_ISFIFO 47 #define HAVE_S_ISFIFO 1 48 #else 49 #define HAVE_S_ISFIFO 0 50 #define S_ISFIFO(x) 0 51 #endif 52 53 #ifdef S_ISCHR 54 #define HAVE_S_ISCHR 1 55 #else 56 #define HAVE_S_ISCHR 0 57 #define S_ISCHR(x) 0 58 #endif 59 60 #ifdef S_ISBLK 61 #define HAVE_S_ISBLK 1 62 #else 63 #define HAVE_S_ISBLK 0 64 #define S_ISBLK(x) 0 65 #endif 66 67 /* Door is something that only exists on Solaris */ 68 #ifdef S_ISDOOR 69 #define HAVE_S_ISDOOR 1 70 #else 71 #define HAVE_S_ISDOOR 0 72 #define S_ISDOOR(x) 0 73 #endif 74 75 /* Special named files are widely used in QNX6 */ 76 #ifdef S_ISNAM 77 #define HAVE_S_ISNAM 1 78 #else 79 #define HAVE_S_ISNAM 0 80 #define S_ISNAM(x) 0 81 #endif 82 83 #ifndef PATH_MAX 84 #ifdef _POSIX_VERSION 85 #define PATH_MAX _POSIX_PATH_MAX 86 #else 87 #ifdef MAXPATHLEN 88 #define PATH_MAX MAXPATHLEN 89 #else 90 #define PATH_MAX 1024 91 #endif 92 #endif 93 #endif 94 95 #ifndef MAXPATHLEN 96 #define MC_MAXPATHLEN 4096 97 #else 98 #define MC_MAXPATHLEN MAXPATHLEN 99 #endif 100 101 /* unistd.h defines _POSIX_VERSION on POSIX.1 systems. */ 102 #define NLENGTH(dirent) (strlen ((dirent)->d_name)) 103 104 /* DragonFlyBSD doesn't provide MAXNAMLEN macro */ 105 #ifndef MAXNAMLEN 106 #define MAXNAMLEN NAME_MAX 107 #endif 108 109 #define MC_MAXFILENAMELEN MAXNAMLEN 110 111 #define DIR_IS_DOT(x) ((x)[0] == '.' && (x)[1] == '\0') 112 #define DIR_IS_DOTDOT(x) ((x)[0] == '.' && (x)[1] == '.' && (x)[2] == '\0') 113 114 /*** enums ***************************************************************************************/ 115 116 /*** structures declarations (and typedefs of structures)*****************************************/ 117 118 /*** global variables defined in .c file *********************************************************/ 119 120 /*** declarations of public functions ************************************************************/ 121 122 /*** inline functions ****************************************************************************/ 123 124 #endif 125