tclUnixPort.hGo to the documentation of this file.00001 /* 00002 * tclUnixPort.h -- 00003 * 00004 * This header file handles porting issues that occur because 00005 * of differences between systems. It reads in UNIX-related 00006 * header files and sets up UNIX-related macros for Tcl's UNIX 00007 * core. It should be the only file that contains #ifdefs to 00008 * handle different flavors of UNIX. This file sets up the 00009 * union of all UNIX-related things needed by any of the Tcl 00010 * core files. This file depends on configuration #defines such 00011 * as NO_DIRENT_H that are set up by the "configure" script. 00012 * 00013 * Much of the material in this file was originally contributed 00014 * by Karl Lehenbauer, Mark Diekhans and Peter da Silva. 00015 * 00016 * Copyright (c) 1991-1994 The Regents of the University of California. 00017 * Copyright (c) 1994-1997 Sun Microsystems, Inc. 00018 * 00019 * See the file "license.terms" for information on usage and redistribution 00020 * of this file, and for a DISCLAIMER OF ALL WARRANTIES. 00021 * 00022 * RCS: @(#) $Id: tclUnixPort.h,v 1.61 2007/12/13 15:28:42 dgp Exp $ 00023 */ 00024 00025 #ifndef _TCLUNIXPORT 00026 #define _TCLUNIXPORT 00027 00028 /* 00029 *--------------------------------------------------------------------------- 00030 * The following sets of #includes and #ifdefs are required to get Tcl to 00031 * compile under the various flavors of unix. 00032 *--------------------------------------------------------------------------- 00033 */ 00034 00035 #include <errno.h> 00036 #include <fcntl.h> 00037 #ifdef HAVE_NET_ERRNO_H 00038 # include <net/errno.h> 00039 #endif 00040 #include <pwd.h> 00041 #include <signal.h> 00042 #ifdef HAVE_SYS_PARAM_H 00043 # include <sys/param.h> 00044 #endif 00045 #include <sys/types.h> 00046 #ifdef USE_DIRENT2_H 00047 # include "../compat/dirent2.h" 00048 #else 00049 #ifdef NO_DIRENT_H 00050 # include "../compat/dirent.h" 00051 #else 00052 # include <dirent.h> 00053 #endif 00054 #endif 00055 00056 #ifdef HAVE_STRUCT_DIRENT64 00057 typedef struct dirent64 Tcl_DirEntry; 00058 # define TclOSreaddir readdir64 00059 #else 00060 typedef struct dirent Tcl_DirEntry; 00061 # define TclOSreaddir readdir 00062 #endif 00063 00064 #ifdef HAVE_TYPE_OFF64_T 00065 typedef off64_t Tcl_SeekOffset; 00066 # define TclOSseek lseek64 00067 # define TclOSopen open64 00068 #else 00069 typedef off_t Tcl_SeekOffset; 00070 # define TclOSseek lseek 00071 # define TclOSopen open 00072 #endif 00073 00074 #ifdef HAVE_STRUCT_STAT64 00075 # define TclOSstat stat64 00076 # define TclOSlstat lstat64 00077 #else 00078 # define TclOSstat stat 00079 # define TclOSlstat lstat 00080 #endif 00081 00082 #include <sys/file.h> 00083 #ifdef HAVE_SYS_SELECT_H 00084 # include <sys/select.h> 00085 #endif 00086 #include <sys/stat.h> 00087 #if TIME_WITH_SYS_TIME 00088 # include <sys/time.h> 00089 # include <time.h> 00090 #else 00091 #if HAVE_SYS_TIME_H 00092 # include <sys/time.h> 00093 #else 00094 # include <time.h> 00095 #endif 00096 #endif 00097 #ifndef NO_SYS_WAIT_H 00098 # include <sys/wait.h> 00099 #endif 00100 #if HAVE_INTTYPES_H 00101 # include <inttypes.h> 00102 #endif 00103 #if HAVE_STDINT_H 00104 # include <stdint.h> 00105 #endif 00106 #ifdef HAVE_UNISTD_H 00107 # include <unistd.h> 00108 #else 00109 # include "../compat/unistd.h" 00110 #endif 00111 #ifdef USE_FIONBIO 00112 /* 00113 * Not using the Posix fcntl(...,O_NONBLOCK,...) interface, instead 00114 * we are using ioctl(..,FIONBIO,..). 00115 */ 00116 00117 # ifdef HAVE_SYS_FILIO_H 00118 # include <sys/filio.h> /* For FIONBIO. */ 00119 # endif 00120 00121 # ifdef HAVE_SYS_IOCTL_H 00122 # include <sys/ioctl.h> /* For FIONBIO. */ 00123 # endif 00124 #endif /* USE_FIONBIO */ 00125 #include <utime.h> 00126 00127 /* 00128 * Socket support stuff: This likely needs more work to parameterize for 00129 * each system. 00130 */ 00131 #include <sys/socket.h> /* struct sockaddr, SOCK_STREAM, ... */ 00132 #ifndef NO_UNAME 00133 # include <sys/utsname.h> /* uname system call. */ 00134 #endif 00135 #include <netinet/in.h> /* struct in_addr, struct sockaddr_in */ 00136 #include <arpa/inet.h> /* inet_ntoa() */ 00137 #include <netdb.h> /* gethostbyname() */ 00138 00139 /* 00140 * Some platforms (e.g. SunOS) don't define FLT_MAX and FLT_MIN, so we 00141 * look for an alternative definition. If no other alternative is available 00142 * we use a reasonable guess. 00143 */ 00144 00145 #ifndef NO_FLOAT_H 00146 # include <float.h> 00147 #else 00148 #ifndef NO_VALUES_H 00149 # include <values.h> 00150 #endif 00151 #endif 00152 00153 #ifndef FLT_MAX 00154 # ifdef MAXFLOAT 00155 # define FLT_MAX MAXFLOAT 00156 # else 00157 # define FLT_MAX 3.402823466E+38F 00158 # endif 00159 #endif 00160 #ifndef FLT_MIN 00161 # ifdef MINFLOAT 00162 # define FLT_MIN MINFLOAT 00163 # else 00164 # define FLT_MIN 1.175494351E-38F 00165 # endif 00166 #endif 00167 00168 /* 00169 * NeXT doesn't define O_NONBLOCK, so #define it here if necessary. 00170 */ 00171 00172 #ifndef O_NONBLOCK 00173 # define O_NONBLOCK 0x80 00174 #endif 00175 00176 /* 00177 * HPUX needs the flag O_NONBLOCK to get the right non-blocking I/O 00178 * semantics, while most other systems need O_NDELAY. Define the 00179 * constant NBIO_FLAG to be one of these 00180 */ 00181 00182 #ifdef HPUX 00183 # define NBIO_FLAG O_NONBLOCK 00184 #else 00185 # define NBIO_FLAG O_NDELAY 00186 #endif 00187 00188 /* 00189 * The type of the status returned by wait varies from UNIX system 00190 * to UNIX system. The macro below defines it: 00191 */ 00192 00193 #ifdef _AIX 00194 # define WAIT_STATUS_TYPE pid_t 00195 #else 00196 #ifndef NO_UNION_WAIT 00197 # define WAIT_STATUS_TYPE union wait 00198 #else 00199 # define WAIT_STATUS_TYPE int 00200 #endif 00201 #endif 00202 00203 /* 00204 * Supply definitions for macros to query wait status, if not already 00205 * defined in header files above. 00206 */ 00207 00208 #ifndef WIFEXITED 00209 # define WIFEXITED(stat) (((*((int *) &(stat))) & 0xff) == 0) 00210 #endif 00211 00212 #ifndef WEXITSTATUS 00213 # define WEXITSTATUS(stat) (((*((int *) &(stat))) >> 8) & 0xff) 00214 #endif 00215 00216 #ifndef WIFSIGNALED 00217 # define WIFSIGNALED(stat) (((*((int *) &(stat)))) && ((*((int *) &(stat))) == ((*((int *) &(stat))) & 0x00ff))) 00218 #endif 00219 00220 #ifndef WTERMSIG 00221 # define WTERMSIG(stat) ((*((int *) &(stat))) & 0x7f) 00222 #endif 00223 00224 #ifndef WIFSTOPPED 00225 # define WIFSTOPPED(stat) (((*((int *) &(stat))) & 0xff) == 0177) 00226 #endif 00227 00228 #ifndef WSTOPSIG 00229 # define WSTOPSIG(stat) (((*((int *) &(stat))) >> 8) & 0xff) 00230 #endif 00231 00232 /* 00233 * Define constants for waitpid() system call if they aren't defined 00234 * by a system header file. 00235 */ 00236 00237 #ifndef WNOHANG 00238 # define WNOHANG 1 00239 #endif 00240 #ifndef WUNTRACED 00241 # define WUNTRACED 2 00242 #endif 00243 00244 /* 00245 * Supply macros for seek offsets, if they're not already provided by 00246 * an include file. 00247 */ 00248 00249 #ifndef SEEK_SET 00250 # define SEEK_SET 0 00251 #endif 00252 #ifndef SEEK_CUR 00253 # define SEEK_CUR 1 00254 #endif 00255 #ifndef SEEK_END 00256 # define SEEK_END 2 00257 #endif 00258 00259 /* 00260 * The stuff below is needed by the "time" command. If this system has no 00261 * gettimeofday call, then must use times and the CLK_TCK #define (from 00262 * sys/param.h) to compute elapsed time. Unfortunately, some systems only 00263 * have HZ and no CLK_TCK, and some might not even have HZ. 00264 */ 00265 00266 #ifdef NO_GETTOD 00267 # include <sys/times.h> 00268 # include <sys/param.h> 00269 # ifndef CLK_TCK 00270 # ifdef HZ 00271 # define CLK_TCK HZ 00272 # else 00273 # define CLK_TCK 60 00274 # endif 00275 # endif 00276 #else 00277 # ifdef HAVE_BSDGETTIMEOFDAY 00278 # define gettimeofday BSDgettimeofday 00279 # endif 00280 #endif 00281 00282 #ifdef GETTOD_NOT_DECLARED 00283 EXTERN int gettimeofday _ANSI_ARGS_((struct timeval *tp, 00284 struct timezone *tzp)); 00285 #endif 00286 00287 /* 00288 * Define access mode constants if they aren't already defined. 00289 */ 00290 00291 #ifndef F_OK 00292 # define F_OK 00 00293 #endif 00294 #ifndef X_OK 00295 # define X_OK 01 00296 #endif 00297 #ifndef W_OK 00298 # define W_OK 02 00299 #endif 00300 #ifndef R_OK 00301 # define R_OK 04 00302 #endif 00303 00304 /* 00305 * Define FD_CLOEEXEC (the close-on-exec flag bit) if it isn't 00306 * already defined. 00307 */ 00308 00309 #ifndef FD_CLOEXEC 00310 # define FD_CLOEXEC 1 00311 #endif 00312 00313 /* 00314 * On systems without symbolic links (i.e. S_IFLNK isn't defined) 00315 * define "lstat" to use "stat" instead. 00316 */ 00317 00318 #ifndef S_IFLNK 00319 # undef TclOSlstat 00320 # define lstat stat 00321 # define lstat64 stat64 00322 # define TclOSlstat TclOSstat 00323 #endif 00324 00325 /* 00326 * Define macros to query file type bits, if they're not already 00327 * defined. 00328 */ 00329 00330 #ifndef S_ISREG 00331 # ifdef S_IFREG 00332 # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 00333 # else 00334 # define S_ISREG(m) 0 00335 # endif 00336 #endif /* !S_ISREG */ 00337 #ifndef S_ISDIR 00338 # ifdef S_IFDIR 00339 # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) 00340 # else 00341 # define S_ISDIR(m) 0 00342 # endif 00343 #endif /* !S_ISDIR */ 00344 #ifndef S_ISCHR 00345 # ifdef S_IFCHR 00346 # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) 00347 # else 00348 # define S_ISCHR(m) 0 00349 # endif 00350 #endif /* !S_ISCHR */ 00351 #ifndef S_ISBLK 00352 # ifdef S_IFBLK 00353 # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) 00354 # else 00355 # define S_ISBLK(m) 0 00356 # endif 00357 #endif /* !S_ISBLK */ 00358 #ifndef S_ISFIFO 00359 # ifdef S_IFIFO 00360 # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) 00361 # else 00362 # define S_ISFIFO(m) 0 00363 # endif 00364 #endif /* !S_ISFIFO */ 00365 #ifndef S_ISLNK 00366 # ifdef S_IFLNK 00367 # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) 00368 # else 00369 # define S_ISLNK(m) 0 00370 # endif 00371 #endif /* !S_ISLNK */ 00372 #ifndef S_ISSOCK 00373 # ifdef S_IFSOCK 00374 # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) 00375 # else 00376 # define S_ISSOCK(m) 0 00377 # endif 00378 #endif /* !S_ISSOCK */ 00379 00380 /* 00381 * Make sure that MAXPATHLEN and MAXNAMLEN are defined. 00382 */ 00383 00384 #ifndef MAXPATHLEN 00385 # ifdef PATH_MAX 00386 # define MAXPATHLEN PATH_MAX 00387 # else 00388 # define MAXPATHLEN 2048 00389 # endif 00390 #endif 00391 00392 #ifndef MAXNAMLEN 00393 # ifdef NAME_MAX 00394 # define MAXNAMLEN NAME_MAX 00395 # else 00396 # define MAXNAMLEN 255 00397 # endif 00398 #endif 00399 00400 /* 00401 * Make sure that L_tmpnam is defined. 00402 */ 00403 00404 #ifndef L_tmpnam 00405 # define L_tmpnam 100 00406 #endif 00407 00408 /* 00409 * The following macro defines the type of the mask arguments to 00410 * select: 00411 */ 00412 00413 #ifndef NO_FD_SET 00414 # define SELECT_MASK fd_set 00415 #else /* NO_FD_SET */ 00416 # ifndef _AIX 00417 typedef long fd_mask; 00418 # endif /* !AIX */ 00419 # if defined(_IBMR2) 00420 # define SELECT_MASK void 00421 # else /* !defined(_IBMR2) */ 00422 # define SELECT_MASK int 00423 # endif /* defined(_IBMR2) */ 00424 #endif /* !NO_FD_SET */ 00425 00426 /* 00427 * Define "NBBY" (number of bits per byte) if it's not already defined. 00428 */ 00429 00430 #ifndef NBBY 00431 # define NBBY 8 00432 #endif 00433 00434 /* 00435 * The following macro defines the number of fd_masks in an fd_set: 00436 */ 00437 00438 #ifndef FD_SETSIZE 00439 # ifdef OPEN_MAX 00440 # define FD_SETSIZE OPEN_MAX 00441 # else 00442 # define FD_SETSIZE 256 00443 # endif 00444 #endif /* FD_SETSIZE */ 00445 #if !defined(howmany) 00446 # define howmany(x, y) (((x)+((y)-1))/(y)) 00447 #endif /* !defined(howmany) */ 00448 #ifndef NFDBITS 00449 # define NFDBITS NBBY*sizeof(fd_mask) 00450 #endif /* NFDBITS */ 00451 #define MASK_SIZE howmany(FD_SETSIZE, NFDBITS) 00452 00453 /* 00454 * Not all systems declare the errno variable in errno.h. so this 00455 * file does it explicitly. The list of system error messages also 00456 * isn't generally declared in a header file anywhere. 00457 */ 00458 00459 #ifdef NO_ERRNO 00460 extern int errno; 00461 #endif /* NO_ERRNO */ 00462 00463 /* 00464 * Not all systems declare all the errors that Tcl uses! Provide some 00465 * work-arounds... 00466 */ 00467 00468 #ifndef EOVERFLOW 00469 # ifdef EFBIG 00470 # define EOVERFLOW EFBIG 00471 # else /* !EFBIG */ 00472 # define EOVERFLOW EINVAL 00473 # endif /* EFBIG */ 00474 #endif /* EOVERFLOW */ 00475 00476 /* 00477 * Variables provided by the C library: 00478 */ 00479 00480 #if defined(__APPLE__) && defined(__DYNAMIC__) 00481 # include <crt_externs.h> 00482 # define environ (*_NSGetEnviron()) 00483 # define USE_PUTENV 1 00484 #else 00485 # if defined(_sgi) || defined(__sgi) 00486 # define environ _environ 00487 # endif 00488 extern char **environ; 00489 #endif 00490 00491 /* 00492 * At present (12/91) not all stdlib.h implementations declare strtod. 00493 * The declaration below is here to ensure that it's declared, so that 00494 * the compiler won't take the default approach of assuming it returns 00495 * an int. There's no ANSI prototype for it because there would end 00496 * up being too many conflicts with slightly-different prototypes. 00497 */ 00498 00499 #ifdef NO_STDLIB_H 00500 extern double strtod(); 00501 #endif 00502 00503 /* 00504 * There is no platform-specific panic routine for Unix in the Tcl internals. 00505 */ 00506 00507 #define TclpPanic ((Tcl_PanicProc *) NULL) 00508 00509 /* 00510 * Darwin specifc configure overrides. 00511 */ 00512 00513 #ifdef __APPLE__ 00514 /* 00515 * Support for fat compiles: configure runs only once for multiple architectures 00516 */ 00517 # if defined(__LP64__) && defined (NO_COREFOUNDATION_64) 00518 # undef HAVE_COREFOUNDATION 00519 # endif /* __LP64__ && NO_COREFOUNDATION_64 */ 00520 # include <sys/cdefs.h> 00521 # ifdef __DARWIN_UNIX03 00522 # if __DARWIN_UNIX03 00523 # undef HAVE_PUTENV_THAT_COPIES 00524 # else 00525 # define HAVE_PUTENV_THAT_COPIES 1 00526 # endif 00527 # endif /* __DARWIN_UNIX03 */ 00528 /* 00529 * The termios configure test program relies on the configure script being run 00530 * from a terminal, which is not the case e.g. when configuring from Xcode. 00531 * Since termios is known to be present on all Mac OS X releases since 10.0, 00532 * override the configure defines for serial API here. [Bug 497147] 00533 */ 00534 # define USE_TERMIOS 1 00535 # undef USE_TERMIO 00536 # undef USE_SGTTY 00537 /* 00538 * Include AvailabilityMacros.h here (when available) to ensure any symbolic 00539 * MAC_OS_X_VERSION_* constants passed on the command line are translated. 00540 */ 00541 # ifdef HAVE_AVAILABILITYMACROS_H 00542 # include <AvailabilityMacros.h> 00543 # endif 00544 /* 00545 * Support for weak import. 00546 */ 00547 # ifdef HAVE_WEAK_IMPORT 00548 # if !defined(HAVE_AVAILABILITYMACROS_H) || !defined(MAC_OS_X_VERSION_MIN_REQUIRED) 00549 # undef HAVE_WEAK_IMPORT 00550 # else 00551 # ifndef WEAK_IMPORT_ATTRIBUTE 00552 # define WEAK_IMPORT_ATTRIBUTE __attribute__((weak_import)) 00553 # endif 00554 # endif 00555 # endif /* HAVE_WEAK_IMPORT */ 00556 /* 00557 * Support for MAC_OS_X_VERSION_MAX_ALLOWED define from AvailabilityMacros.h: 00558 * only use API available in the indicated OS version or earlier. 00559 */ 00560 # ifdef MAC_OS_X_VERSION_MAX_ALLOWED 00561 # if MAC_OS_X_VERSION_MAX_ALLOWED < 1050 && defined(__LP64__) 00562 # undef HAVE_COREFOUNDATION 00563 # endif 00564 # if MAC_OS_X_VERSION_MAX_ALLOWED < 1040 00565 # undef HAVE_OSSPINLOCKLOCK 00566 # undef HAVE_PTHREAD_ATFORK 00567 # undef HAVE_COPYFILE 00568 # endif 00569 # if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 00570 # ifdef TCL_THREADS 00571 /* prior to 10.3, realpath is not threadsafe, c.f. bug 711232 */ 00572 # define NO_REALPATH 1 00573 # endif 00574 # undef HAVE_LANGINFO 00575 # endif 00576 # endif /* MAC_OS_X_VERSION_MAX_ALLOWED */ 00577 # if defined(HAVE_COREFOUNDATION) && defined(__LP64__) && \ 00578 defined(HAVE_WEAK_IMPORT) && MAC_OS_X_VERSION_MIN_REQUIRED < 1050 00579 # warning "Weak import of 64-bit CoreFoundation is not supported, will not run on Mac OS X < 10.5." 00580 # endif 00581 /* 00582 * At present, using vfork() instead of fork() causes execve() to fail 00583 * intermittently on Darwin x86_64. rdar://4685553 00584 */ 00585 # if defined(__x86_64__) && !defined(FIXED_RDAR_4685553) 00586 # undef USE_VFORK 00587 # endif /* __x86_64__ */ 00588 #endif /* __APPLE__ */ 00589 00590 /* 00591 *--------------------------------------------------------------------------- 00592 * The following macros and declarations represent the interface between 00593 * generic and unix-specific parts of Tcl. Some of the macros may override 00594 * functions declared in tclInt.h. 00595 *--------------------------------------------------------------------------- 00596 */ 00597 00598 /* 00599 * The default platform eol translation on Unix is TCL_TRANSLATE_LF. 00600 */ 00601 00602 #ifdef DJGPP 00603 #define TCL_PLATFORM_TRANSLATION TCL_TRANSLATE_CRLF 00604 typedef int socklen_t; 00605 #else 00606 #define TCL_PLATFORM_TRANSLATION TCL_TRANSLATE_LF 00607 #endif 00608 00609 /* 00610 * The following macros have trivial definitions, allowing generic code to 00611 * address platform-specific issues. 00612 */ 00613 00614 #define TclpGetPid(pid) ((unsigned long) (pid)) 00615 #define TclpReleaseFile(file) /* Nothing. */ 00616 00617 /* 00618 * The following defines wrap the system memory allocation routines. 00619 */ 00620 00621 #define TclpSysAlloc(size, isBin) malloc((size_t)size) 00622 #define TclpSysFree(ptr) free((char*)ptr) 00623 #define TclpSysRealloc(ptr, size) realloc((char*)ptr, (size_t)size) 00624 00625 /* 00626 * The following macros and declaration wrap the C runtime library 00627 * functions. 00628 */ 00629 00630 #define TclpExit exit 00631 00632 #ifdef TCL_THREADS 00633 EXTERN struct tm * TclpLocaltime(CONST time_t *); 00634 EXTERN struct tm * TclpGmtime(CONST time_t *); 00635 EXTERN char * TclpInetNtoa(struct in_addr); 00636 /* #define localtime(x) TclpLocaltime(x) 00637 * #define gmtime(x) TclpGmtime(x) */ 00638 # undef inet_ntoa 00639 # define inet_ntoa(x) TclpInetNtoa(x) 00640 # ifdef HAVE_PTHREAD_ATTR_GET_NP 00641 # define TclpPthreadGetAttrs pthread_attr_get_np 00642 # ifdef ATTRGETNP_NOT_DECLARED 00643 /* 00644 * Assume it is in pthread_np.h if it isn't in pthread.h. [Bug 1064882] 00645 * We might need to revisit this in the future. :^( 00646 */ 00647 # include <pthread.h> 00648 # include <pthread_np.h> 00649 # endif 00650 # else 00651 # ifdef HAVE_PTHREAD_GETATTR_NP 00652 # define TclpPthreadGetAttrs pthread_getattr_np 00653 # ifdef GETATTRNP_NOT_DECLARED 00654 EXTERN int pthread_getattr_np _ANSI_ARGS_((pthread_t, pthread_attr_t *)); 00655 # endif 00656 # endif /* HAVE_PTHREAD_GETATTR_NP */ 00657 # endif /* HAVE_PTHREAD_ATTR_GET_NP */ 00658 #endif /* TCL_THREADS */ 00659 00660 /* 00661 * Set of MT-safe implementations of some 00662 * known-to-be-MT-unsafe library calls. 00663 * Instead of returning pointers to the 00664 * static storage, those return pointers 00665 * to the TSD data. 00666 */ 00667 00668 #include <pwd.h> 00669 #include <grp.h> 00670 00671 #ifndef MODULE_SCOPE 00672 #define MODULE_SCOPE extern 00673 #endif 00674 00675 MODULE_SCOPE struct passwd* TclpGetPwNam(const char *name); 00676 MODULE_SCOPE struct group* TclpGetGrNam(const char *name); 00677 MODULE_SCOPE struct passwd* TclpGetPwUid(uid_t uid); 00678 MODULE_SCOPE struct group* TclpGetGrGid(gid_t gid); 00679 MODULE_SCOPE struct hostent* TclpGetHostByName(const char *name); 00680 MODULE_SCOPE struct hostent* TclpGetHostByAddr(const char *addr, int length, int type); 00681 00682 #endif /* _TCLUNIXPORT */
Generated on Wed Mar 12 12:18:26 2008 by 1.5.1 |