diff options
Diffstat (limited to 'unix/tclUnixPort.h')
| -rw-r--r-- | unix/tclUnixPort.h | 208 |
1 files changed, 142 insertions, 66 deletions
diff --git a/unix/tclUnixPort.h b/unix/tclUnixPort.h index 0aa765a..e6e8303 100644 --- a/unix/tclUnixPort.h +++ b/unix/tclUnixPort.h @@ -23,8 +23,8 @@ #ifndef _TCLUNIXPORT #define _TCLUNIXPORT -#ifndef MODULE_SCOPE -#define MODULE_SCOPE extern +#ifndef _TCLINT +# include "tclInt.h" #endif /* @@ -95,15 +95,10 @@ typedef off_t Tcl_SeekOffset; const char *, int, const char *, const char *); DLLIMPORT extern int cygwin_conv_path(int, const void *, void *, int); - DLLIMPORT extern int cygwin_conv_path_list(int, const void *, void *, int); -# define USE_PUTENV 1 -# define USE_PUTENV_FOR_UNSET 1 -/* On Cygwin, the environment is imported from the Cygwin DLL. */ -# define environ __cygwin_environ -# define timezone _timezone - DLLIMPORT extern char **__cygwin_environ; - MODULE_SCOPE int TclOSstat(const char *name, Tcl_StatBuf *statBuf); - MODULE_SCOPE int TclOSlstat(const char *name, Tcl_StatBuf *statBuf); + EXTERN int TclOSstat(const char *name, Tcl_StatBuf *statBuf); + EXTERN int TclOSlstat(const char *name, Tcl_StatBuf *statBuf); +# define NO_FSTATFS +# undef HAVE_FTS #elif defined(HAVE_STRUCT_STAT64) # define TclOSstat stat64 # define TclOSlstat lstat64 @@ -112,13 +107,26 @@ typedef off_t Tcl_SeekOffset; # define TclOSlstat lstat #endif +#if !HAVE_STRTOLL && defined(TCL_WIDE_INT_TYPE) && !TCL_WIDE_INT_IS_LONG +EXTERN Tcl_WideInt strtoll _ANSI_ARGS_((CONST char *string, + char **endPtr, int base)); +EXTERN Tcl_WideUInt strtoull _ANSI_ARGS_((CONST char *string, + char **endPtr, int base)); +#endif + #include <sys/file.h> #ifdef HAVE_SYS_SELECT_H # include <sys/select.h> #endif -#ifdef HAVE_SYS_STAT_H -# include <sys/stat.h> -#endif +#include <sys/stat.h> + +#ifdef __CYGWIN__ +# define timezone _timezone + typedef long TIMEZONE_t; +#else /* !__CYGWIN__ */ + typedef int TIMEZONE_t; +#endif /* !__CYGWIN__ */ + #if TIME_WITH_SYS_TIME # include <sys/time.h> # include <time.h> @@ -132,31 +140,32 @@ typedef off_t Tcl_SeekOffset; #ifndef NO_SYS_WAIT_H # include <sys/wait.h> #endif -#if HAVE_INTTYPES_H -# include <inttypes.h> -#endif -#ifdef NO_LIMITS_H -# include "../compat/limits.h" -#else -# include <limits.h> -#endif -#if HAVE_STDINT_H -# include <stdint.h> -#endif #ifdef HAVE_UNISTD_H # include <unistd.h> #else # include "../compat/unistd.h" #endif +#ifdef USE_FIONBIO + /* + * Not using the Posix fcntl(...,O_NONBLOCK,...) interface, instead + * we are using ioctl(..,FIONBIO,..). + */ -MODULE_SCOPE int TclUnixSetBlockingMode(int fd, int mode); +# ifdef HAVE_SYS_FILIO_H +# include <sys/filio.h> /* For FIONBIO. */ +# endif +# ifdef HAVE_SYS_IOCTL_H +# include <sys/ioctl.h> /* For FIONBIO. */ +# endif +#endif /* USE_FIONBIO */ #include <utime.h> /* * Socket support stuff: This likely needs more work to parameterize for * each system. */ + #include <sys/socket.h> /* struct sockaddr, SOCK_STREAM, ... */ #ifndef NO_UNAME # include <sys/utsname.h> /* uname system call. */ @@ -203,6 +212,18 @@ MODULE_SCOPE int TclUnixSetBlockingMode(int fd, int mode); #endif /* + * HPUX needs the flag O_NONBLOCK to get the right non-blocking I/O + * semantics, while most other systems need O_NDELAY. Define the + * constant NBIO_FLAG to be one of these + */ + +#ifdef HPUX +# define NBIO_FLAG O_NONBLOCK +#else +# define NBIO_FLAG O_NDELAY +#endif + +/* * The type of the status returned by wait varies from UNIX system * to UNIX system. The macro below defines it: */ @@ -275,16 +296,26 @@ MODULE_SCOPE int TclUnixSetBlockingMode(int fd, int mode); /* * The stuff below is needed by the "time" command. If this system has no - * gettimeofday call, then must use times() instead. + * gettimeofday call, then must use times and the CLK_TCK #define (from + * sys/param.h) to compute elapsed time. Unfortunately, some systems only + * have HZ and no CLK_TCK, and some might not even have HZ. */ #ifdef NO_GETTOD # include <sys/times.h> +# include <sys/param.h> +# ifndef CLK_TCK +# ifdef HZ +# define CLK_TCK HZ +# else +# define CLK_TCK 60 +# endif +# endif #endif #ifdef GETTOD_NOT_DECLARED -EXTERN int gettimeofday (struct timeval *tp, - struct timezone *tzp); +EXTERN int gettimeofday _ANSI_ARGS_((struct timeval *tp, + struct timezone *tzp)); #endif /* @@ -461,7 +492,7 @@ EXTERN int gettimeofday (struct timeval *tp, #ifdef NO_ERRNO extern int errno; -#endif /* NO_ERRNO */ +#endif /* * Not all systems declare all the errors that Tcl uses! Provide some @@ -492,6 +523,16 @@ extern char **environ; #endif /* + * At present (12/91) not all stdlib.h implementations declare strtod. + * The declaration below is here to ensure that it's declared, so that + * the compiler won't take the default approach of assuming it returns + * an int. There's no ANSI prototype for it because there would end + * up being too many conflicts with slightly-different prototypes. + */ + +extern double strtod(); + +/* * There is no platform-specific panic routine for Unix in the Tcl internals. */ @@ -585,6 +626,33 @@ extern char **environ; #endif /* __APPLE__ */ /* + * Darwin 8 copyfile API. + */ + +#ifdef HAVE_COPYFILE +#ifdef HAVE_COPYFILE_H +#include <copyfile.h> +#if defined(HAVE_WEAK_IMPORT) && MAC_OS_X_VERSION_MIN_REQUIRED < 1040 +/* Support for weakly importing copyfile. */ +#define WEAK_IMPORT_COPYFILE +extern int copyfile(const char *from, const char *to, copyfile_state_t state, + copyfile_flags_t flags) WEAK_IMPORT_ATTRIBUTE; +#endif /* HAVE_WEAK_IMPORT */ +#else /* HAVE_COPYFILE_H */ +int copyfile(const char *from, const char *to, void *state, uint32_t flags); +#define COPYFILE_ACL (1<<0) +#define COPYFILE_XATTR (1<<2) +#define COPYFILE_NOFOLLOW_SRC (1<<18) +#if defined(HAVE_WEAK_IMPORT) && MAC_OS_X_VERSION_MIN_REQUIRED < 1040 +/* Support for weakly importing copyfile. */ +#define WEAK_IMPORT_COPYFILE +extern int copyfile(const char *from, const char *to, void *state, + uint32_t flags) WEAK_IMPORT_ATTRIBUTE; +#endif /* HAVE_WEAK_IMPORT */ +#endif /* HAVE_COPYFILE_H */ +#endif /* HAVE_COPYFILE */ + +/* *--------------------------------------------------------------------------- * The following macros and declarations represent the interface between * generic and unix-specific parts of Tcl. Some of the macros may override @@ -598,7 +666,6 @@ extern char **environ; #ifdef DJGPP #define TCL_PLATFORM_TRANSLATION TCL_TRANSLATE_CRLF -typedef int socklen_t; #else #define TCL_PLATFORM_TRANSLATION TCL_TRANSLATE_LF #endif @@ -611,12 +678,15 @@ typedef int socklen_t; #define TclpReleaseFile(file) /* Nothing. */ /* - * The following defines wrap the system memory allocation routines. + * The following defines wrap the system memory allocation routines for + * use by tclAlloc.c. By default off unused on Unix. */ -#define TclpSysAlloc(size, isBin) malloc((size_t)size) -#define TclpSysFree(ptr) free((char*)ptr) -#define TclpSysRealloc(ptr, size) realloc((char*)ptr, (size_t)size) +#if USE_TCLALLOC +# define TclpSysAlloc(size, isBin) malloc((size_t)size) +# define TclpSysFree(ptr) free((char*)ptr) +# define TclpSysRealloc(ptr, size) realloc((char*)ptr, (size_t)size) +#endif /* * The following macros and declaration wrap the C runtime library @@ -625,48 +695,54 @@ typedef int socklen_t; #define TclpExit exit +/* + * Platform specific mutex definition used by memory allocators. + * These mutexes are statically allocated and explicitly initialized. + * Most modules do not use this, but instead use Tcl_Mutex types and + * Tcl_MutexLock and Tcl_MutexUnlock that are self-initializing. + */ + #ifdef TCL_THREADS -# include <pthread.h> -EXTERN struct tm *TclpLocaltime(CONST time_t *); -EXTERN struct tm *TclpGmtime(CONST time_t *); -/* #define localtime(x) TclpLocaltime(x) - * #define gmtime(x) TclpGmtime(x) */ -# undef inet_ntoa -# define inet_ntoa(x) TclpInetNtoa(x) -# ifdef HAVE_PTHREAD_ATTR_GET_NP -# define TclpPthreadGetAttrs pthread_attr_get_np -# ifdef ATTRGETNP_NOT_DECLARED -/* - * Assume it is in pthread_np.h if it isn't in pthread.h. [Bug 1064882] - * We might need to revisit this in the future. :^( - */ -# include <pthread_np.h> -# endif -# else -# ifdef HAVE_PTHREAD_GETATTR_NP -# define TclpPthreadGetAttrs pthread_getattr_np -# ifdef GETATTRNP_NOT_DECLARED -EXTERN int pthread_getattr_np (pthread_t, pthread_attr_t *); -# endif -# endif /* HAVE_PTHREAD_GETATTR_NP */ -# endif /* HAVE_PTHREAD_ATTR_GET_NP */ +#include <pthread.h> +typedef pthread_mutex_t TclpMutex; +EXTERN void TclpMutexInit _ANSI_ARGS_((TclpMutex *mPtr)); +EXTERN void TclpMutexLock _ANSI_ARGS_((TclpMutex *mPtr)); +EXTERN void TclpMutexUnlock _ANSI_ARGS_((TclpMutex *mPtr)); +EXTERN Tcl_DirEntry * TclpReaddir(DIR *); +#ifndef TclpLocaltime +EXTERN struct tm *TclpLocaltime(TclpTime_t_CONST); +#endif +#ifndef TclpGmtime +EXTERN struct tm *TclpGmtime(TclpTime_t_CONST); +#endif +#define inet_ntoa(x) TclpInetNtoa(x) +#else +typedef int TclpMutex; +#define TclpMutexInit(a) +#define TclpMutexLock(a) +#define TclpMutexUnlock(a) #endif /* TCL_THREADS */ + /* * Set of MT-safe implementations of some * known-to-be-MT-unsafe library calls. * Instead of returning pointers to the * static storage, those return pointers - * to the TSD data. + * to the TSD data. */ +#include <pwd.h> #include <grp.h> -MODULE_SCOPE struct passwd* TclpGetPwNam(const char *name); -MODULE_SCOPE struct group* TclpGetGrNam(const char *name); -MODULE_SCOPE struct passwd* TclpGetPwUid(uid_t uid); -MODULE_SCOPE struct group* TclpGetGrGid(gid_t gid); -MODULE_SCOPE struct hostent* TclpGetHostByName(const char *name); -MODULE_SCOPE struct hostent* TclpGetHostByAddr(const char *addr, int length, int type); +EXTERN struct passwd* TclpGetPwNam(const char *name); +EXTERN struct group* TclpGetGrNam(const char *name); +EXTERN struct passwd* TclpGetPwUid(uid_t uid); +EXTERN struct group* TclpGetGrGid(gid_t gid); +EXTERN struct hostent* TclpGetHostByName(const char *name); +EXTERN struct hostent* TclpGetHostByAddr(const char *addr, int length, int type); + +#include "tclPlatDecls.h" +#include "tclIntPlatDecls.h" #endif /* _TCLUNIXPORT */ |
