1 /* 2 * iperlsys.h - Perl's interface to the system 3 * 4 * This file defines the system level functionality that perl needs. 5 * 6 * When using C, this definition is in the form of a set of macros that can be 7 * #defined to the system-level function (or a wrapper provided elsewhere). 8 * 9 * GSAR 21-JUN-98 10 */ 11 12 #ifndef __Inc__IPerl___ 13 #define __Inc__IPerl___ 14 15 /* 16 * PerlXXX_YYY explained - DickH and DougL @ ActiveState.com 17 * 18 * XXX := functional group 19 * YYY := stdlib/OS function name 20 * 21 * Continuing with the theme of PerlIO, all OS functionality was encapsulated 22 * into one of several interfaces. 23 * 24 * PerlIO - stdio 25 * PerlLIO - low level I/O 26 * PerlMem - malloc, realloc, free 27 * PerlDir - directory related 28 * PerlEnv - process environment handling 29 * PerlProc - process control 30 * PerlSock - socket functions 31 * 32 * 33 * The features of this are: 34 * 1. All OS dependant code is in the Perl Host and not the Perl Core. 35 * (At least this is the holy grail goal of this work) 36 * 2. The Perl Host (see perl.h for description) can provide a new and 37 * improved interface to OS functionality if required. 38 * 3. Developers can easily hook into the OS calls for instrumentation 39 * or diagnostic purposes. 40 * 41 * What was changed to do this: 42 * 1. All calls to OS functions were replaced with PerlXXX_YYY 43 * 44 */ 45 46 /* 47 Interface for perl stdio functions, or whatever we are Configure-d 48 to use. 49 */ 50 #include "perlio.h" 51 52 typedef Signal_t (*Sighandler1_t) (int); 53 typedef Signal_t (*Sighandler3_t) (int, Siginfo_t*, void*); 54 55 #ifndef Sighandler_t 56 # ifdef PERL_USE_3ARG_SIGHANDLER 57 typedef Sighandler3_t Sighandler_t; 58 # else 59 typedef Sighandler1_t Sighandler_t; 60 # endif 61 #endif 62 63 #if defined(PERL_IMPLICIT_SYS) 64 65 /* IPerlStdIO */ 66 struct IPerlStdIO; 67 struct IPerlStdIOInfo; 68 typedef FILE* (*LPStdin)(struct IPerlStdIO*); 69 typedef FILE* (*LPStdout)(struct IPerlStdIO*); 70 typedef FILE* (*LPStderr)(struct IPerlStdIO*); 71 typedef FILE* (*LPOpen)(struct IPerlStdIO*, const char*, 72 const char*); 73 typedef int (*LPClose)(struct IPerlStdIO*, FILE*); 74 typedef int (*LPEof)(struct IPerlStdIO*, FILE*); 75 typedef int (*LPError)(struct IPerlStdIO*, FILE*); 76 typedef void (*LPClearerr)(struct IPerlStdIO*, FILE*); 77 typedef int (*LPGetc)(struct IPerlStdIO*, FILE*); 78 typedef STDCHAR* (*LPGetBase)(struct IPerlStdIO*, FILE*); 79 typedef int (*LPGetBufsiz)(struct IPerlStdIO*, FILE*); 80 typedef int (*LPGetCnt)(struct IPerlStdIO*, FILE*); 81 typedef STDCHAR* (*LPGetPtr)(struct IPerlStdIO*, FILE*); 82 typedef char* (*LPGets)(struct IPerlStdIO*, char*, int, FILE*); 83 typedef int (*LPPutc)(struct IPerlStdIO*, int, FILE*); 84 typedef int (*LPPuts)(struct IPerlStdIO*, const char *, FILE*); 85 typedef int (*LPFlush)(struct IPerlStdIO*, FILE*); 86 typedef int (*LPUngetc)(struct IPerlStdIO*, int,FILE*); 87 typedef int (*LPFileno)(struct IPerlStdIO*, FILE*); 88 typedef FILE* (*LPFdopen)(struct IPerlStdIO*, int, const char*); 89 typedef FILE* (*LPReopen)(struct IPerlStdIO*, const char*, 90 const char*, FILE*); 91 typedef SSize_t (*LPRead)(struct IPerlStdIO*, void*, Size_t, Size_t, FILE *); 92 typedef SSize_t (*LPWrite)(struct IPerlStdIO*, const void*, Size_t, Size_t, FILE *); 93 typedef void (*LPSetBuf)(struct IPerlStdIO*, FILE*, char*); 94 typedef int (*LPSetVBuf)(struct IPerlStdIO*, FILE*, char*, int, 95 Size_t); 96 typedef void (*LPSetCnt)(struct IPerlStdIO*, FILE*, int); 97 98 #ifndef NETWARE 99 typedef void (*LPSetPtr)(struct IPerlStdIO*, FILE*, STDCHAR*); 100 #elif defined(NETWARE) 101 typedef void (*LPSetPtr)(struct IPerlStdIO*, FILE*, STDCHAR*, int); 102 #endif 103 104 typedef void (*LPSetlinebuf)(struct IPerlStdIO*, FILE*); 105 typedef int (*LPPrintf)(struct IPerlStdIO*, FILE*, const char*, 106 ...); 107 typedef int (*LPVprintf)(struct IPerlStdIO*, FILE*, const char*, 108 va_list); 109 typedef Off_t (*LPTell)(struct IPerlStdIO*, FILE*); 110 typedef int (*LPSeek)(struct IPerlStdIO*, FILE*, Off_t, int); 111 typedef void (*LPRewind)(struct IPerlStdIO*, FILE*); 112 typedef FILE* (*LPTmpfile)(struct IPerlStdIO*); 113 typedef int (*LPGetpos)(struct IPerlStdIO*, FILE*, Fpos_t*); 114 typedef int (*LPSetpos)(struct IPerlStdIO*, FILE*, 115 const Fpos_t*); 116 typedef void (*LPInit)(struct IPerlStdIO*); 117 typedef void (*LPInitOSExtras)(struct IPerlStdIO*); 118 typedef FILE* (*LPFdupopen)(struct IPerlStdIO*, FILE*); 119 120 struct IPerlStdIO 121 { 122 LPStdin pStdin; 123 LPStdout pStdout; 124 LPStderr pStderr; 125 LPOpen pOpen; 126 LPClose pClose; 127 LPEof pEof; 128 LPError pError; 129 LPClearerr pClearerr; 130 LPGetc pGetc; 131 LPGetBase pGetBase; 132 LPGetBufsiz pGetBufsiz; 133 LPGetCnt pGetCnt; 134 LPGetPtr pGetPtr; 135 LPGets pGets; 136 LPPutc pPutc; 137 LPPuts pPuts; 138 LPFlush pFlush; 139 LPUngetc pUngetc; 140 LPFileno pFileno; 141 LPFdopen pFdopen; 142 LPReopen pReopen; 143 LPRead pRead; 144 LPWrite pWrite; 145 LPSetBuf pSetBuf; 146 LPSetVBuf pSetVBuf; 147 LPSetCnt pSetCnt; 148 LPSetPtr pSetPtr; 149 LPSetlinebuf pSetlinebuf; 150 LPPrintf pPrintf; 151 LPVprintf pVprintf; 152 LPTell pTell; 153 LPSeek pSeek; 154 LPRewind pRewind; 155 LPTmpfile pTmpfile; 156 LPGetpos pGetpos; 157 LPSetpos pSetpos; 158 LPInit pInit; 159 LPInitOSExtras pInitOSExtras; 160 LPFdupopen pFdupopen; 161 }; 162 163 struct IPerlStdIOInfo 164 { 165 unsigned long nCount; /* number of entries expected */ 166 struct IPerlStdIO perlStdIOList; 167 }; 168 169 /* These do not belong here ... NI-S, 14 Nov 2000 */ 170 171 #ifdef USE_STDIO_PTR 172 # define PerlSIO_has_cntptr(f) 1 173 # ifdef STDIO_PTR_LVALUE 174 # ifdef STDIO_CNT_LVALUE 175 # define PerlSIO_canset_cnt(f) 1 176 # ifdef STDIO_PTR_LVAL_NOCHANGE_CNT 177 # define PerlSIO_fast_gets(f) 1 178 # endif 179 # else /* STDIO_CNT_LVALUE */ 180 # define PerlSIO_canset_cnt(f) 0 181 # endif 182 # else /* STDIO_PTR_LVALUE */ 183 # ifdef STDIO_PTR_LVAL_SETS_CNT 184 # define PerlSIO_fast_gets(f) 1 185 # endif 186 # endif 187 #else /* USE_STDIO_PTR */ 188 # define PerlSIO_has_cntptr(f) 0 189 # define PerlSIO_canset_cnt(f) 0 190 #endif /* USE_STDIO_PTR */ 191 192 #ifndef PerlSIO_fast_gets 193 #define PerlSIO_fast_gets(f) 0 194 #endif 195 196 #ifdef FILE_base 197 #define PerlSIO_has_base(f) 1 198 #else 199 #define PerlSIO_has_base(f) 0 200 #endif 201 202 /* Now take FILE * via function table */ 203 204 #define PerlSIO_stdin \ 205 (*PL_StdIO->pStdin)(PL_StdIO) 206 #define PerlSIO_stdout \ 207 (*PL_StdIO->pStdout)(PL_StdIO) 208 #define PerlSIO_stderr \ 209 (*PL_StdIO->pStderr)(PL_StdIO) 210 #define PerlSIO_fopen(x,y) \ 211 (*PL_StdIO->pOpen)(PL_StdIO, (x),(y)) 212 #define PerlSIO_fclose(f) \ 213 (*PL_StdIO->pClose)(PL_StdIO, (f)) 214 #define PerlSIO_feof(f) \ 215 (*PL_StdIO->pEof)(PL_StdIO, (f)) 216 #define PerlSIO_ferror(f) \ 217 (*PL_StdIO->pError)(PL_StdIO, (f)) 218 #define PerlSIO_clearerr(f) \ 219 (*PL_StdIO->pClearerr)(PL_StdIO, (f)) 220 #define PerlSIO_fgetc(f) \ 221 (*PL_StdIO->pGetc)(PL_StdIO, (f)) 222 #define PerlSIO_get_base(f) \ 223 (*PL_StdIO->pGetBase)(PL_StdIO, (f)) 224 #define PerlSIO_get_bufsiz(f) \ 225 (*PL_StdIO->pGetBufsiz)(PL_StdIO, (f)) 226 #define PerlSIO_get_cnt(f) \ 227 (*PL_StdIO->pGetCnt)(PL_StdIO, (f)) 228 #define PerlSIO_get_ptr(f) \ 229 (*PL_StdIO->pGetPtr)(PL_StdIO, (f)) 230 #define PerlSIO_fputc(c,f) \ 231 (*PL_StdIO->pPutc)(PL_StdIO, (c),(f)) 232 #define PerlSIO_fputs(s,f) \ 233 (*PL_StdIO->pPuts)(PL_StdIO, (s),(f)) 234 #define PerlSIO_fflush(f) \ 235 (*PL_StdIO->pFlush)(PL_StdIO, (f)) 236 #define PerlSIO_fgets(s, n, f) \ 237 (*PL_StdIO->pGets)(PL_StdIO, s, n, (f)) 238 #define PerlSIO_ungetc(c,f) \ 239 (*PL_StdIO->pUngetc)(PL_StdIO, (c),(f)) 240 #define PerlSIO_fileno(f) \ 241 (*PL_StdIO->pFileno)(PL_StdIO, (f)) 242 #define PerlSIO_fdopen(f, s) \ 243 (*PL_StdIO->pFdopen)(PL_StdIO, (f),(s)) 244 #define PerlSIO_freopen(p, m, f) \ 245 (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f)) 246 #define PerlSIO_fread(buf,sz,count,f) \ 247 (*PL_StdIO->pRead)(PL_StdIO, (buf), (sz), (count), (f)) 248 #define PerlSIO_fwrite(buf,sz,count,f) \ 249 (*PL_StdIO->pWrite)(PL_StdIO, (buf), (sz), (count), (f)) 250 #define PerlSIO_setbuf(f,b) \ 251 (*PL_StdIO->pSetBuf)(PL_StdIO, (f), (b)) 252 #define PerlSIO_setvbuf(f,b,t,s) \ 253 (*PL_StdIO->pSetVBuf)(PL_StdIO, (f),(b),(t),(s)) 254 #define PerlSIO_set_cnt(f,c) \ 255 (*PL_StdIO->pSetCnt)(PL_StdIO, (f), (c)) 256 #define PerlSIO_set_ptr(f,p) \ 257 (*PL_StdIO->pSetPtr)(PL_StdIO, (f), (p)) 258 #define PerlSIO_setlinebuf(f) \ 259 (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f)) 260 #define PerlSIO_printf Perl_fprintf_nocontext 261 #define PerlSIO_stdoutf Perl_printf_nocontext 262 #define PerlSIO_vprintf(f,fmt,a) \ 263 (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a) 264 #define PerlSIO_ftell(f) \ 265 (*PL_StdIO->pTell)(PL_StdIO, (f)) 266 #define PerlSIO_fseek(f,o,w) \ 267 (*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w)) 268 #define PerlSIO_fgetpos(f,p) \ 269 (*PL_StdIO->pGetpos)(PL_StdIO, (f),(p)) 270 #define PerlSIO_fsetpos(f,p) \ 271 (*PL_StdIO->pSetpos)(PL_StdIO, (f),(p)) 272 #define PerlSIO_rewind(f) \ 273 (*PL_StdIO->pRewind)(PL_StdIO, (f)) 274 #define PerlSIO_tmpfile() \ 275 (*PL_StdIO->pTmpfile)(PL_StdIO) 276 #define PerlSIO_init() \ 277 (*PL_StdIO->pInit)(PL_StdIO) 278 #undef init_os_extras 279 #define init_os_extras() \ 280 (*PL_StdIO->pInitOSExtras)(PL_StdIO) 281 #define PerlSIO_fdupopen(f) \ 282 (*PL_StdIO->pFdupopen)(PL_StdIO, (f)) 283 284 #else /* PERL_IMPLICIT_SYS */ 285 286 #define PerlSIO_stdin stdin 287 #define PerlSIO_stdout stdout 288 #define PerlSIO_stderr stderr 289 #define PerlSIO_fopen(x,y) fopen(x,y) 290 #ifdef __VOS__ 291 /* Work around VOS bug posix-979, wrongly setting errno when at end of file. */ 292 #define PerlSIO_fclose(f) (((errno==1025)?errno=0:0),fclose(f)) 293 #define PerlSIO_feof(f) (((errno==1025)?errno=0:0),feof(f)) 294 #define PerlSIO_ferror(f) (((errno==1025)?errno=0:0),ferror(f)) 295 #else 296 #define PerlSIO_fclose(f) fclose(f) 297 #define PerlSIO_feof(f) feof(f) 298 #define PerlSIO_ferror(f) ferror(f) 299 #endif 300 #define PerlSIO_clearerr(f) clearerr(f) 301 #define PerlSIO_fgetc(f) fgetc(f) 302 #ifdef FILE_base 303 #define PerlSIO_get_base(f) FILE_base(f) 304 #define PerlSIO_get_bufsiz(f) FILE_bufsiz(f) 305 #else 306 #define PerlSIO_get_base(f) NULL 307 #define PerlSIO_get_bufsiz(f) 0 308 #endif 309 #ifdef USE_STDIO_PTR 310 #define PerlSIO_get_cnt(f) FILE_cnt(f) 311 #define PerlSIO_get_ptr(f) FILE_ptr(f) 312 #else 313 #define PerlSIO_get_cnt(f) 0 314 #define PerlSIO_get_ptr(f) NULL 315 #endif 316 #define PerlSIO_fputc(c,f) fputc(c,f) 317 #define PerlSIO_fputs(s,f) fputs(s,f) 318 #define PerlSIO_fflush(f) Fflush(f) 319 #define PerlSIO_fgets(s, n, f) fgets(s,n,f) 320 #if defined(__VMS) 321 /* Unusual definition of ungetc() here to accommodate fast_sv_gets()' 322 * belief that it can mix getc/ungetc with reads from stdio buffer */ 323 START_EXTERN_C 324 int decc$ungetc(int __c, FILE *__stream); 325 END_EXTERN_C 326 # define PerlSIO_ungetc(c,f) ((c) == EOF ? EOF : \ 327 ((*(f) && !((*(f))->_flag & _IONBF) && \ 328 ((*(f))->_ptr > (*(f))->_base)) ? \ 329 ((*(f))->_cnt++, *(--(*(f))->_ptr) = (c)) : decc$ungetc(c,f))) 330 #else 331 # define PerlSIO_ungetc(c,f) ungetc(c,f) 332 #endif 333 #define PerlSIO_fileno(f) fileno(f) 334 #define PerlSIO_fdopen(f, s) fdopen(f,s) 335 #define PerlSIO_freopen(p, m, f) freopen(p,m,f) 336 #define PerlSIO_fread(buf,sz,count,f) fread(buf,sz,count,f) 337 #define PerlSIO_fwrite(buf,sz,count,f) fwrite(buf,sz,count,f) 338 #define PerlSIO_setbuf(f,b) setbuf(f,b) 339 #define PerlSIO_setvbuf(f,b,t,s) setvbuf(f,b,t,s) 340 #if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE) 341 #define PerlSIO_set_cnt(f,c) FILE_cnt(f) = (c) 342 #else 343 #define PerlSIO_set_cnt(f,c) PerlIOProc_abort() 344 #endif 345 #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) 346 #define PerlSIO_set_ptr(f,p) (FILE_ptr(f) = (p)) 347 #else 348 #define PerlSIO_set_ptr(f,p) PerlIOProc_abort() 349 #endif 350 #define PerlSIO_setlinebuf(f) setlinebuf(f) 351 #define PerlSIO_printf fprintf 352 #define PerlSIO_stdoutf printf 353 #define PerlSIO_vprintf(f,fmt,a) vfprintf(f,fmt,a) 354 #define PerlSIO_ftell(f) ftell(f) 355 #define PerlSIO_fseek(f,o,w) fseek(f,o,w) 356 #define PerlSIO_fgetpos(f,p) fgetpos(f,p) 357 #define PerlSIO_fsetpos(f,p) fsetpos(f,p) 358 #define PerlSIO_rewind(f) rewind(f) 359 #define PerlSIO_tmpfile() tmpfile() 360 #define PerlSIO_fdupopen(f) (f) 361 362 #endif /* PERL_IMPLICIT_SYS */ 363 364 /* 365 * Interface for directory functions 366 */ 367 368 #if defined(PERL_IMPLICIT_SYS) 369 370 /* IPerlDir */ 371 struct IPerlDir; 372 struct IPerlDirInfo; 373 typedef int (*LPMakedir)(struct IPerlDir*, const char*, int); 374 typedef int (*LPChdir)(struct IPerlDir*, const char*); 375 typedef int (*LPRmdir)(struct IPerlDir*, const char*); 376 typedef int (*LPDirClose)(struct IPerlDir*, DIR*); 377 typedef DIR* (*LPDirOpen)(struct IPerlDir*, const char*); 378 typedef struct direct* (*LPDirRead)(struct IPerlDir*, DIR*); 379 typedef void (*LPDirRewind)(struct IPerlDir*, DIR*); 380 typedef void (*LPDirSeek)(struct IPerlDir*, DIR*, long); 381 typedef long (*LPDirTell)(struct IPerlDir*, DIR*); 382 #ifdef WIN32 383 typedef char* (*LPDirMapPathA)(struct IPerlDir*, const char*); 384 typedef WCHAR* (*LPDirMapPathW)(struct IPerlDir*, const WCHAR*); 385 #endif 386 387 struct IPerlDir 388 { 389 LPMakedir pMakedir; 390 LPChdir pChdir; 391 LPRmdir pRmdir; 392 LPDirClose pClose; 393 LPDirOpen pOpen; 394 LPDirRead pRead; 395 LPDirRewind pRewind; 396 LPDirSeek pSeek; 397 LPDirTell pTell; 398 #ifdef WIN32 399 LPDirMapPathA pMapPathA; 400 LPDirMapPathW pMapPathW; 401 #endif 402 }; 403 404 struct IPerlDirInfo 405 { 406 unsigned long nCount; /* number of entries expected */ 407 struct IPerlDir perlDirList; 408 }; 409 410 #define PerlDir_mkdir(name, mode) \ 411 (*PL_Dir->pMakedir)(PL_Dir, (name), (mode)) 412 #define PerlDir_chdir(name) \ 413 (*PL_Dir->pChdir)(PL_Dir, (name)) 414 #define PerlDir_rmdir(name) \ 415 (*PL_Dir->pRmdir)(PL_Dir, (name)) 416 #define PerlDir_close(dir) \ 417 (*PL_Dir->pClose)(PL_Dir, (dir)) 418 #define PerlDir_open(name) \ 419 (*PL_Dir->pOpen)(PL_Dir, (name)) 420 #define PerlDir_read(dir) \ 421 (*PL_Dir->pRead)(PL_Dir, (dir)) 422 #define PerlDir_rewind(dir) \ 423 (*PL_Dir->pRewind)(PL_Dir, (dir)) 424 #define PerlDir_seek(dir, loc) \ 425 (*PL_Dir->pSeek)(PL_Dir, (dir), (loc)) 426 #define PerlDir_tell(dir) \ 427 (*PL_Dir->pTell)(PL_Dir, (dir)) 428 #ifdef WIN32 429 #define PerlDir_mapA(dir) \ 430 (*PL_Dir->pMapPathA)(PL_Dir, (dir)) 431 #define PerlDir_mapW(dir) \ 432 (*PL_Dir->pMapPathW)(PL_Dir, (dir)) 433 #endif 434 435 #else /* PERL_IMPLICIT_SYS */ 436 437 #define PerlDir_mkdir(name, mode) Mkdir((name), (mode)) 438 #ifdef VMS 439 # define PerlDir_chdir(n) Chdir((n)) 440 #else 441 # define PerlDir_chdir(name) chdir((name)) 442 #endif 443 #define PerlDir_rmdir(name) rmdir((name)) 444 #define PerlDir_close(dir) closedir((dir)) 445 #define PerlDir_open(name) opendir((name)) 446 #define PerlDir_read(dir) readdir((dir)) 447 #define PerlDir_rewind(dir) rewinddir((dir)) 448 #define PerlDir_seek(dir, loc) seekdir((dir), (loc)) 449 #define PerlDir_tell(dir) telldir((dir)) 450 #ifdef WIN32 451 #define PerlDir_mapA(dir) dir 452 #define PerlDir_mapW(dir) dir 453 #endif 454 455 #endif /* PERL_IMPLICIT_SYS */ 456 457 /* 458 Interface for perl environment functions 459 */ 460 461 #if defined(PERL_IMPLICIT_SYS) 462 463 /* IPerlEnv */ 464 struct IPerlEnv; 465 struct IPerlEnvInfo; 466 typedef char* (*LPEnvGetenv)(struct IPerlEnv*, const char*); 467 typedef int (*LPEnvPutenv)(struct IPerlEnv*, const char*); 468 typedef char* (*LPEnvGetenv_len)(struct IPerlEnv*, 469 const char *varname, unsigned long *len); 470 typedef int (*LPEnvUname)(struct IPerlEnv*, struct utsname *name); 471 typedef void (*LPEnvClearenv)(struct IPerlEnv*); 472 typedef void* (*LPEnvGetChildenv)(struct IPerlEnv*); 473 typedef void (*LPEnvFreeChildenv)(struct IPerlEnv*, void* env); 474 typedef char* (*LPEnvGetChilddir)(struct IPerlEnv*); 475 typedef void (*LPEnvFreeChilddir)(struct IPerlEnv*, char* dir); 476 #ifdef HAS_ENVGETENV 477 typedef char* (*LPENVGetenv)(struct IPerlEnv*, const char *varname); 478 typedef char* (*LPENVGetenv_len)(struct IPerlEnv*, 479 const char *varname, unsigned long *len); 480 #endif 481 #ifdef WIN32 482 typedef unsigned long (*LPEnvOsID)(struct IPerlEnv*); 483 typedef char* (*LPEnvLibPath)(struct IPerlEnv*, WIN32_NO_REGISTRY_M_(const char*) 484 STRLEN *const len); 485 typedef char* (*LPEnvSiteLibPath)(struct IPerlEnv*, const char*, 486 STRLEN *const len); 487 typedef char* (*LPEnvVendorLibPath)(struct IPerlEnv*, const char*, 488 STRLEN *const len); 489 typedef void (*LPEnvGetChildIO)(struct IPerlEnv*, child_IO_table*); 490 #endif 491 492 struct IPerlEnv 493 { 494 LPEnvGetenv pGetenv; 495 LPEnvPutenv pPutenv; 496 LPEnvGetenv_len pGetenv_len; 497 LPEnvUname pEnvUname; 498 LPEnvClearenv pClearenv; 499 LPEnvGetChildenv pGetChildenv; 500 LPEnvFreeChildenv pFreeChildenv; 501 LPEnvGetChilddir pGetChilddir; 502 LPEnvFreeChilddir pFreeChilddir; 503 #ifdef HAS_ENVGETENV 504 LPENVGetenv pENVGetenv; 505 LPENVGetenv_len pENVGetenv_len; 506 #endif 507 #ifdef WIN32 508 LPEnvOsID pEnvOsID; 509 LPEnvLibPath pLibPath; 510 LPEnvSiteLibPath pSiteLibPath; 511 LPEnvVendorLibPath pVendorLibPath; 512 LPEnvGetChildIO pGetChildIO; 513 #endif 514 }; 515 516 struct IPerlEnvInfo 517 { 518 unsigned long nCount; /* number of entries expected */ 519 struct IPerlEnv perlEnvList; 520 }; 521 522 #define PerlEnv_putenv(str) \ 523 (*PL_Env->pPutenv)(PL_Env,(str)) 524 #define PerlEnv_getenv(str) \ 525 (*PL_Env->pGetenv)(PL_Env,(str)) 526 #define PerlEnv_getenv_len(str,l) \ 527 (*PL_Env->pGetenv_len)(PL_Env,(str), (l)) 528 #define PerlEnv_clearenv() \ 529 (*PL_Env->pClearenv)(PL_Env) 530 #define PerlEnv_get_childenv() \ 531 (*PL_Env->pGetChildenv)(PL_Env) 532 #define PerlEnv_free_childenv(e) \ 533 (*PL_Env->pFreeChildenv)(PL_Env, (e)) 534 #define PerlEnv_get_childdir() \ 535 (*PL_Env->pGetChilddir)(PL_Env) 536 #define PerlEnv_free_childdir(d) \ 537 (*PL_Env->pFreeChilddir)(PL_Env, (d)) 538 #ifdef HAS_ENVGETENV 539 # define PerlEnv_ENVgetenv(str) \ 540 (*PL_Env->pENVGetenv)(PL_Env,(str)) 541 # define PerlEnv_ENVgetenv_len(str,l) \ 542 (*PL_Env->pENVGetenv_len)(PL_Env,(str), (l)) 543 #else 544 # define PerlEnv_ENVgetenv(str) \ 545 PerlEnv_getenv((str)) 546 # define PerlEnv_ENVgetenv_len(str,l) \ 547 PerlEnv_getenv_len((str),(l)) 548 #endif 549 #define PerlEnv_uname(name) \ 550 (*PL_Env->pEnvUname)(PL_Env,(name)) 551 #ifdef WIN32 552 #define PerlEnv_os_id() \ 553 (*PL_Env->pEnvOsID)(PL_Env) 554 #define PerlEnv_lib_path(str, lenp) \ 555 (*PL_Env->pLibPath)(PL_Env,WIN32_NO_REGISTRY_M_(str)(lenp)) 556 #define PerlEnv_sitelib_path(str, lenp) \ 557 (*PL_Env->pSiteLibPath)(PL_Env,(str),(lenp)) 558 #define PerlEnv_vendorlib_path(str, lenp) \ 559 (*PL_Env->pVendorLibPath)(PL_Env,(str),(lenp)) 560 #define PerlEnv_get_child_IO(ptr) \ 561 (*PL_Env->pGetChildIO)(PL_Env, ptr) 562 #endif 563 564 #else /* below is ! PERL_IMPLICIT_SYS */ 565 # ifdef USE_ITHREADS 566 567 /* Use the comma operator to return 0/non-zero, while avoiding putting 568 * this in an inline function */ 569 # define PerlEnv_putenv(str) (ENV_LOCK, (putenv(str) \ 570 ? (ENV_UNLOCK, 1) \ 571 : (ENV_UNLOCK, 0))) 572 # else 573 # define PerlEnv_putenv(str) putenv(str) 574 # endif 575 #define PerlEnv_getenv(str) mortal_getenv(str) 576 #define PerlEnv_getenv_len(str,l) getenv_len((str), (l)) 577 #ifdef HAS_ENVGETENV 578 # define PerlEnv_ENVgetenv(str) ENVgetenv((str)) 579 # define PerlEnv_ENVgetenv_len(str,l) ENVgetenv_len((str), (l)) 580 #else 581 # define PerlEnv_ENVgetenv(str) PerlEnv_getenv((str)) 582 # define PerlEnv_ENVgetenv_len(str,l) PerlEnv_getenv_len((str), (l)) 583 #endif 584 #define PerlEnv_uname(name) uname((name)) 585 586 #ifdef WIN32 587 #define PerlEnv_os_id() win32_os_id() 588 #define PerlEnv_lib_path(str, lenp) win32_get_privlib(WIN32_NO_REGISTRY_M_(str) lenp) 589 #define PerlEnv_sitelib_path(str, lenp) win32_get_sitelib(str, lenp) 590 #define PerlEnv_vendorlib_path(str, lenp) win32_get_vendorlib(str, lenp) 591 #define PerlEnv_get_child_IO(ptr) win32_get_child_IO(ptr) 592 #define PerlEnv_clearenv() win32_clearenv() 593 #define PerlEnv_get_childenv() win32_get_childenv() 594 #define PerlEnv_free_childenv(e) win32_free_childenv((e)) 595 #define PerlEnv_get_childdir() win32_get_childdir() 596 #define PerlEnv_free_childdir(d) win32_free_childdir((d)) 597 #else 598 #define PerlEnv_clearenv(str) (ENV_LOCK, (clearenv(str) \ 599 ? (ENV_UNLOCK, 1) \ 600 : (ENV_UNLOCK, 0))) 601 #define PerlEnv_get_childenv() get_childenv() 602 #define PerlEnv_free_childenv(e) free_childenv((e)) 603 #define PerlEnv_get_childdir() get_childdir() 604 #define PerlEnv_free_childdir(d) free_childdir((d)) 605 #endif 606 607 #endif /* PERL_IMPLICIT_SYS */ 608 609 /* 610 Interface for perl low-level IO functions 611 */ 612 613 #if defined(PERL_IMPLICIT_SYS) 614 615 struct utimbuf; /* prevent gcc warning about the use below */ 616 617 /* IPerlLIO */ 618 struct IPerlLIO; 619 struct IPerlLIOInfo; 620 typedef int (*LPLIOAccess)(struct IPerlLIO*, const char*, int); 621 typedef int (*LPLIOChmod)(struct IPerlLIO*, const char*, int); 622 typedef int (*LPLIOChown)(struct IPerlLIO*, const char*, uid_t, 623 gid_t); 624 typedef int (*LPLIOChsize)(struct IPerlLIO*, int, Off_t); 625 typedef int (*LPLIOClose)(struct IPerlLIO*, int); 626 typedef int (*LPLIODup)(struct IPerlLIO*, int); 627 typedef int (*LPLIODup2)(struct IPerlLIO*, int, int); 628 typedef int (*LPLIOFlock)(struct IPerlLIO*, int, int); 629 typedef int (*LPLIOFileStat)(struct IPerlLIO*, int, Stat_t*); 630 typedef int (*LPLIOIOCtl)(struct IPerlLIO*, int, unsigned int, 631 char*); 632 typedef int (*LPLIOIsatty)(struct IPerlLIO*, int); 633 typedef int (*LPLIOLink)(struct IPerlLIO*, const char*, 634 const char *); 635 typedef Off_t (*LPLIOLseek)(struct IPerlLIO*, int, Off_t, int); 636 typedef int (*LPLIOLstat)(struct IPerlLIO*, const char*, 637 Stat_t*); 638 typedef char* (*LPLIOMktemp)(struct IPerlLIO*, char*); 639 typedef int (*LPLIOOpen)(struct IPerlLIO*, const char*, int); 640 typedef int (*LPLIOOpen3)(struct IPerlLIO*, const char*, int, int); 641 typedef int (*LPLIORead)(struct IPerlLIO*, int, void*, unsigned int); 642 typedef int (*LPLIORename)(struct IPerlLIO*, const char*, 643 const char*); 644 #ifdef NETWARE 645 typedef int (*LPLIOSetmode)(struct IPerlLIO*, FILE*, int); 646 #else 647 typedef int (*LPLIOSetmode)(struct IPerlLIO*, int, int); 648 #endif /* NETWARE */ 649 typedef int (*LPLIONameStat)(struct IPerlLIO*, const char*, 650 Stat_t*); 651 typedef char* (*LPLIOTmpnam)(struct IPerlLIO*, char*); 652 typedef int (*LPLIOUmask)(struct IPerlLIO*, int); 653 typedef int (*LPLIOUnlink)(struct IPerlLIO*, const char*); 654 typedef int (*LPLIOUtime)(struct IPerlLIO*, const char*, struct utimbuf*); 655 typedef int (*LPLIOWrite)(struct IPerlLIO*, int, const void*, 656 unsigned int); 657 658 struct IPerlLIO 659 { 660 LPLIOAccess pAccess; 661 LPLIOChmod pChmod; 662 LPLIOChown pChown; 663 LPLIOChsize pChsize; 664 LPLIOClose pClose; 665 LPLIODup pDup; 666 LPLIODup2 pDup2; 667 LPLIOFlock pFlock; 668 LPLIOFileStat pFileStat; 669 LPLIOIOCtl pIOCtl; 670 LPLIOIsatty pIsatty; 671 LPLIOLink pLink; 672 LPLIOLseek pLseek; 673 LPLIOLstat pLstat; 674 LPLIOMktemp pMktemp; 675 LPLIOOpen pOpen; 676 LPLIOOpen3 pOpen3; 677 LPLIORead pRead; 678 LPLIORename pRename; 679 LPLIOSetmode pSetmode; 680 LPLIONameStat pNameStat; 681 LPLIOTmpnam pTmpnam; 682 LPLIOUmask pUmask; 683 LPLIOUnlink pUnlink; 684 LPLIOUtime pUtime; 685 LPLIOWrite pWrite; 686 }; 687 688 struct IPerlLIOInfo 689 { 690 unsigned long nCount; /* number of entries expected */ 691 struct IPerlLIO perlLIOList; 692 }; 693 694 #define PerlLIO_access(file, mode) \ 695 (*PL_LIO->pAccess)(PL_LIO, (file), (mode)) 696 #define PerlLIO_chmod(file, mode) \ 697 (*PL_LIO->pChmod)(PL_LIO, (file), (mode)) 698 #define PerlLIO_chown(file, owner, group) \ 699 (*PL_LIO->pChown)(PL_LIO, (file), (owner), (group)) 700 #define PerlLIO_chsize(fd, size) \ 701 (*PL_LIO->pChsize)(PL_LIO, (fd), (size)) 702 #define PerlLIO_close(fd) \ 703 (*PL_LIO->pClose)(PL_LIO, (fd)) 704 #define PerlLIO_dup(fd) \ 705 (*PL_LIO->pDup)(PL_LIO, (fd)) 706 #define PerlLIO_dup2(fd1, fd2) \ 707 (*PL_LIO->pDup2)(PL_LIO, (fd1), (fd2)) 708 #define PerlLIO_flock(fd, op) \ 709 (*PL_LIO->pFlock)(PL_LIO, (fd), (op)) 710 #define PerlLIO_fstat(fd, buf) \ 711 (*PL_LIO->pFileStat)(PL_LIO, (fd), (buf)) 712 #define PerlLIO_ioctl(fd, u, buf) \ 713 (*PL_LIO->pIOCtl)(PL_LIO, (fd), (u), (buf)) 714 #define PerlLIO_isatty(fd) \ 715 (*PL_LIO->pIsatty)(PL_LIO, (fd)) 716 #define PerlLIO_link(oldname, newname) \ 717 (*PL_LIO->pLink)(PL_LIO, (oldname), (newname)) 718 #define PerlLIO_lseek(fd, offset, mode) \ 719 (*PL_LIO->pLseek)(PL_LIO, (fd), (offset), (mode)) 720 #define PerlLIO_lstat(name, buf) \ 721 (*PL_LIO->pLstat)(PL_LIO, (name), (buf)) 722 #define PerlLIO_mktemp(file) \ 723 (*PL_LIO->pMktemp)(PL_LIO, (file)) 724 #define PerlLIO_open(file, flag) \ 725 (*PL_LIO->pOpen)(PL_LIO, (file), (flag)) 726 #define PerlLIO_open3(file, flag, perm) \ 727 (*PL_LIO->pOpen3)(PL_LIO, (file), (flag), (perm)) 728 #define PerlLIO_read(fd, buf, count) \ 729 (*PL_LIO->pRead)(PL_LIO, (fd), (buf), (count)) 730 #define PerlLIO_rename(oname, newname) \ 731 (*PL_LIO->pRename)(PL_LIO, (oname), (newname)) 732 #define PerlLIO_setmode(fd, mode) \ 733 (*PL_LIO->pSetmode)(PL_LIO, (fd), (mode)) 734 #define PerlLIO_stat(name, buf) \ 735 (*PL_LIO->pNameStat)(PL_LIO, (name), (buf)) 736 #define PerlLIO_tmpnam(str) \ 737 (*PL_LIO->pTmpnam)(PL_LIO, (str)) 738 #define PerlLIO_umask(mode) \ 739 (*PL_LIO->pUmask)(PL_LIO, (mode)) 740 #define PerlLIO_unlink(file) \ 741 (*PL_LIO->pUnlink)(PL_LIO, (file)) 742 #define PerlLIO_utime(file, time) \ 743 (*PL_LIO->pUtime)(PL_LIO, (file), (time)) 744 #define PerlLIO_write(fd, buf, count) \ 745 (*PL_LIO->pWrite)(PL_LIO, (fd), (buf), (count)) 746 747 #else /* PERL_IMPLICIT_SYS */ 748 749 #define PerlLIO_access(file, mode) access((file), (mode)) 750 #define PerlLIO_chmod(file, mode) chmod((file), (mode)) 751 #define PerlLIO_chown(file, owner, grp) chown((file), (owner), (grp)) 752 #if defined(HAS_TRUNCATE) 753 # define PerlLIO_chsize(fd, size) ftruncate((fd), (size)) 754 #elif defined(HAS_CHSIZE) 755 # define PerlLIO_chsize(fd, size) chsize((fd), (size)) 756 #else 757 # define PerlLIO_chsize(fd, size) my_chsize((fd), (size)) 758 #endif 759 #define PerlLIO_close(fd) close((fd)) 760 #define PerlLIO_dup(fd) dup((fd)) 761 #define PerlLIO_dup2(fd1, fd2) dup2((fd1), (fd2)) 762 #define PerlLIO_flock(fd, op) FLOCK((fd), (op)) 763 #define PerlLIO_fstat(fd, buf) Fstat((fd), (buf)) 764 #define PerlLIO_ioctl(fd, u, buf) ioctl((fd), (u), (buf)) 765 #define PerlLIO_isatty(fd) isatty((fd)) 766 #define PerlLIO_link(oldname, newname) link((oldname), (newname)) 767 #define PerlLIO_lseek(fd, offset, mode) lseek((fd), (offset), (mode)) 768 #define PerlLIO_stat(name, buf) Stat((name), (buf)) 769 #ifdef HAS_LSTAT 770 # define PerlLIO_lstat(name, buf) lstat((name), (buf)) 771 #else 772 # define PerlLIO_lstat(name, buf) PerlLIO_stat((name), (buf)) 773 #endif 774 #define PerlLIO_mktemp(file) mktemp((file)) 775 #define PerlLIO_open(file, flag) open((file), (flag)) 776 #define PerlLIO_open3(file, flag, perm) open((file), (flag), (perm)) 777 #define PerlLIO_read(fd, buf, count) read((fd), (buf), (count)) 778 #define PerlLIO_rename(old, new) rename((old), (new)) 779 #define PerlLIO_setmode(fd, mode) setmode((fd), (mode)) 780 #define PerlLIO_tmpnam(str) tmpnam((str)) 781 #define PerlLIO_umask(mode) umask((mode)) 782 #define PerlLIO_unlink(file) unlink((file)) 783 #define PerlLIO_utime(file, time) utime((file), (time)) 784 #define PerlLIO_write(fd, buf, count) write((fd), (buf), (count)) 785 786 #endif /* PERL_IMPLICIT_SYS */ 787 788 /* 789 Interface for perl memory allocation 790 */ 791 792 #if defined(PERL_IMPLICIT_SYS) 793 794 /* IPerlMem */ 795 struct IPerlMem; 796 struct IPerlMemInfo; 797 typedef void* (*LPMemMalloc)(struct IPerlMem*, size_t); 798 typedef void* (*LPMemRealloc)(struct IPerlMem*, void*, size_t); 799 typedef void (*LPMemFree)(struct IPerlMem*, void*); 800 typedef void* (*LPMemCalloc)(struct IPerlMem*, size_t, size_t); 801 typedef void (*LPMemGetLock)(struct IPerlMem*); 802 typedef void (*LPMemFreeLock)(struct IPerlMem*); 803 typedef int (*LPMemIsLocked)(struct IPerlMem*); 804 805 struct IPerlMem 806 { 807 LPMemMalloc pMalloc; 808 LPMemRealloc pRealloc; 809 LPMemFree pFree; 810 LPMemCalloc pCalloc; 811 LPMemGetLock pGetLock; 812 LPMemFreeLock pFreeLock; 813 LPMemIsLocked pIsLocked; 814 }; 815 816 struct IPerlMemInfo 817 { 818 unsigned long nCount; /* number of entries expected */ 819 struct IPerlMem perlMemList; 820 }; 821 822 /* Interpreter specific memory macros */ 823 #define PerlMem_malloc(size) \ 824 (*PL_Mem->pMalloc)(PL_Mem, (size)) 825 #define PerlMem_realloc(buf, size) \ 826 (*PL_Mem->pRealloc)(PL_Mem, (buf), (size)) 827 #define PerlMem_free(buf) \ 828 (*PL_Mem->pFree)(PL_Mem, (buf)) 829 #define PerlMem_calloc(num, size) \ 830 (*PL_Mem->pCalloc)(PL_Mem, (num), (size)) 831 #define PerlMem_get_lock() \ 832 (*PL_Mem->pGetLock)(PL_Mem) 833 #define PerlMem_free_lock() \ 834 (*PL_Mem->pFreeLock)(PL_Mem) 835 #define PerlMem_is_locked() \ 836 (*PL_Mem->pIsLocked)(PL_Mem) 837 838 /* Shared memory macros */ 839 #ifdef NETWARE 840 841 #define PerlMemShared_malloc(size) \ 842 (*PL_Mem->pMalloc)(PL_Mem, (size)) 843 #define PerlMemShared_realloc(buf, size) \ 844 (*PL_Mem->pRealloc)(PL_Mem, (buf), (size)) 845 #define PerlMemShared_free(buf) \ 846 (*PL_Mem->pFree)(PL_Mem, (buf)) 847 #define PerlMemShared_calloc(num, size) \ 848 (*PL_Mem->pCalloc)(PL_Mem, (num), (size)) 849 #define PerlMemShared_get_lock() \ 850 (*PL_Mem->pGetLock)(PL_Mem) 851 #define PerlMemShared_free_lock() \ 852 (*PL_Mem->pFreeLock)(PL_Mem) 853 #define PerlMemShared_is_locked() \ 854 (*PL_Mem->pIsLocked)(PL_Mem) 855 856 #else 857 858 #define PerlMemShared_malloc(size) \ 859 (*PL_MemShared->pMalloc)(PL_MemShared, (size)) 860 #define PerlMemShared_realloc(buf, size) \ 861 (*PL_MemShared->pRealloc)(PL_MemShared, (buf), (size)) 862 #define PerlMemShared_free(buf) \ 863 (*PL_MemShared->pFree)(PL_MemShared, (buf)) 864 #define PerlMemShared_calloc(num, size) \ 865 (*PL_MemShared->pCalloc)(PL_MemShared, (num), (size)) 866 #define PerlMemShared_get_lock() \ 867 (*PL_MemShared->pGetLock)(PL_MemShared) 868 #define PerlMemShared_free_lock() \ 869 (*PL_MemShared->pFreeLock)(PL_MemShared) 870 #define PerlMemShared_is_locked() \ 871 (*PL_MemShared->pIsLocked)(PL_MemShared) 872 873 #endif 874 875 /* Parse tree memory macros */ 876 #define PerlMemParse_malloc(size) \ 877 (*PL_MemParse->pMalloc)(PL_MemParse, (size)) 878 #define PerlMemParse_realloc(buf, size) \ 879 (*PL_MemParse->pRealloc)(PL_MemParse, (buf), (size)) 880 #define PerlMemParse_free(buf) \ 881 (*PL_MemParse->pFree)(PL_MemParse, (buf)) 882 #define PerlMemParse_calloc(num, size) \ 883 (*PL_MemParse->pCalloc)(PL_MemParse, (num), (size)) 884 #define PerlMemParse_get_lock() \ 885 (*PL_MemParse->pGetLock)(PL_MemParse) 886 #define PerlMemParse_free_lock() \ 887 (*PL_MemParse->pFreeLock)(PL_MemParse) 888 #define PerlMemParse_is_locked() \ 889 (*PL_MemParse->pIsLocked)(PL_MemParse) 890 891 892 #else /* PERL_IMPLICIT_SYS */ 893 894 /* Interpreter specific memory macros */ 895 #define PerlMem_malloc(size) malloc((size)) 896 #define PerlMem_realloc(buf, size) realloc((buf), (size)) 897 #define PerlMem_free(buf) free((buf)) 898 #define PerlMem_calloc(num, size) calloc((num), (size)) 899 #define PerlMem_get_lock() 900 #define PerlMem_free_lock() 901 #define PerlMem_is_locked() 0 902 903 /* Shared memory macros */ 904 #define PerlMemShared_malloc(size) malloc((size)) 905 #define PerlMemShared_realloc(buf, size) realloc((buf), (size)) 906 #define PerlMemShared_free(buf) free((buf)) 907 #define PerlMemShared_calloc(num, size) calloc((num), (size)) 908 #define PerlMemShared_get_lock() 909 #define PerlMemShared_free_lock() 910 #define PerlMemShared_is_locked() 0 911 912 /* Parse tree memory macros */ 913 #define PerlMemParse_malloc(size) malloc((size)) 914 #define PerlMemParse_realloc(buf, size) realloc((buf), (size)) 915 #define PerlMemParse_free(buf) free((buf)) 916 #define PerlMemParse_calloc(num, size) calloc((num), (size)) 917 #define PerlMemParse_get_lock() 918 #define PerlMemParse_free_lock() 919 #define PerlMemParse_is_locked() 0 920 921 #endif /* PERL_IMPLICIT_SYS */ 922 923 /* 924 Interface for perl process functions 925 */ 926 927 928 #if defined(PERL_IMPLICIT_SYS) 929 930 #ifndef jmp_buf 931 #include <setjmp.h> 932 #endif 933 934 /* IPerlProc */ 935 struct IPerlProc; 936 struct IPerlProcInfo; 937 typedef void (*LPProcAbort)(struct IPerlProc*); 938 typedef char* (*LPProcCrypt)(struct IPerlProc*, const char*, 939 const char*); 940 typedef void (*LPProcExit)(struct IPerlProc*, int) 941 __attribute__noreturn__; 942 typedef void (*LPProc_Exit)(struct IPerlProc*, int) 943 __attribute__noreturn__; 944 typedef int (*LPProcExecl)(struct IPerlProc*, const char*, 945 const char*, const char*, const char*, 946 const char*); 947 typedef int (*LPProcExecv)(struct IPerlProc*, const char*, 948 const char*const*); 949 typedef int (*LPProcExecvp)(struct IPerlProc*, const char*, 950 const char*const*); 951 typedef Uid_t (*LPProcGetuid)(struct IPerlProc*); 952 typedef Uid_t (*LPProcGeteuid)(struct IPerlProc*); 953 typedef Gid_t (*LPProcGetgid)(struct IPerlProc*); 954 typedef Gid_t (*LPProcGetegid)(struct IPerlProc*); 955 typedef char* (*LPProcGetlogin)(struct IPerlProc*); 956 typedef int (*LPProcKill)(struct IPerlProc*, int, int); 957 typedef int (*LPProcKillpg)(struct IPerlProc*, int, int); 958 typedef int (*LPProcPauseProc)(struct IPerlProc*); 959 typedef PerlIO* (*LPProcPopen)(struct IPerlProc*, const char*, 960 const char*); 961 typedef PerlIO* (*LPProcPopenList)(struct IPerlProc*, const char*, 962 IV narg, SV **args); 963 typedef int (*LPProcPclose)(struct IPerlProc*, PerlIO*); 964 typedef int (*LPProcPipe)(struct IPerlProc*, int*); 965 typedef int (*LPProcSetuid)(struct IPerlProc*, uid_t); 966 typedef int (*LPProcSetgid)(struct IPerlProc*, gid_t); 967 typedef int (*LPProcSleep)(struct IPerlProc*, unsigned int); 968 typedef int (*LPProcTimes)(struct IPerlProc*, struct tms*); 969 typedef int (*LPProcWait)(struct IPerlProc*, int*); 970 typedef int (*LPProcWaitpid)(struct IPerlProc*, int, int*, int); 971 typedef Sighandler_t (*LPProcSignal)(struct IPerlProc*, int, Sighandler_t); 972 typedef int (*LPProcFork)(struct IPerlProc*); 973 typedef int (*LPProcGetpid)(struct IPerlProc*); 974 #ifdef WIN32 975 typedef void* (*LPProcDynaLoader)(struct IPerlProc*, const char*); 976 typedef void (*LPProcGetOSError)(struct IPerlProc*, 977 SV* sv, DWORD dwErr); 978 typedef int (*LPProcSpawnvp)(struct IPerlProc*, int, const char*, 979 const char*const*); 980 #endif 981 typedef int (*LPProcLastHost)(struct IPerlProc*); 982 typedef int (*LPProcGetTimeOfDay)(struct IPerlProc*, 983 struct timeval*, void*); 984 985 struct IPerlProc 986 { 987 LPProcAbort pAbort; 988 LPProcCrypt pCrypt; 989 LPProcExit pExit; 990 LPProc_Exit p_Exit; 991 LPProcExecl pExecl; 992 LPProcExecv pExecv; 993 LPProcExecvp pExecvp; 994 LPProcGetuid pGetuid; 995 LPProcGeteuid pGeteuid; 996 LPProcGetgid pGetgid; 997 LPProcGetegid pGetegid; 998 LPProcGetlogin pGetlogin; 999 LPProcKill pKill; 1000 LPProcKillpg pKillpg; 1001 LPProcPauseProc pPauseProc; 1002 LPProcPopen pPopen; 1003 LPProcPclose pPclose; 1004 LPProcPipe pPipe; 1005 LPProcSetuid pSetuid; 1006 LPProcSetgid pSetgid; 1007 LPProcSleep pSleep; 1008 LPProcTimes pTimes; 1009 LPProcWait pWait; 1010 LPProcWaitpid pWaitpid; 1011 LPProcSignal pSignal; 1012 LPProcFork pFork; 1013 LPProcGetpid pGetpid; 1014 #ifdef WIN32 1015 LPProcDynaLoader pDynaLoader; 1016 LPProcGetOSError pGetOSError; 1017 LPProcSpawnvp pSpawnvp; 1018 #endif 1019 LPProcLastHost pLastHost; 1020 LPProcPopenList pPopenList; 1021 LPProcGetTimeOfDay pGetTimeOfDay; 1022 }; 1023 1024 struct IPerlProcInfo 1025 { 1026 unsigned long nCount; /* number of entries expected */ 1027 struct IPerlProc perlProcList; 1028 }; 1029 1030 #define PerlProc_abort() \ 1031 (*PL_Proc->pAbort)(PL_Proc) 1032 #define PerlProc_crypt(c,s) \ 1033 (*PL_Proc->pCrypt)(PL_Proc, (c), (s)) 1034 #define PerlProc_exit(s) \ 1035 (*PL_Proc->pExit)(PL_Proc, (s)) 1036 #define PerlProc__exit(s) \ 1037 (*PL_Proc->p_Exit)(PL_Proc, (s)) 1038 #define PerlProc_execl(c, w, x, y, z) \ 1039 (*PL_Proc->pExecl)(PL_Proc, (c), (w), (x), (y), (z)) 1040 #define PerlProc_execv(c, a) \ 1041 (*PL_Proc->pExecv)(PL_Proc, (c), (a)) 1042 #define PerlProc_execvp(c, a) \ 1043 (*PL_Proc->pExecvp)(PL_Proc, (c), (a)) 1044 #define PerlProc_getuid() \ 1045 (*PL_Proc->pGetuid)(PL_Proc) 1046 #define PerlProc_geteuid() \ 1047 (*PL_Proc->pGeteuid)(PL_Proc) 1048 #define PerlProc_getgid() \ 1049 (*PL_Proc->pGetgid)(PL_Proc) 1050 #define PerlProc_getegid() \ 1051 (*PL_Proc->pGetegid)(PL_Proc) 1052 #define PerlProc_getlogin() \ 1053 (*PL_Proc->pGetlogin)(PL_Proc) 1054 #define PerlProc_kill(i, a) \ 1055 (*PL_Proc->pKill)(PL_Proc, (i), (a)) 1056 #define PerlProc_killpg(i, a) \ 1057 (*PL_Proc->pKillpg)(PL_Proc, (i), (a)) 1058 #define PerlProc_pause() \ 1059 (*PL_Proc->pPauseProc)(PL_Proc) 1060 #define PerlProc_popen(c, m) \ 1061 (*PL_Proc->pPopen)(PL_Proc, (c), (m)) 1062 #define PerlProc_popen_list(m, n, a) \ 1063 (*PL_Proc->pPopenList)(PL_Proc, (m), (n), (a)) 1064 #define PerlProc_pclose(f) \ 1065 (*PL_Proc->pPclose)(PL_Proc, (f)) 1066 #define PerlProc_pipe(fd) \ 1067 (*PL_Proc->pPipe)(PL_Proc, (fd)) 1068 #define PerlProc_setuid(u) \ 1069 (*PL_Proc->pSetuid)(PL_Proc, (u)) 1070 #define PerlProc_setgid(g) \ 1071 (*PL_Proc->pSetgid)(PL_Proc, (g)) 1072 #define PerlProc_sleep(t) \ 1073 (*PL_Proc->pSleep)(PL_Proc, (t)) 1074 #define PerlProc_times(t) \ 1075 (*PL_Proc->pTimes)(PL_Proc, (t)) 1076 #define PerlProc_wait(t) \ 1077 (*PL_Proc->pWait)(PL_Proc, (t)) 1078 #define PerlProc_waitpid(p,s,f) \ 1079 (*PL_Proc->pWaitpid)(PL_Proc, (p), (s), (f)) 1080 #define PerlProc_signal(n, h) \ 1081 (*PL_Proc->pSignal)(PL_Proc, (n), (h)) 1082 #define PerlProc_fork() \ 1083 (*PL_Proc->pFork)(PL_Proc) 1084 #define PerlProc_getpid() \ 1085 (*PL_Proc->pGetpid)(PL_Proc) 1086 #define PerlProc_setjmp(b, n) Sigsetjmp((b), (n)) 1087 #define PerlProc_longjmp(b, n) Siglongjmp((b), (n)) 1088 1089 #ifdef WIN32 1090 #define PerlProc_DynaLoad(f) \ 1091 (*PL_Proc->pDynaLoader)(PL_Proc, (f)) 1092 #define PerlProc_GetOSError(s,e) \ 1093 (*PL_Proc->pGetOSError)(PL_Proc, (s), (e)) 1094 #define PerlProc_spawnvp(m, c, a) \ 1095 (*PL_Proc->pSpawnvp)(PL_Proc, (m), (c), (a)) 1096 #endif 1097 #define PerlProc_lasthost() \ 1098 (*PL_Proc->pLastHost)(PL_Proc) 1099 #define PerlProc_gettimeofday(t,z) \ 1100 (*PL_Proc->pGetTimeOfDay)(PL_Proc,(t),(z)) 1101 1102 #else /* PERL_IMPLICIT_SYS */ 1103 1104 #define PerlProc_abort() abort() 1105 #define PerlProc_crypt(c,s) crypt((c), (s)) 1106 #define PerlProc_exit(s) exit((s)) 1107 #define PerlProc__exit(s) _exit((s)) 1108 #define PerlProc_execl(c,w,x,y,z) \ 1109 execl((c), (w), (x), (y), (z)) 1110 #define PerlProc_execv(c, a) execv((c), (a)) 1111 #define PerlProc_execvp(c, a) execvp((c), (a)) 1112 #define PerlProc_getuid() getuid() 1113 #define PerlProc_geteuid() geteuid() 1114 #define PerlProc_getgid() getgid() 1115 #define PerlProc_getegid() getegid() 1116 #define PerlProc_getlogin() getlogin() 1117 #define PerlProc_kill(i, a) kill((i), (a)) 1118 #define PerlProc_killpg(i, a) killpg((i), (a)) 1119 #define PerlProc_pause() Pause() 1120 #define PerlProc_popen(c, m) my_popen((c), (m)) 1121 #define PerlProc_popen_list(m,n,a) my_popen_list((m),(n),(a)) 1122 #define PerlProc_pclose(f) my_pclose((f)) 1123 #define PerlProc_pipe(fd) pipe((fd)) 1124 #define PerlProc_setuid(u) setuid((u)) 1125 #define PerlProc_setgid(g) setgid((g)) 1126 #define PerlProc_sleep(t) sleep((t)) 1127 #define PerlProc_times(t) times((t)) 1128 #define PerlProc_wait(t) wait((t)) 1129 #define PerlProc_waitpid(p,s,f) waitpid((p), (s), (f)) 1130 #define PerlProc_setjmp(b, n) Sigsetjmp((b), (n)) 1131 #define PerlProc_longjmp(b, n) Siglongjmp((b), (n)) 1132 #define PerlProc_signal(n, h) signal((n), (h)) 1133 #define PerlProc_fork() my_fork() 1134 #define PerlProc_getpid() getpid() 1135 #define PerlProc_gettimeofday(t,z) gettimeofday((t),(z)) 1136 1137 #ifdef WIN32 1138 #define PerlProc_DynaLoad(f) \ 1139 win32_dynaload((f)) 1140 #define PerlProc_GetOSError(s,e) \ 1141 win32_str_os_error((s), (e)) 1142 #define PerlProc_spawnvp(m, c, a) \ 1143 win32_spawnvp((m), (c), (a)) 1144 #undef PerlProc_signal 1145 #define PerlProc_signal(n, h) win32_signal((n), (h)) 1146 #endif 1147 #endif /* PERL_IMPLICIT_SYS */ 1148 1149 /* 1150 Interface for perl socket functions 1151 */ 1152 1153 #if defined(PERL_IMPLICIT_SYS) 1154 1155 /* PerlSock */ 1156 struct IPerlSock; 1157 struct IPerlSockInfo; 1158 typedef u_long (*LPHtonl)(struct IPerlSock*, u_long); 1159 typedef u_short (*LPHtons)(struct IPerlSock*, u_short); 1160 typedef u_long (*LPNtohl)(struct IPerlSock*, u_long); 1161 typedef u_short (*LPNtohs)(struct IPerlSock*, u_short); 1162 typedef SOCKET (*LPAccept)(struct IPerlSock*, SOCKET, 1163 struct sockaddr*, int*); 1164 typedef int (*LPBind)(struct IPerlSock*, SOCKET, 1165 const struct sockaddr*, int); 1166 typedef int (*LPConnect)(struct IPerlSock*, SOCKET, 1167 const struct sockaddr*, int); 1168 typedef void (*LPEndhostent)(struct IPerlSock*); 1169 typedef void (*LPEndnetent)(struct IPerlSock*); 1170 typedef void (*LPEndprotoent)(struct IPerlSock*); 1171 typedef void (*LPEndservent)(struct IPerlSock*); 1172 typedef int (*LPGethostname)(struct IPerlSock*, char*, int); 1173 typedef int (*LPGetpeername)(struct IPerlSock*, SOCKET, 1174 struct sockaddr*, int*); 1175 typedef struct hostent* (*LPGethostbyaddr)(struct IPerlSock*, const char*, 1176 int, int); 1177 typedef struct hostent* (*LPGethostbyname)(struct IPerlSock*, const char*); 1178 typedef struct hostent* (*LPGethostent)(struct IPerlSock*); 1179 typedef struct netent* (*LPGetnetbyaddr)(struct IPerlSock*, long, int); 1180 typedef struct netent* (*LPGetnetbyname)(struct IPerlSock*, const char*); 1181 typedef struct netent* (*LPGetnetent)(struct IPerlSock*); 1182 typedef struct protoent*(*LPGetprotobyname)(struct IPerlSock*, const char*); 1183 typedef struct protoent*(*LPGetprotobynumber)(struct IPerlSock*, int); 1184 typedef struct protoent*(*LPGetprotoent)(struct IPerlSock*); 1185 typedef struct servent* (*LPGetservbyname)(struct IPerlSock*, const char*, 1186 const char*); 1187 typedef struct servent* (*LPGetservbyport)(struct IPerlSock*, int, 1188 const char*); 1189 typedef struct servent* (*LPGetservent)(struct IPerlSock*); 1190 typedef int (*LPGetsockname)(struct IPerlSock*, SOCKET, 1191 struct sockaddr*, int*); 1192 typedef int (*LPGetsockopt)(struct IPerlSock*, SOCKET, int, int, 1193 char*, int*); 1194 typedef unsigned long (*LPInetAddr)(struct IPerlSock*, const char*); 1195 typedef char* (*LPInetNtoa)(struct IPerlSock*, struct in_addr); 1196 typedef int (*LPListen)(struct IPerlSock*, SOCKET, int); 1197 typedef int (*LPRecv)(struct IPerlSock*, SOCKET, char*, int, int); 1198 typedef int (*LPRecvfrom)(struct IPerlSock*, SOCKET, char*, int, 1199 int, struct sockaddr*, int*); 1200 typedef int (*LPSelect)(struct IPerlSock*, int, char*, char*, 1201 char*, const struct timeval*); 1202 typedef int (*LPSend)(struct IPerlSock*, SOCKET, const char*, int, 1203 int); 1204 typedef int (*LPSendto)(struct IPerlSock*, SOCKET, const char*, 1205 int, int, const struct sockaddr*, int); 1206 typedef void (*LPSethostent)(struct IPerlSock*, int); 1207 typedef void (*LPSetnetent)(struct IPerlSock*, int); 1208 typedef void (*LPSetprotoent)(struct IPerlSock*, int); 1209 typedef void (*LPSetservent)(struct IPerlSock*, int); 1210 typedef int (*LPSetsockopt)(struct IPerlSock*, SOCKET, int, int, 1211 const char*, int); 1212 typedef int (*LPShutdown)(struct IPerlSock*, SOCKET, int); 1213 typedef SOCKET (*LPSocket)(struct IPerlSock*, int, int, int); 1214 typedef int (*LPSocketpair)(struct IPerlSock*, int, int, int, 1215 int*); 1216 #ifdef WIN32 1217 typedef int (*LPClosesocket)(struct IPerlSock*, SOCKET s); 1218 #endif 1219 1220 struct IPerlSock 1221 { 1222 LPHtonl pHtonl; 1223 LPHtons pHtons; 1224 LPNtohl pNtohl; 1225 LPNtohs pNtohs; 1226 LPAccept pAccept; 1227 LPBind pBind; 1228 LPConnect pConnect; 1229 LPEndhostent pEndhostent; 1230 LPEndnetent pEndnetent; 1231 LPEndprotoent pEndprotoent; 1232 LPEndservent pEndservent; 1233 LPGethostname pGethostname; 1234 LPGetpeername pGetpeername; 1235 LPGethostbyaddr pGethostbyaddr; 1236 LPGethostbyname pGethostbyname; 1237 LPGethostent pGethostent; 1238 LPGetnetbyaddr pGetnetbyaddr; 1239 LPGetnetbyname pGetnetbyname; 1240 LPGetnetent pGetnetent; 1241 LPGetprotobyname pGetprotobyname; 1242 LPGetprotobynumber pGetprotobynumber; 1243 LPGetprotoent pGetprotoent; 1244 LPGetservbyname pGetservbyname; 1245 LPGetservbyport pGetservbyport; 1246 LPGetservent pGetservent; 1247 LPGetsockname pGetsockname; 1248 LPGetsockopt pGetsockopt; 1249 LPInetAddr pInetAddr; 1250 LPInetNtoa pInetNtoa; 1251 LPListen pListen; 1252 LPRecv pRecv; 1253 LPRecvfrom pRecvfrom; 1254 LPSelect pSelect; 1255 LPSend pSend; 1256 LPSendto pSendto; 1257 LPSethostent pSethostent; 1258 LPSetnetent pSetnetent; 1259 LPSetprotoent pSetprotoent; 1260 LPSetservent pSetservent; 1261 LPSetsockopt pSetsockopt; 1262 LPShutdown pShutdown; 1263 LPSocket pSocket; 1264 LPSocketpair pSocketpair; 1265 #ifdef WIN32 1266 LPClosesocket pClosesocket; 1267 #endif 1268 }; 1269 1270 struct IPerlSockInfo 1271 { 1272 unsigned long nCount; /* number of entries expected */ 1273 struct IPerlSock perlSockList; 1274 }; 1275 1276 #define PerlSock_htonl(x) \ 1277 (*PL_Sock->pHtonl)(PL_Sock, x) 1278 #define PerlSock_htons(x) \ 1279 (*PL_Sock->pHtons)(PL_Sock, x) 1280 #define PerlSock_ntohl(x) \ 1281 (*PL_Sock->pNtohl)(PL_Sock, x) 1282 #define PerlSock_ntohs(x) \ 1283 (*PL_Sock->pNtohs)(PL_Sock, x) 1284 #define PerlSock_accept(s, a, l) \ 1285 (*PL_Sock->pAccept)(PL_Sock, s, a, l) 1286 #define PerlSock_bind(s, n, l) \ 1287 (*PL_Sock->pBind)(PL_Sock, s, n, l) 1288 #define PerlSock_connect(s, n, l) \ 1289 (*PL_Sock->pConnect)(PL_Sock, s, n, l) 1290 #define PerlSock_endhostent() \ 1291 (*PL_Sock->pEndhostent)(PL_Sock) 1292 #define PerlSock_endnetent() \ 1293 (*PL_Sock->pEndnetent)(PL_Sock) 1294 #define PerlSock_endprotoent() \ 1295 (*PL_Sock->pEndprotoent)(PL_Sock) 1296 #define PerlSock_endservent() \ 1297 (*PL_Sock->pEndservent)(PL_Sock) 1298 #define PerlSock_gethostbyaddr(a, l, t) \ 1299 (*PL_Sock->pGethostbyaddr)(PL_Sock, a, l, t) 1300 #define PerlSock_gethostbyname(n) \ 1301 (*PL_Sock->pGethostbyname)(PL_Sock, n) 1302 #define PerlSock_gethostent() \ 1303 (*PL_Sock->pGethostent)(PL_Sock) 1304 #define PerlSock_gethostname(n, l) \ 1305 (*PL_Sock->pGethostname)(PL_Sock, n, l) 1306 #define PerlSock_getnetbyaddr(n, t) \ 1307 (*PL_Sock->pGetnetbyaddr)(PL_Sock, n, t) 1308 #define PerlSock_getnetbyname(c) \ 1309 (*PL_Sock->pGetnetbyname)(PL_Sock, c) 1310 #define PerlSock_getnetent() \ 1311 (*PL_Sock->pGetnetent)(PL_Sock) 1312 #define PerlSock_getpeername(s, n, l) \ 1313 (*PL_Sock->pGetpeername)(PL_Sock, s, n, l) 1314 #define PerlSock_getprotobyname(n) \ 1315 (*PL_Sock->pGetprotobyname)(PL_Sock, n) 1316 #define PerlSock_getprotobynumber(n) \ 1317 (*PL_Sock->pGetprotobynumber)(PL_Sock, n) 1318 #define PerlSock_getprotoent() \ 1319 (*PL_Sock->pGetprotoent)(PL_Sock) 1320 #define PerlSock_getservbyname(n, p) \ 1321 (*PL_Sock->pGetservbyname)(PL_Sock, n, p) 1322 #define PerlSock_getservbyport(port, p) \ 1323 (*PL_Sock->pGetservbyport)(PL_Sock, port, p) 1324 #define PerlSock_getservent() \ 1325 (*PL_Sock->pGetservent)(PL_Sock) 1326 #define PerlSock_getsockname(s, n, l) \ 1327 (*PL_Sock->pGetsockname)(PL_Sock, s, n, l) 1328 #define PerlSock_getsockopt(s,l,n,v,i) \ 1329 (*PL_Sock->pGetsockopt)(PL_Sock, s, l, n, v, i) 1330 #define PerlSock_inet_addr(c) \ 1331 (*PL_Sock->pInetAddr)(PL_Sock, c) 1332 #define PerlSock_inet_ntoa(i) \ 1333 (*PL_Sock->pInetNtoa)(PL_Sock, i) 1334 #define PerlSock_listen(s, b) \ 1335 (*PL_Sock->pListen)(PL_Sock, s, b) 1336 #define PerlSock_recv(s, b, l, f) \ 1337 (*PL_Sock->pRecv)(PL_Sock, s, b, l, f) 1338 #define PerlSock_recvfrom(s,b,l,f,from,fromlen) \ 1339 (*PL_Sock->pRecvfrom)(PL_Sock, s, b, l, f, from, fromlen) 1340 #define PerlSock_select(n, r, w, e, t) \ 1341 (*PL_Sock->pSelect)(PL_Sock, n, (char*)r, (char*)w, (char*)e, t) 1342 #define PerlSock_send(s, b, l, f) \ 1343 (*PL_Sock->pSend)(PL_Sock, s, b, l, f) 1344 #define PerlSock_sendto(s, b, l, f, t, tlen) \ 1345 (*PL_Sock->pSendto)(PL_Sock, s, b, l, f, t, tlen) 1346 #define PerlSock_sethostent(f) \ 1347 (*PL_Sock->pSethostent)(PL_Sock, f) 1348 #define PerlSock_setnetent(f) \ 1349 (*PL_Sock->pSetnetent)(PL_Sock, f) 1350 #define PerlSock_setprotoent(f) \ 1351 (*PL_Sock->pSetprotoent)(PL_Sock, f) 1352 #define PerlSock_setservent(f) \ 1353 (*PL_Sock->pSetservent)(PL_Sock, f) 1354 #define PerlSock_setsockopt(s, l, n, v, len) \ 1355 (*PL_Sock->pSetsockopt)(PL_Sock, s, l, n, v, len) 1356 #define PerlSock_shutdown(s, h) \ 1357 (*PL_Sock->pShutdown)(PL_Sock, s, h) 1358 #define PerlSock_socket(a, t, p) \ 1359 (*PL_Sock->pSocket)(PL_Sock, a, t, p) 1360 #define PerlSock_socketpair(a, t, p, f) \ 1361 (*PL_Sock->pSocketpair)(PL_Sock, a, t, p, f) 1362 1363 #ifdef WIN32 1364 #define PerlSock_closesocket(s) \ 1365 (*PL_Sock->pClosesocket)(PL_Sock, s) 1366 #endif 1367 1368 #else /* PERL_IMPLICIT_SYS */ 1369 1370 #define PerlSock_htonl(x) htonl(x) 1371 #define PerlSock_htons(x) htons(x) 1372 #define PerlSock_ntohl(x) ntohl(x) 1373 #define PerlSock_ntohs(x) ntohs(x) 1374 #define PerlSock_accept(s, a, l) accept(s, a, l) 1375 #define PerlSock_bind(s, n, l) bind(s, n, l) 1376 #define PerlSock_connect(s, n, l) connect(s, n, l) 1377 1378 #define PerlSock_gethostbyaddr(a, l, t) gethostbyaddr(a, l, t) 1379 #define PerlSock_gethostbyname(n) gethostbyname(n) 1380 #define PerlSock_gethostent gethostent 1381 #define PerlSock_endhostent endhostent 1382 #define PerlSock_gethostname(n, l) gethostname(n, l) 1383 1384 #define PerlSock_getnetbyaddr(n, t) getnetbyaddr(n, t) 1385 #define PerlSock_getnetbyname(n) getnetbyname(n) 1386 #define PerlSock_getnetent getnetent 1387 #define PerlSock_endnetent endnetent 1388 #define PerlSock_getpeername(s, n, l) getpeername(s, n, l) 1389 1390 #define PerlSock_getprotobyname(n) getprotobyname(n) 1391 #define PerlSock_getprotobynumber(n) getprotobynumber(n) 1392 #define PerlSock_getprotoent getprotoent 1393 #define PerlSock_endprotoent endprotoent 1394 1395 #define PerlSock_getservbyname(n, p) getservbyname(n, p) 1396 #define PerlSock_getservbyport(port, p) getservbyport(port, p) 1397 #define PerlSock_getservent getservent 1398 #define PerlSock_endservent endservent 1399 1400 #define PerlSock_getsockname(s, n, l) getsockname(s, n, l) 1401 #define PerlSock_getsockopt(s,l,n,v,i) getsockopt(s, l, n, v, i) 1402 #define PerlSock_inet_addr(c) inet_addr(c) 1403 #define PerlSock_inet_ntoa(i) inet_ntoa(i) 1404 #define PerlSock_listen(s, b) listen(s, b) 1405 #define PerlSock_recv(s, b, l, f) recv(s, b, l, f) 1406 #define PerlSock_recvfrom(s, b, l, f, from, fromlen) \ 1407 recvfrom(s, b, l, f, from, fromlen) 1408 #define PerlSock_select(n, r, w, e, t) select(n, r, w, e, t) 1409 #define PerlSock_send(s, b, l, f) send(s, b, l, f) 1410 #define PerlSock_sendto(s, b, l, f, t, tlen) \ 1411 sendto(s, b, l, f, t, tlen) 1412 #define PerlSock_sethostent(f) sethostent(f) 1413 #define PerlSock_setnetent(f) setnetent(f) 1414 #define PerlSock_setprotoent(f) setprotoent(f) 1415 #define PerlSock_setservent(f) setservent(f) 1416 #define PerlSock_setsockopt(s, l, n, v, len) \ 1417 setsockopt(s, l, n, v, len) 1418 #define PerlSock_shutdown(s, h) shutdown(s, h) 1419 #define PerlSock_socket(a, t, p) socket(a, t, p) 1420 #define PerlSock_socketpair(a, t, p, f) socketpair(a, t, p, f) 1421 1422 #ifdef WIN32 1423 #define PerlSock_closesocket(s) closesocket(s) 1424 #endif 1425 1426 #endif /* PERL_IMPLICIT_SYS */ 1427 1428 #endif /* __Inc__IPerl___ */ 1429 1430 /* 1431 * ex: set ts=8 sts=4 sw=4 et: 1432 */ 1433