OSDN Git Service

Please enter the commit message for your changes. Lines starting
[eos/base.git] / util / src / TclTk / tcl8.6.12 / unix / tclUnixPort.h
1 /*
2  * tclUnixPort.h --
3  *
4  *      This header file handles porting issues that occur because of
5  *      differences between systems. It reads in UNIX-related header files and
6  *      sets up UNIX-related macros for Tcl's UNIX core. It should be the only
7  *      file that contains #ifdefs to handle different flavors of UNIX. This
8  *      file sets up the union of all UNIX-related things needed by any of the
9  *      Tcl core files. This file depends on configuration #defines such as
10  *      NO_DIRENT_H that are set up by the "configure" script.
11  *
12  *      Much of the material in this file was originally contributed by Karl
13  *      Lehenbauer, Mark Diekhans and Peter da Silva.
14  *
15  * Copyright (c) 1991-1994 The Regents of the University of California.
16  * Copyright (c) 1994-1997 Sun Microsystems, Inc.
17  *
18  * See the file "license.terms" for information on usage and redistribution of
19  * this file, and for a DISCLAIMER OF ALL WARRANTIES.
20  */
21
22 #ifndef _TCLUNIXPORT
23 #define _TCLUNIXPORT
24 \f
25 /*
26  *---------------------------------------------------------------------------
27  * The following sets of #includes and #ifdefs are required to get Tcl to
28  * compile under the various flavors of unix.
29  *---------------------------------------------------------------------------
30  */
31
32 #include <errno.h>
33 #include <fcntl.h>
34 #ifdef HAVE_NET_ERRNO_H
35 #   include <net/errno.h>
36 #endif
37 #include <pwd.h>
38 #include <signal.h>
39 #ifdef HAVE_SYS_PARAM_H
40 #   include <sys/param.h>
41 #endif
42 #include <sys/types.h>
43 #ifdef USE_DIRENT2_H
44 #   include "../compat/dirent2.h"
45 #else
46 #ifdef NO_DIRENT_H
47 #   include "../compat/dirent.h"
48 #else
49 #   include <dirent.h>
50 #endif
51 #endif
52 \f
53 /*
54  *---------------------------------------------------------------------------
55  * Parameterize for 64-bit filesystem support.
56  *---------------------------------------------------------------------------
57  */
58
59 #ifdef HAVE_STRUCT_DIRENT64
60 typedef struct dirent64         Tcl_DirEntry;
61 #   define TclOSreaddir         readdir64
62 #else
63 typedef struct dirent           Tcl_DirEntry;
64 #   define TclOSreaddir         readdir
65 #endif
66 #ifdef HAVE_DIR64
67 typedef DIR64                   TclDIR;
68 #   define TclOSopendir         opendir64
69 #   define TclOSrewinddir       rewinddir64
70 #   define TclOSclosedir        closedir64
71 #else
72 typedef DIR                     TclDIR;
73 #   define TclOSopendir         opendir
74 #   define TclOSrewinddir       rewinddir
75 #   define TclOSclosedir        closedir
76 #endif
77
78 #ifdef HAVE_TYPE_OFF64_T
79 typedef off64_t         Tcl_SeekOffset;
80 #   define TclOSseek            lseek64
81 #   define TclOSopen            open64
82 #else
83 typedef off_t           Tcl_SeekOffset;
84 #   define TclOSseek            lseek
85 #   define TclOSopen            open
86 #endif
87
88 #ifdef __CYGWIN__
89 #ifdef __cplusplus
90 extern "C" {
91 #endif
92     /* Make some symbols available without including <windows.h> */
93 #   define DWORD unsigned int
94 #   define CP_UTF8 65001
95 #   define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 0x00000004
96 #   define HANDLE void *
97 #   define HINSTANCE void *
98 #   define SOCKET unsigned int
99 #   define WSAEWOULDBLOCK 10035
100     typedef unsigned short WCHAR;
101 #ifdef __clang__
102 #pragma clang diagnostic push
103 #pragma clang diagnostic ignored "-Wignored-attributes"
104 #endif
105     __declspec(dllimport) extern __stdcall int GetModuleHandleExW(unsigned int, const void *, void *);
106     __declspec(dllimport) extern __stdcall int GetModuleFileNameW(void *, const void *, int);
107     __declspec(dllimport) extern __stdcall int WideCharToMultiByte(int, int, const void *, int,
108             char *, int, const char *, void *);
109     __declspec(dllimport) extern __stdcall int MultiByteToWideChar(int, int, const char *, int,
110             WCHAR *, int);
111     __declspec(dllimport) extern __stdcall void OutputDebugStringW(const WCHAR *);
112     __declspec(dllimport) extern __stdcall int IsDebuggerPresent(void);
113     __declspec(dllimport) extern __stdcall int GetLastError(void);
114     __declspec(dllimport) extern __stdcall int GetFileAttributesW(const WCHAR *);
115     __declspec(dllimport) extern __stdcall int SetFileAttributesW(const WCHAR *, int);
116     __declspec(dllimport) extern int cygwin_conv_path(int, const void *, void *, int);
117 #ifdef __clang__
118 #pragma clang diagnostic pop
119 #endif
120 #   define timezone _timezone
121     extern int TclOSstat(const char *name, void *statBuf);
122     extern int TclOSlstat(const char *name, void *statBuf);
123 #ifdef __cplusplus
124 }
125 #endif
126 #elif defined(HAVE_STRUCT_STAT64) && !defined(__APPLE__)
127 #   define TclOSstat(name, buf) stat64(name, (struct stat64 *)buf)
128 #   define TclOSlstat(name,buf) lstat64(name, (struct stat64 *)buf)
129 #else
130 #   define TclOSstat(name, buf) stat(name, (struct stat *)buf)
131 #   define TclOSlstat(name, buf) lstat(name, (struct stat *)buf)
132 #endif
133 \f
134 /*
135  *---------------------------------------------------------------------------
136  * Miscellaneous includes that might be missing.
137  *---------------------------------------------------------------------------
138  */
139
140 #include <sys/file.h>
141 #ifdef HAVE_SYS_SELECT_H
142 #   include <sys/select.h>
143 #endif
144 #include <sys/stat.h>
145 #ifdef TIME_WITH_SYS_TIME
146 #   include <sys/time.h>
147 #   include <time.h>
148 #else
149 #ifdef HAVE_SYS_TIME_H
150 #   include <sys/time.h>
151 #else
152 #   include <time.h>
153 #endif
154 #endif
155 #ifndef NO_SYS_WAIT_H
156 #   include <sys/wait.h>
157 #endif
158 #ifdef HAVE_INTTYPES_H
159 #   include <inttypes.h>
160 #endif
161 #include <limits.h>
162 #ifdef HAVE_STDINT_H
163 #   include <stdint.h>
164 #endif
165 #ifdef HAVE_UNISTD_H
166 #   include <unistd.h>
167 #else
168 #   include "../compat/unistd.h"
169 #endif
170
171 extern int TclUnixSetBlockingMode(int fd, int mode);
172
173 #include <utime.h>
174 \f
175 /*
176  *---------------------------------------------------------------------------
177  * Socket support stuff: This likely needs more work to parameterize for each
178  * system.
179  *---------------------------------------------------------------------------
180  */
181
182 #include <sys/socket.h>         /* struct sockaddr, SOCK_STREAM, ... */
183 #ifndef NO_UNAME
184 #   include <sys/utsname.h>     /* uname system call. */
185 #endif
186 #include <netinet/in.h>         /* struct in_addr, struct sockaddr_in */
187 #include <arpa/inet.h>          /* inet_ntoa() */
188 #include <netdb.h>              /* getaddrinfo() */
189 #ifdef NEED_FAKE_RFC2553
190 # include "../compat/fake-rfc2553.h"
191 #endif
192 \f
193 /*
194  *---------------------------------------------------------------------------
195  * Some platforms (e.g. SunOS) don't define FLT_MAX and FLT_MIN, so we look
196  * for an alternative definition. If no other alternative is available we use
197  * a reasonable guess.
198  *---------------------------------------------------------------------------
199  */
200
201 #ifndef NO_FLOAT_H
202 #   include <float.h>
203 #else
204 #ifndef NO_VALUES_H
205 #   include <values.h>
206 #endif
207 #endif
208
209 #ifndef FLT_MAX
210 #   ifdef MAXFLOAT
211 #       define FLT_MAX  MAXFLOAT
212 #   else
213 #       define FLT_MAX  3.402823466E+38F
214 #   endif
215 #endif
216 #ifndef FLT_MIN
217 #   ifdef MINFLOAT
218 #       define FLT_MIN  MINFLOAT
219 #   else
220 #       define FLT_MIN  1.175494351E-38F
221 #   endif
222 #endif
223 \f
224 /*
225  *---------------------------------------------------------------------------
226  * NeXT doesn't define O_NONBLOCK, so #define it here if necessary.
227  *---------------------------------------------------------------------------
228  */
229
230 #ifndef O_NONBLOCK
231 #   define O_NONBLOCK 0x80
232 #endif
233 \f
234 /*
235  *---------------------------------------------------------------------------
236  * The type of the status returned by wait varies from UNIX system to UNIX
237  * system. The macro below defines it:
238  *---------------------------------------------------------------------------
239  */
240
241 #ifdef _AIX
242 #   define WAIT_STATUS_TYPE     pid_t
243 #else
244 #ifndef NO_UNION_WAIT
245 #   define WAIT_STATUS_TYPE     union wait
246 #else
247 #   define WAIT_STATUS_TYPE     int
248 #endif
249 #endif
250 \f
251 /*
252  *---------------------------------------------------------------------------
253  * Supply definitions for macros to query wait status, if not already defined
254  * in header files above.
255  *---------------------------------------------------------------------------
256  */
257
258 #ifndef WIFEXITED
259 #   define WIFEXITED(stat)      (((*((int *) &(stat))) & 0xFF) == 0)
260 #endif
261
262 #ifndef WEXITSTATUS
263 #   define WEXITSTATUS(stat)    (((*((int *) &(stat))) >> 8) & 0xFF)
264 #endif
265
266 #ifndef WIFSIGNALED
267 #   define WIFSIGNALED(stat) \
268         (((*((int *) &(stat)))) && ((*((int *) &(stat))) \
269                 == ((*((int *) &(stat))) & 0x00FF)))
270 #endif
271
272 #ifndef WTERMSIG
273 #   define WTERMSIG(stat)       ((*((int *) &(stat))) & 0x7F)
274 #endif
275
276 #ifndef WIFSTOPPED
277 #   define WIFSTOPPED(stat)     (((*((int *) &(stat))) & 0xFF) == 0177)
278 #endif
279
280 #ifndef WSTOPSIG
281 #   define WSTOPSIG(stat)       (((*((int *) &(stat))) >> 8) & 0xFF)
282 #endif
283 \f
284 /*
285  *---------------------------------------------------------------------------
286  * Define constants for waitpid() system call if they aren't defined by a
287  * system header file.
288  *---------------------------------------------------------------------------
289  */
290
291 #ifndef WNOHANG
292 #   define WNOHANG 1
293 #endif
294 #ifndef WUNTRACED
295 #   define WUNTRACED 2
296 #endif
297 \f
298 /*
299  *---------------------------------------------------------------------------
300  * Supply macros for seek offsets, if they're not already provided by an
301  * include file.
302  *---------------------------------------------------------------------------
303  */
304
305 #ifndef SEEK_SET
306 #   define SEEK_SET 0
307 #endif
308 #ifndef SEEK_CUR
309 #   define SEEK_CUR 1
310 #endif
311 #ifndef SEEK_END
312 #   define SEEK_END 2
313 #endif
314 \f
315 /*
316  *---------------------------------------------------------------------------
317  * The stuff below is needed by the "time" command. If this system has no
318  * gettimeofday call, then must use times() instead.
319  *---------------------------------------------------------------------------
320  */
321
322 #ifdef NO_GETTOD
323 #   include <sys/times.h>
324 #else
325 #   ifdef HAVE_BSDGETTIMEOFDAY
326 #       define gettimeofday BSDgettimeofday
327 #   endif
328 #endif
329
330 #ifdef GETTOD_NOT_DECLARED
331 extern int      gettimeofday(struct timeval *tp,
332                             struct timezone *tzp);
333 #endif
334 \f
335 /*
336  *---------------------------------------------------------------------------
337  * Define access mode constants if they aren't already defined.
338  *---------------------------------------------------------------------------
339  */
340
341 #ifndef F_OK
342 #   define F_OK         00
343 #endif
344 #ifndef X_OK
345 #   define X_OK         01
346 #endif
347 #ifndef W_OK
348 #   define W_OK         02
349 #endif
350 #ifndef R_OK
351 #   define R_OK         04
352 #endif
353 \f
354 /*
355  *---------------------------------------------------------------------------
356  * Define FD_CLOEEXEC (the close-on-exec flag bit) if it isn't already
357  * defined.
358  *---------------------------------------------------------------------------
359  */
360
361 #ifndef FD_CLOEXEC
362 #   define FD_CLOEXEC   1
363 #endif
364 \f
365 /*
366  *---------------------------------------------------------------------------
367  * On systems without symbolic links (i.e. S_IFLNK isn't defined) define
368  * "lstat" to use "stat" instead.
369  *---------------------------------------------------------------------------
370  */
371
372 #ifndef S_IFLNK
373 #   undef TclOSlstat
374 #   define lstat        stat
375 #   define lstat64      stat64
376 #   define TclOSlstat   TclOSstat
377 #endif
378 \f
379 /*
380  *---------------------------------------------------------------------------
381  * Define macros to query file type bits, if they're not already defined.
382  *---------------------------------------------------------------------------
383  */
384
385 #ifndef S_ISREG
386 #   ifdef S_IFREG
387 #       define S_ISREG(m)       (((m) & S_IFMT) == S_IFREG)
388 #   else
389 #       define S_ISREG(m)       0
390 #   endif
391 #endif /* !S_ISREG */
392 #ifndef S_ISDIR
393 #   ifdef S_IFDIR
394 #       define S_ISDIR(m)       (((m) & S_IFMT) == S_IFDIR)
395 #   else
396 #       define S_ISDIR(m)       0
397 #   endif
398 #endif /* !S_ISDIR */
399 #ifndef S_ISCHR
400 #   ifdef S_IFCHR
401 #       define S_ISCHR(m)       (((m) & S_IFMT) == S_IFCHR)
402 #   else
403 #       define S_ISCHR(m)       0
404 #   endif
405 #endif /* !S_ISCHR */
406
407 #ifndef S_ISBLK
408 #   ifdef S_IFBLK
409 #       define S_ISBLK(m)       (((m) & S_IFMT) == S_IFBLK)
410 #   else
411 #       define S_ISBLK(m)       0
412 #   endif
413 #endif /* !S_ISBLK */
414
415 #ifndef S_ISFIFO
416 #   ifdef S_IFIFO
417 #       define S_ISFIFO(m)      (((m) & S_IFMT) == S_IFIFO)
418 #   else
419 #       define S_ISFIFO(m)      0
420 #   endif
421 #endif /* !S_ISFIFO */
422
423 #ifndef S_ISLNK
424 #   ifdef S_IFLNK
425 #       define S_ISLNK(m)       (((m) & S_IFMT) == S_IFLNK)
426 #   else
427 #       define S_ISLNK(m)       0
428 #   endif
429 #endif /* !S_ISLNK */
430
431 #ifndef S_ISSOCK
432 #   ifdef S_IFSOCK
433 #       define S_ISSOCK(m)      (((m) & S_IFMT) == S_IFSOCK)
434 #   else
435 #       define S_ISSOCK(m)      0
436 #   endif
437 #endif /* !S_ISSOCK */
438 \f
439 /*
440  *---------------------------------------------------------------------------
441  * Make sure that MAXPATHLEN and MAXNAMLEN are defined.
442  *---------------------------------------------------------------------------
443  */
444
445 #ifndef MAXPATHLEN
446 #   ifdef PATH_MAX
447 #       define MAXPATHLEN       PATH_MAX
448 #   else
449 #       define MAXPATHLEN       2048
450 #   endif
451 #endif
452
453 #ifndef MAXNAMLEN
454 #   ifdef NAME_MAX
455 #       define MAXNAMLEN        NAME_MAX
456 #   else
457 #       define MAXNAMLEN        255
458 #   endif
459 #endif
460 \f
461 /*
462  *---------------------------------------------------------------------------
463  * The following macro defines the type of the mask arguments to select:
464  *---------------------------------------------------------------------------
465  */
466
467 #ifndef NO_FD_SET
468 #   define SELECT_MASK  fd_set
469 #else /* NO_FD_SET */
470 #   ifndef _AIX
471         typedef long    fd_mask;
472 #   endif /* !AIX */
473 #   if defined(_IBMR2)
474 #       define SELECT_MASK      void
475 #   else /* !defined(_IBMR2) */
476 #       define SELECT_MASK      int
477 #   endif /* defined(_IBMR2) */
478 #endif /* !NO_FD_SET */
479 \f
480 /*
481  *---------------------------------------------------------------------------
482  * Define "NBBY" (number of bits per byte) if it's not already defined.
483  *---------------------------------------------------------------------------
484  */
485
486 #ifndef NBBY
487 #   define NBBY         8
488 #endif
489 \f
490 /*
491  *---------------------------------------------------------------------------
492  * The following macro defines the number of fd_masks in an fd_set:
493  *---------------------------------------------------------------------------
494  */
495
496 #ifndef FD_SETSIZE
497 #   ifdef OPEN_MAX
498 #       define FD_SETSIZE       OPEN_MAX
499 #   else
500 #       define FD_SETSIZE       256
501 #   endif
502 #endif /* FD_SETSIZE */
503
504 #ifndef howmany
505 #   define howmany(x, y)        (((x)+((y)-1))/(y))
506 #endif /* !defined(howmany) */
507
508 #ifndef NFDBITS
509 #   define NFDBITS      NBBY*sizeof(fd_mask)
510 #endif /* NFDBITS */
511
512 #define MASK_SIZE       howmany(FD_SETSIZE, NFDBITS)
513 \f
514 /*
515  *---------------------------------------------------------------------------
516  * Not all systems declare the errno variable in errno.h. so this file does it
517  * explicitly. The list of system error messages also isn't generally declared
518  * in a header file anywhere.
519  *---------------------------------------------------------------------------
520  */
521
522 #ifdef NO_ERRNO
523 extern int errno;
524 #endif /* NO_ERRNO */
525 \f
526 /*
527  *---------------------------------------------------------------------------
528  * Not all systems declare all the errors that Tcl uses! Provide some
529  * work-arounds...
530  *---------------------------------------------------------------------------
531  */
532
533 #ifndef EOVERFLOW
534 #   ifdef EFBIG
535 #       define EOVERFLOW        EFBIG
536 #   else /* !EFBIG */
537 #       define EOVERFLOW        EINVAL
538 #   endif /* EFBIG */
539 #endif /* EOVERFLOW */
540 \f
541 /*
542  *---------------------------------------------------------------------------
543  * Variables provided by the C library:
544  *---------------------------------------------------------------------------
545  */
546
547 #if defined(__APPLE__) && defined(__DYNAMIC__)
548 #   include <crt_externs.h>
549 #   define environ      (*_NSGetEnviron())
550 #   define USE_PUTENV   1
551 #else
552 #   if defined(_sgi) || defined(__sgi)
553 #       define environ  _environ
554 #   endif
555 extern char **          environ;
556 #endif
557 \f
558 /*
559  *---------------------------------------------------------------------------
560  * Darwin specifc configure overrides.
561  *---------------------------------------------------------------------------
562  */
563
564 #ifdef __APPLE__
565
566 /*
567  *---------------------------------------------------------------------------
568  * Support for fat compiles: configure runs only once for multiple architectures
569  *---------------------------------------------------------------------------
570  */
571
572 #   if defined(__LP64__) && defined (NO_COREFOUNDATION_64)
573 #       undef HAVE_COREFOUNDATION
574 #   endif /* __LP64__ && NO_COREFOUNDATION_64 */
575 #   include <sys/cdefs.h>
576 #   ifdef __DARWIN_UNIX03
577 #       if __DARWIN_UNIX03
578 #           undef HAVE_PUTENV_THAT_COPIES
579 #       else
580 #           define HAVE_PUTENV_THAT_COPIES      1
581 #       endif
582 #   endif /* __DARWIN_UNIX03 */
583
584 /*
585  *---------------------------------------------------------------------------
586  * Include AvailabilityMacros.h here (when available) to ensure any symbolic
587  * MAC_OS_X_VERSION_* constants passed on the command line are translated.
588  *---------------------------------------------------------------------------
589  */
590
591 #   ifdef HAVE_AVAILABILITYMACROS_H
592 #       include <AvailabilityMacros.h>
593 #   endif
594
595 /*
596  *---------------------------------------------------------------------------
597  * Support for weak import.
598  *---------------------------------------------------------------------------
599  */
600
601 #   ifdef HAVE_WEAK_IMPORT
602 #       if !defined(HAVE_AVAILABILITYMACROS_H) || !defined(MAC_OS_X_VERSION_MIN_REQUIRED)
603 #           undef HAVE_WEAK_IMPORT
604 #       else
605 #           ifndef WEAK_IMPORT_ATTRIBUTE
606 #               define WEAK_IMPORT_ATTRIBUTE    __attribute__((weak_import))
607 #           endif
608 #       endif
609 #   endif /* HAVE_WEAK_IMPORT */
610
611 /*
612  *---------------------------------------------------------------------------
613  * Support for MAC_OS_X_VERSION_MAX_ALLOWED define from AvailabilityMacros.h:
614  * only use API available in the indicated OS version or earlier.
615  *---------------------------------------------------------------------------
616  */
617
618 #   ifdef MAC_OS_X_VERSION_MAX_ALLOWED
619 #       if MAC_OS_X_VERSION_MAX_ALLOWED < 1050 && defined(__LP64__)
620 #           undef HAVE_COREFOUNDATION
621 #       endif
622 #       if MAC_OS_X_VERSION_MAX_ALLOWED < 1040
623 #           undef HAVE_OSSPINLOCKLOCK
624 #           undef HAVE_PTHREAD_ATFORK
625 #           undef HAVE_COPYFILE
626 #       endif
627 #       if MAC_OS_X_VERSION_MAX_ALLOWED < 1030
628 #           ifdef TCL_THREADS
629                 /* prior to 10.3, realpath is not threadsafe, c.f. bug 711232 */
630 #               define NO_REALPATH 1
631 #           endif
632 #           undef HAVE_LANGINFO
633 #       endif
634 #   endif /* MAC_OS_X_VERSION_MAX_ALLOWED */
635 #   if defined(HAVE_COREFOUNDATION) && defined(__LP64__) && \
636             defined(HAVE_WEAK_IMPORT) && MAC_OS_X_VERSION_MIN_REQUIRED < 1050
637 #       warning "Weak import of 64-bit CoreFoundation is not supported, will not run on Mac OS X < 10.5."
638 #   endif
639
640 /*
641  *---------------------------------------------------------------------------
642  * At present, using vfork() instead of fork() causes execve() to fail
643  * intermittently on Darwin x86_64. rdar://4685553
644  *---------------------------------------------------------------------------
645  */
646
647 #   if defined(__x86_64__) && !defined(FIXED_RDAR_4685553)
648 #       undef USE_VFORK
649 #   endif /* __x86_64__ */
650 /* Workaround problems with vfork() when building with llvm-gcc-4.2 */
651 #   if defined (__llvm__) && \
652             (__GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 2 || \
653             (__GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ > 0))))
654 #       undef USE_VFORK
655 #   endif /* __llvm__ */
656 #endif /* __APPLE__ */
657 \f
658 /*
659  *---------------------------------------------------------------------------
660  * The following macros and declarations represent the interface between
661  * generic and unix-specific parts of Tcl. Some of the macros may override
662  * functions declared in tclInt.h.
663  *---------------------------------------------------------------------------
664  */
665
666 /*
667  * The default platform eol translation on Unix is TCL_TRANSLATE_LF.
668  */
669
670 #ifdef DJGPP
671 #define TCL_PLATFORM_TRANSLATION        TCL_TRANSLATE_CRLF
672 typedef int socklen_t;
673 #else
674 #define TCL_PLATFORM_TRANSLATION        TCL_TRANSLATE_LF
675 #endif
676 \f
677 /*
678  *---------------------------------------------------------------------------
679  * The following macros have trivial definitions, allowing generic code to
680  * address platform-specific issues.
681  *---------------------------------------------------------------------------
682  */
683
684 #define TclpReleaseFile(file)   /* Nothing. */
685 \f
686 /*
687  *---------------------------------------------------------------------------
688  * The following defines wrap the system memory allocation routines.
689  *---------------------------------------------------------------------------
690  */
691
692 #define TclpSysAlloc(size, isBin)       malloc((size_t)(size))
693 #define TclpSysFree(ptr)                free((char *)(ptr))
694 #define TclpSysRealloc(ptr, size)       realloc((char *)(ptr), (size_t)(size))
695 \f
696 /*
697  *---------------------------------------------------------------------------
698  * The following macros and declaration wrap the C runtime library functions.
699  *---------------------------------------------------------------------------
700  */
701
702 #define TclpExit        exit
703
704 #ifdef TCL_THREADS
705 #   include <pthread.h>
706 #endif /* TCL_THREADS */
707
708 /* FIXME - Hyper-enormous platform assumption! */
709 #ifndef AF_INET6
710 #   define AF_INET6     10
711 #endif
712 \f
713 /*
714  *---------------------------------------------------------------------------
715  * Set of MT-safe implementations of some known-to-be-MT-unsafe library calls.
716  * Instead of returning pointers to the static storage, those return pointers
717  * to the TSD data.
718  *---------------------------------------------------------------------------
719  */
720
721 #include <pwd.h>
722 #include <grp.h>
723
724 extern struct passwd *  TclpGetPwNam(const char *name);
725 extern struct group *   TclpGetGrNam(const char *name);
726 extern struct passwd *  TclpGetPwUid(uid_t uid);
727 extern struct group *   TclpGetGrGid(gid_t gid);
728 extern struct hostent * TclpGetHostByName(const char *name);
729 extern struct hostent * TclpGetHostByAddr(const char *addr,
730                                     int length, int type);
731 extern void *TclpMakeTcpClientChannelMode(
732                                     void *tcpSocket, int mode);
733
734 #endif /* _TCLUNIXPORT */
735 \f
736 /*
737  * Local Variables:
738  * mode: c
739  * c-basic-offset: 4
740  * fill-column: 78
741  * End:
742  */