|
|
1.1 ! root 1: /* ! 2: * tclUnix.h -- ! 3: * ! 4: * This file reads in UNIX-related header files and sets up ! 5: * UNIX-related macros for Tcl's UNIX core. It should be the ! 6: * only file that contains #ifdefs to handle different flavors ! 7: * of UNIX. This file sets up the union of all UNIX-related ! 8: * things needed by any of the Tcl core files. This file ! 9: * depends on configuration #defines in tclConfig.h ! 10: * ! 11: * The material in this file was originally contributed by ! 12: * Karl Lehenbauer, Mark Diekhans and Peter da Silva. ! 13: * ! 14: * Copyright 1991 Regents of the University of California ! 15: * Permission to use, copy, modify, and distribute this ! 16: * software and its documentation for any purpose and without ! 17: * fee is hereby granted, provided that this copyright ! 18: * notice appears in all copies. The University of California ! 19: * makes no representations about the suitability of this ! 20: * software for any purpose. It is provided "as is" without ! 21: * express or implied warranty. ! 22: * ! 23: * $Header: /user6/ouster/tcl/RCS/tclUnix.h,v 1.26 92/08/03 08:27:43 ouster Exp $ SPRITE (Berkeley) ! 24: */ ! 25: ! 26: #ifndef _TCLUNIX ! 27: #define _TCLUNIX ! 28: ! 29: /* ! 30: * The following #defines are used to distinguish between different ! 31: * UNIX systems. These #defines are normally set by the "config" script ! 32: * based on information it gets by looking in the include and library ! 33: * areas. The defaults below are for BSD-based systems like SunOS ! 34: * or Ultrix. ! 35: * ! 36: * TCL_GETTOD - 1 means there exists a library procedure ! 37: * "gettimeofday" (e.g. BSD systems). 0 means ! 38: * have to use "times" instead. ! 39: * TCL_GETWD - 1 means there exists a library procedure ! 40: * "getwd" (e.g. BSD systems). 0 means ! 41: * have to use "getcwd" instead. ! 42: * TCL_SYS_ERRLIST - 1 means that the array sys_errlist is ! 43: * defined as part of the C library. ! 44: * TCL_SYS_TIME_H - 1 means there exists an include file ! 45: * <sys/time.h> (e.g. BSD derivatives). ! 46: * TCL_SYS_WAIT_H - 1 means there exists an include file ! 47: * <sys/wait.h> that defines constants related ! 48: * to the results of "wait". ! 49: * TCL_UNION_WAIT - 1 means that the "wait" system call returns ! 50: * a structure of type "union wait" (e.g. BSD ! 51: * systems). 0 means "wait" returns an int ! 52: * (e.g. System V and POSIX). ! 53: * TCL_PID_T - 1 means that <sys/types> defines the type ! 54: * pid_t. 0 means that it doesn't. ! 55: * TCL_UID_T - 1 means that <sys/types> defines the type ! 56: * uid_t. 0 means that it doesn't. ! 57: */ ! 58: ! 59: #define TCL_GETTOD 1 ! 60: #define TCL_GETWD 0 ! 61: #define TCL_SYS_ERRLIST 1 ! 62: #define TCL_SYS_TIME_H 1 ! 63: #define TCL_SYS_WAIT_H 1 ! 64: #define TCL_UNION_WAIT 0 ! 65: ! 66: #ifdef IS_LINUX ! 67: ! 68: #define TCL_PID_T 1 ! 69: #define TCL_UID_T 1 ! 70: ! 71: #else ! 72: ! 73: #define TCL_PID_T 0 ! 74: #define TCL_UID_T 0 ! 75: ! 76: #endif ! 77: ! 78: #include <errno.h> ! 79: #include <fcntl.h> ! 80: #include <limits.h> ! 81: #include <pwd.h> ! 82: #include <signal.h> ! 83: #include <sys/param.h> ! 84: #include <sys/types.h> ! 85: #include <dirent.h> ! 86: #include <sys/file.h> ! 87: #include <sys/stat.h> ! 88: #if TCL_SYS_TIME_H ! 89: # include <sys/time.h> ! 90: #else ! 91: # include <time.h> ! 92: #endif ! 93: #if TCL_SYS_WAIT_H ! 94: # include <sys/wait.h> ! 95: #endif ! 96: ! 97: /* ! 98: * Not all systems declare the errno variable in errno.h. so this ! 99: * file does it explicitly. The list of system error messages also ! 100: * isn't generally declared in a header file anywhere. ! 101: */ ! 102: ! 103: extern int errno; ! 104: extern int sys_nerr; ! 105: //#ifndef IS_LINUX ! 106: //extern char *sys_errlist[]; ! 107: //#endif ! 108: ! 109: /* ! 110: * The type of the status returned by wait varies from UNIX system ! 111: * to UNIX system. The macro below defines it: ! 112: */ ! 113: ! 114: #if TCL_UNION_WAIT ! 115: # define WAIT_STATUS_TYPE union wait ! 116: #else ! 117: # define WAIT_STATUS_TYPE int ! 118: #endif ! 119: ! 120: /* ! 121: * Supply definitions for macros to query wait status, if not already ! 122: * defined in header files above. ! 123: */ ! 124: ! 125: #ifndef WIFEXITED ! 126: # define WIFEXITED(stat) (((*((int *) &(stat))) & 0xff) == 0) ! 127: #endif ! 128: ! 129: #ifndef WEXITSTATUS ! 130: # define WEXITSTATUS(stat) (((*((int *) &(stat))) >> 8) & 0xff) ! 131: #endif ! 132: ! 133: #ifndef WIFSIGNALED ! 134: # define WIFSIGNALED(stat) (((*((int *) &(stat)))) && ((*((int *) &(stat))) == ((*((int *) &(stat))) & 0x00ff))) ! 135: #endif ! 136: ! 137: #ifndef WTERMSIG ! 138: # define WTERMSIG(stat) ((*((int *) &(stat))) & 0x7f) ! 139: #endif ! 140: ! 141: #ifndef WIFSTOPPED ! 142: # define WIFSTOPPED(stat) (((*((int *) &(stat))) & 0xff) == 0177) ! 143: #endif ! 144: ! 145: #ifndef WSTOPSIG ! 146: # define WSTOPSIG(stat) (((*((int *) &(stat))) >> 8) & 0xff) ! 147: #endif ! 148: ! 149: /* ! 150: * Supply macros for seek offsets, if they're not already provided by ! 151: * an include file. ! 152: */ ! 153: ! 154: #ifndef SEEK_SET ! 155: # define SEEK_SET 0 ! 156: #endif ! 157: ! 158: #ifndef SEEK_CUR ! 159: # define SEEK_CUR 1 ! 160: #endif ! 161: ! 162: #ifndef SEEK_END ! 163: # define SEEK_END 2 ! 164: #endif ! 165: ! 166: /* ! 167: * The stuff below is needed by the "time" command. If this ! 168: * system has no gettimeofday call, then must use times and the ! 169: * CLK_TCK #define (from sys/param.h) to compute elapsed time. ! 170: * Unfortunately, some systems only have HZ and no CLK_TCK, and ! 171: * some might not even have HZ. ! 172: */ ! 173: ! 174: #if ! TCL_GETTOD ! 175: # include <sys/times.h> ! 176: # include <sys/param.h> ! 177: # ifndef CLK_TCK ! 178: # ifdef HZ ! 179: # define CLK_TCK HZ ! 180: # else ! 181: # define CLK_TCK 60 ! 182: # endif ! 183: # endif ! 184: #endif ! 185: ! 186: /* ! 187: * Define access mode constants if they aren't already defined. ! 188: */ ! 189: ! 190: #ifndef F_OK ! 191: # define F_OK 00 ! 192: #endif ! 193: #ifndef X_OK ! 194: # define X_OK 01 ! 195: #endif ! 196: #ifndef W_OK ! 197: # define W_OK 02 ! 198: #endif ! 199: #ifndef R_OK ! 200: # define R_OK 04 ! 201: #endif ! 202: ! 203: /* ! 204: * On systems without symbolic links (i.e. S_IFLNK isn't defined) ! 205: * define "lstat" to use "stat" instead. ! 206: */ ! 207: ! 208: #ifndef S_IFLNK ! 209: # define lstat stat ! 210: #endif ! 211: ! 212: /* ! 213: * Define macros to query file type bits, if they're not already ! 214: * defined. ! 215: */ ! 216: ! 217: #ifndef S_ISREG ! 218: # ifdef S_IFREG ! 219: # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) ! 220: # else ! 221: # define S_ISREG(m) 0 ! 222: # endif ! 223: # endif ! 224: #ifndef S_ISDIR ! 225: # ifdef S_IFDIR ! 226: # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) ! 227: # else ! 228: # define S_ISDIR(m) 0 ! 229: # endif ! 230: # endif ! 231: #ifndef S_ISCHR ! 232: # ifdef S_IFCHR ! 233: # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) ! 234: # else ! 235: # define S_ISCHR(m) 0 ! 236: # endif ! 237: # endif ! 238: #ifndef S_ISBLK ! 239: # ifdef S_IFBLK ! 240: # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) ! 241: # else ! 242: # define S_ISBLK(m) 0 ! 243: # endif ! 244: # endif ! 245: #ifndef S_ISFIFO ! 246: # ifdef S_IFIFO ! 247: # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) ! 248: # else ! 249: # define S_ISFIFO(m) 0 ! 250: # endif ! 251: # endif ! 252: #ifndef S_ISLNK ! 253: # ifdef S_IFLNK ! 254: # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) ! 255: # else ! 256: # define S_ISLNK(m) 0 ! 257: # endif ! 258: # endif ! 259: #ifndef S_ISSOCK ! 260: # ifdef S_IFSOCK ! 261: # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) ! 262: # else ! 263: # define S_ISSOCK(m) 0 ! 264: # endif ! 265: # endif ! 266: ! 267: /* ! 268: * Make sure that MAXPATHLEN is defined. ! 269: */ ! 270: ! 271: #ifndef MAXPATHLEN ! 272: # ifdef PATH_MAX ! 273: # define MAXPATHLEN PATH_MAX ! 274: # else ! 275: # define MAXPATHLEN 2048 ! 276: # endif ! 277: #endif ! 278: ! 279: /* ! 280: * Define pid_t and uid_t if they're not already defined. ! 281: */ ! 282: ! 283: #if ! TCL_PID_T ! 284: # define pid_t int ! 285: #endif ! 286: #if ! TCL_UID_T ! 287: # define uid_t int ! 288: #endif ! 289: ! 290: /* ! 291: * Variables provided by the C library: ! 292: */ ! 293: ! 294: extern char **environ; ! 295: ! 296: /* ! 297: * Library procedures used by Tcl but not declared in a header file: ! 298: */ ! 299: ! 300: #if 0 ! 301: #ifndef _CRAY ! 302: extern int access _ANSI_ARGS_((CONST char *path, int mode)); ! 303: extern int chdir _ANSI_ARGS_((CONST char *path)); ! 304: extern int close _ANSI_ARGS_((int fd)); ! 305: extern int dup2 _ANSI_ARGS_((int src, int dst)); ! 306: extern int execvp _ANSI_ARGS_((CONST char *name, char **argv)); ! 307: extern void _exit _ANSI_ARGS_((int status)); ! 308: extern pid_t fork _ANSI_ARGS_((void)); ! 309: extern uid_t geteuid _ANSI_ARGS_((void)); ! 310: extern pid_t getpid _ANSI_ARGS_((void)); ! 311: extern char * getcwd _ANSI_ARGS_((char *buffer, int size)); ! 312: extern char * getwd _ANSI_ARGS_((char *buffer)); ! 313: extern int kill _ANSI_ARGS_((pid_t pid, int sig)); ! 314: extern long lseek _ANSI_ARGS_((int fd, int offset, int whence)); ! 315: extern char * mktemp _ANSI_ARGS_((char *template)); ! 316: extern int open _ANSI_ARGS_((CONST char *path, int flags, ...)); ! 317: extern int pipe _ANSI_ARGS_((int *fdPtr)); ! 318: extern int read _ANSI_ARGS_((int fd, char *buf, int numBytes)); ! 319: extern int readlink _ANSI_ARGS_((CONST char *path, char *buf, int size)); ! 320: extern int unlink _ANSI_ARGS_((CONST char *path)); ! 321: extern int write _ANSI_ARGS_((int fd, char *buf, int numBytes)); ! 322: #endif /* _CRAY */ ! 323: #endif ! 324: ! 325: #endif /* _TCLUNIX */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.