home *** CD-ROM | disk | FTP | other *** search
/ Netrunner 2004 October / NETRUNNER0410.ISO / regular / ActivePerl-5.8.4.810-MSWin32-x86.msi / _35528cdde35e069becb4dc7a1d0a809f < prev    next >
Encoding:
Text File  |  2004-06-01  |  15.7 KB  |  569 lines

  1. /* WIN32.H
  2.  *
  3.  * (c) 1995 Microsoft Corporation. All rights reserved.
  4.  *         Developed by hip communications inc., http://info.hip.com/info/
  5.  *
  6.  *    You may distribute under the terms of either the GNU General Public
  7.  *    License or the Artistic License, as specified in the README file.
  8.  */
  9. #ifndef  _INC_WIN32_PERL5
  10. #define  _INC_WIN32_PERL5
  11.  
  12. #include "BuildInfo.h"
  13.  
  14. #ifndef _WIN32_WINNT
  15. #  define _WIN32_WINNT 0x0400     /* needed for TryEnterCriticalSection() etc. */
  16. #endif
  17.  
  18. #if defined(PERL_IMPLICIT_SYS)
  19. #  define DYNAMIC_ENV_FETCH
  20. #  define HAS_GETENV_LEN
  21. #  define prime_env_iter()
  22. #  define WIN32IO_IS_STDIO        /* don't pull in custom stdio layer */
  23. #  define WIN32SCK_IS_STDSCK        /* don't pull in custom wsock layer */
  24. #  ifdef PERL_GLOBAL_STRUCT
  25. #    error PERL_GLOBAL_STRUCT cannot be defined with PERL_IMPLICIT_SYS
  26. #  endif
  27. #  define win32_get_privlib PerlEnv_lib_path
  28. #  define win32_get_sitelib PerlEnv_sitelib_path
  29. #  define win32_get_vendorlib PerlEnv_vendorlib_path
  30. #endif
  31.  
  32. #ifdef __GNUC__
  33. #  ifndef __int64        /* some versions seem to #define it already */
  34. #    define __int64 long long
  35. #  endif
  36. #  define Win32_Winsock
  37. #ifdef __cplusplus
  38. /* Mingw32 gcc -xc++ objects to __attribute((unused)) at least */
  39. #undef  PERL_UNUSED_DECL
  40. #define PERL_UNUSED_DECL
  41. #endif
  42. #endif
  43.  
  44.  
  45. /* Define DllExport akin to perl's EXT,
  46.  * If we are in the DLL or mimicing the DLL for Win95 work round
  47.  * then Export the symbol,
  48.  * otherwise import it.
  49.  */
  50.  
  51. /* now even GCC supports __declspec() */
  52.  
  53. #if defined(PERLDLL) || defined(WIN95FIX)
  54. #define DllExport
  55. /*#define DllExport __declspec(dllexport)*/    /* noises with VC5+sp3 */
  56. #else
  57. #define DllExport __declspec(dllimport)
  58. #endif
  59.  
  60. #define  WIN32_LEAN_AND_MEAN
  61. #include <windows.h>
  62.  
  63. #ifdef   WIN32_LEAN_AND_MEAN        /* C file is NOT a Perl5 original. */
  64. #define  CONTEXT    PERL_CONTEXT    /* Avoid conflict of CONTEXT defs. */
  65. #endif /*WIN32_LEAN_AND_MEAN */
  66.  
  67. #ifndef TLS_OUT_OF_INDEXES
  68. #define TLS_OUT_OF_INDEXES (DWORD)0xFFFFFFFF
  69. #endif
  70.  
  71. #include <dirent.h>
  72. #include <io.h>
  73. #include <process.h>
  74. #include <stdio.h>
  75. #include <direct.h>
  76. #include <stdlib.h>
  77. #include <stddef.h>
  78. #include <fcntl.h>
  79. #ifndef EXT
  80. #include "EXTERN.h"
  81. #endif
  82.  
  83. struct tms {
  84.     long    tms_utime;
  85.     long    tms_stime;
  86.     long    tms_cutime;
  87.     long    tms_cstime;
  88. };
  89.  
  90. #ifndef SYS_NMLN
  91. #define SYS_NMLN    257
  92. #endif
  93.  
  94. struct utsname {
  95.     char sysname[SYS_NMLN];
  96.     char nodename[SYS_NMLN];
  97.     char release[SYS_NMLN];
  98.     char version[SYS_NMLN];
  99.     char machine[SYS_NMLN];
  100. };
  101.  
  102. #ifndef START_EXTERN_C
  103. #undef EXTERN_C
  104. #ifdef __cplusplus
  105. #  define START_EXTERN_C extern "C" {
  106. #  define END_EXTERN_C }
  107. #  define EXTERN_C extern "C"
  108. #else
  109. #  define START_EXTERN_C
  110. #  define END_EXTERN_C
  111. #  define EXTERN_C
  112. #endif
  113. #endif
  114.  
  115. #define  STANDARD_C    1
  116. #define  DOSISH        1        /* no escaping our roots */
  117. #define  OP_BINARY    O_BINARY    /* mistake in in pp_sys.c? */
  118.  
  119. /* Define USE_SOCKETS_AS_HANDLES to enable emulation of windows sockets as
  120.  * real filehandles. XXX Should always be defined (the other version is untested) */
  121. #define USE_SOCKETS_AS_HANDLES
  122.  
  123. /* read() and write() aren't transparent for socket handles */
  124. #define PERL_SOCK_SYSREAD_IS_RECV
  125. #define PERL_SOCK_SYSWRITE_IS_SEND
  126.  
  127. #define PERL_NO_FORCE_LINK        /* no need for PL_force_link_funcs */
  128.  
  129. /* Define USE_FIXED_OSFHANDLE to fix MSVCRT's _open_osfhandle() on W95.
  130.    It now uses some black magic to work seamlessly with the DLL CRT and
  131.    works with MSVC++ 4.0+ or GCC/Mingw32
  132.     -- BKS 1-24-2000 */
  133. #if (defined(_M_IX86) && _MSC_VER >= 1000) || defined(__MINGW32__)
  134. #define USE_FIXED_OSFHANDLE
  135. #endif
  136.  
  137. /* Define PERL_WIN32_SOCK_DLOAD to have Perl dynamically load the winsock
  138.    DLL when needed. Don't use if your compiler supports delayloading (ie, VC++ 6.0)
  139.     -- BKS 5-29-2000 */
  140. #if !(defined(_M_IX86) && _MSC_VER >= 1200)
  141. #define PERL_WIN32_SOCK_DLOAD
  142. #endif
  143. #define ENV_IS_CASELESS
  144.  
  145. #define PIPESOCK_MODE    "b"        /* pipes, sockets default to binmode */
  146.  
  147. #ifndef VER_PLATFORM_WIN32_WINDOWS    /* VC-2.0 headers don't have this */
  148. #define VER_PLATFORM_WIN32_WINDOWS    1
  149. #endif
  150.  
  151. #ifndef FILE_SHARE_DELETE        /* VC-4.0 headers don't have this */
  152. #define FILE_SHARE_DELETE        0x00000004
  153. #endif
  154.  
  155. /* access() mode bits */
  156. #ifndef R_OK
  157. #  define    R_OK    4
  158. #  define    W_OK    2
  159. #  define    X_OK    1
  160. #  define    F_OK    0
  161. #endif
  162.  
  163. /* for waitpid() */
  164. #ifndef WNOHANG
  165. #  define WNOHANG    1
  166. #endif
  167.  
  168. #define PERL_GET_CONTEXT_DEFINED
  169.  
  170. /* Compiler-specific stuff. */
  171.  
  172. #ifdef __BORLANDC__        /* Borland C++ */
  173.  
  174. #if (__BORLANDC__ <= 0x520)
  175. #define _access access
  176. #define _chdir chdir
  177. #endif
  178.  
  179. #define _getpid getpid
  180. #define wcsicmp _wcsicmp
  181. #include <sys/types.h>
  182.  
  183. #ifndef DllMain
  184. #define DllMain DllEntryPoint
  185. #endif
  186.  
  187. #pragma warn -ccc    /* "condition is always true/false" */
  188. #pragma warn -rch    /* "unreachable code" */
  189. #pragma warn -sig    /* "conversion may lose significant digits" */
  190. #pragma warn -pia    /* "possibly incorrect assignment" */
  191. #pragma warn -par    /* "parameter 'foo' is never used" */
  192. #pragma warn -aus    /* "'foo' is assigned a value that is never used" */
  193. #pragma warn -use    /* "'foo' is declared but never used" */
  194. #pragma warn -csu    /* "comparing signed and unsigned values" */
  195.  
  196. /* Borland C thinks that a pointer to a member variable is 12 bytes in size. */
  197. #define PERL_MEMBER_PTR_SIZE    12
  198.  
  199. #define isnan        _isnan
  200.  
  201. #endif
  202.  
  203. #ifdef _MSC_VER            /* Microsoft Visual C++ */
  204.  
  205. typedef long        uid_t;
  206. typedef long        gid_t;
  207. typedef unsigned short    mode_t;
  208. #pragma  warning(disable: 4102)    /* "unreferenced label" */
  209.  
  210. /* Visual C thinks that a pointer to a member variable is 16 bytes in size. */
  211. #define PERL_MEMBER_PTR_SIZE    16
  212.  
  213. #define isnan        _isnan
  214.  
  215. #endif /* _MSC_VER */
  216.  
  217. #ifdef __MINGW32__        /* Minimal Gnu-Win32 */
  218.  
  219. typedef long        uid_t;
  220. typedef long        gid_t;
  221. #ifndef _environ
  222. #define _environ    environ
  223. #endif
  224. #define flushall    _flushall
  225. #define fcloseall    _fcloseall
  226. #define isnan        _isnan    /* ...same libraries as MSVC */
  227.  
  228. #ifndef _O_NOINHERIT
  229. #  define _O_NOINHERIT    0x0080
  230. #  ifndef _NO_OLDNAMES
  231. #    define O_NOINHERIT    _O_NOINHERIT
  232. #  endif
  233. #endif
  234.  
  235. #endif /* __MINGW32__ */
  236.  
  237. /* both GCC/Mingw32 and MSVC++ 4.0 are missing this, so we put it here */
  238. #ifndef CP_UTF8
  239. #  define CP_UTF8    65001
  240. #endif
  241.  
  242. /* compatibility stuff for other compilers goes here */
  243.  
  244. #ifndef _INTPTR_T_DEFINED
  245. typedef int        intptr_t;
  246. #  define _INTPTR_T_DEFINED
  247. #endif
  248.  
  249. #ifndef _UINTPTR_T_DEFINED
  250. typedef unsigned int    uintptr_t;
  251. #  define _UINTPTR_T_DEFINED
  252. #endif
  253.  
  254. START_EXTERN_C
  255.  
  256. /* For UNIX compatibility. */
  257.  
  258. extern  uid_t    getuid(void);
  259. extern  gid_t    getgid(void);
  260. extern  uid_t    geteuid(void);
  261. extern  gid_t    getegid(void);
  262. extern  int    setuid(uid_t uid);
  263. extern  int    setgid(gid_t gid);
  264. extern  int    kill(int pid, int sig);
  265. #ifndef USE_PERL_SBRK
  266. extern  void    *sbrk(ptrdiff_t need);
  267. #  define HAS_SBRK_PROTO
  268. #endif
  269. extern    char *    getlogin(void);
  270. extern    int    chown(const char *p, uid_t o, gid_t g);
  271. extern  int    mkstemp(const char *path);
  272.  
  273. #undef     Stat
  274. #define  Stat        win32_stat
  275.  
  276. #undef   init_os_extras
  277. #define  init_os_extras Perl_init_os_extras
  278.  
  279. DllExport void        Perl_win32_init(int *argcp, char ***argvp);
  280. DllExport void        Perl_win32_term(void);
  281. DllExport void        Perl_init_os_extras(void);
  282. DllExport void        win32_str_os_error(void *sv, DWORD err);
  283. DllExport int        RunPerl(int argc, char **argv, char **env);
  284.  
  285. typedef struct {
  286.     HANDLE    childStdIn;
  287.     HANDLE    childStdOut;
  288.     HANDLE    childStdErr;
  289.     /*
  290.      * the following correspond to the fields of the same name
  291.      * in the STARTUPINFO structure. Embedders can use these to
  292.      * control the spawning process' look.
  293.      * Example - to hide the window of the spawned process:
  294.      *    dwFlags = STARTF_USESHOWWINDOW;
  295.      *      wShowWindow = SW_HIDE;
  296.      */
  297.     DWORD    dwFlags;
  298.     DWORD    dwX;
  299.     DWORD    dwY;
  300.     DWORD    dwXSize;
  301.     DWORD    dwYSize;
  302.     DWORD    dwXCountChars;
  303.     DWORD    dwYCountChars;
  304.     DWORD    dwFillAttribute;
  305.     WORD    wShowWindow;
  306. } child_IO_table;
  307.  
  308. DllExport void        win32_get_child_IO(child_IO_table* ptr);
  309.  
  310. #ifndef USE_SOCKETS_AS_HANDLES
  311. extern FILE *        my_fdopen(int, char *);
  312. #endif
  313. extern int        my_fclose(FILE *);
  314. extern int        my_fstat(int fd, Stat_t *sbufptr);
  315. extern char *        win32_get_privlib(const char *pl);
  316. extern char *        win32_get_sitelib(const char *pl);
  317. extern char *        win32_get_vendorlib(const char *pl);
  318. extern int        IsWin95(void);
  319. extern int        IsWinNT(void);
  320. extern void        win32_argv2utf8(int argc, char** argv);
  321.  
  322. #ifdef PERL_IMPLICIT_SYS
  323. extern void        win32_delete_internal_host(void *h);
  324. #endif
  325.  
  326. extern char *        staticlinkmodules[];
  327.  
  328. END_EXTERN_C
  329.  
  330. typedef  char *        caddr_t;    /* In malloc.c (core address). */
  331.  
  332. /*
  333.  * handle socket stuff, assuming socket is always available
  334.  */
  335. #include <sys/socket.h>
  336. #include <netdb.h>
  337.  
  338. #ifdef MYMALLOC
  339. #define EMBEDMYMALLOC    /**/
  340. /* #define USE_PERL_SBRK    /**/
  341. /* #define PERL_SBRK_VIA_MALLOC    /**/
  342. #endif
  343.  
  344. #if defined(PERLDLL) && !defined(PERL_CORE)
  345. #define PERL_CORE
  346. #endif
  347.  
  348. #ifdef PERL_TEXTMODE_SCRIPTS
  349. #  define PERL_SCRIPT_MODE        "r"
  350. #else
  351. #  define PERL_SCRIPT_MODE        "rb"
  352. #endif
  353.  
  354. /*
  355.  * Now Win32 specific per-thread data stuff
  356.  */
  357.  
  358. struct thread_intern {
  359.     /* XXX can probably use one buffer instead of several */
  360.     char        Wstrerror_buffer[512];
  361.     struct servent    Wservent;
  362.     char        Wgetlogin_buffer[128];
  363. #    ifdef USE_SOCKETS_AS_HANDLES
  364.     int            Winit_socktype;
  365. #    endif
  366. #    ifdef HAVE_DES_FCRYPT
  367.     char        Wcrypt_buffer[30];
  368. #    endif
  369. #    ifdef USE_RTL_THREAD_API
  370.     void *        retv;    /* slot for thread return value */
  371. #    endif
  372.     BOOL               Wuse_showwindow;
  373.     WORD               Wshowwindow;
  374. };
  375.  
  376. #ifdef USE_5005THREADS
  377. #  ifndef USE_DECLSPEC_THREAD
  378. #    define HAVE_THREAD_INTERN
  379. #  endif /* !USE_DECLSPEC_THREAD */
  380. #endif /* USE_5005THREADS */
  381.  
  382. #define HAVE_INTERP_INTERN
  383. typedef struct {
  384.     long    num;
  385.     DWORD    pids[MAXIMUM_WAIT_OBJECTS];
  386.     HANDLE    handles[MAXIMUM_WAIT_OBJECTS];
  387. } child_tab;
  388.  
  389. #ifndef Sighandler_t
  390. typedef Signal_t (*Sighandler_t) (int);
  391. #define Sighandler_t    Sighandler_t
  392. #endif
  393.  
  394. struct interp_intern {
  395.     char *    perlshell_tokens;
  396.     char **    perlshell_vec;
  397.     long    perlshell_items;
  398.     struct av *    fdpid;
  399.     child_tab *    children;
  400. #ifdef USE_ITHREADS
  401.     DWORD    pseudo_id;
  402.     child_tab *    pseudo_children;
  403. #endif
  404.     void *    internal_host;
  405. #ifndef USE_5005THREADS
  406.     struct thread_intern    thr_intern;
  407. #endif
  408.     UINT    timerid;
  409.     unsigned     poll_count;
  410.     Sighandler_t sigtable[SIG_SIZE];
  411. };
  412.  
  413. DllExport int win32_async_check(pTHX);
  414.  
  415. #define WIN32_POLL_INTERVAL 32768
  416. #define PERL_ASYNC_CHECK() if (w32_do_async || PL_sig_pending) win32_async_check(aTHX)
  417.  
  418. #define w32_perlshell_tokens    (PL_sys_intern.perlshell_tokens)
  419. #define w32_perlshell_vec    (PL_sys_intern.perlshell_vec)
  420. #define w32_perlshell_items    (PL_sys_intern.perlshell_items)
  421. #define w32_fdpid        (PL_sys_intern.fdpid)
  422. #define w32_children        (PL_sys_intern.children)
  423. #define w32_num_children    (w32_children->num)
  424. #define w32_child_pids        (w32_children->pids)
  425. #define w32_child_handles    (w32_children->handles)
  426. #define w32_pseudo_id        (PL_sys_intern.pseudo_id)
  427. #define w32_pseudo_children    (PL_sys_intern.pseudo_children)
  428. #define w32_num_pseudo_children        (w32_pseudo_children->num)
  429. #define w32_pseudo_child_pids        (w32_pseudo_children->pids)
  430. #define w32_pseudo_child_handles    (w32_pseudo_children->handles)
  431. #define w32_internal_host        (PL_sys_intern.internal_host)
  432. #define w32_timerid            (PL_sys_intern.timerid)
  433. #define w32_sighandler            (PL_sys_intern.sigtable)
  434. #define w32_poll_count            (PL_sys_intern.poll_count)
  435. #define w32_do_async            (w32_poll_count++ > WIN32_POLL_INTERVAL)
  436. #ifdef USE_5005THREADS
  437. #  define w32_strerror_buffer    (thr->i.Wstrerror_buffer)
  438. #  define w32_getlogin_buffer    (thr->i.Wgetlogin_buffer)
  439. #  define w32_crypt_buffer    (thr->i.Wcrypt_buffer)
  440. #  define w32_servent        (thr->i.Wservent)
  441. #  define w32_init_socktype    (thr->i.Winit_socktype)
  442. #  define w32_use_showwindow    (thr->i.Wuse_showwindow)
  443. #  define w32_showwindow    (thr->i.Wshowwindow)
  444. #else
  445. #  define w32_strerror_buffer    (PL_sys_intern.thr_intern.Wstrerror_buffer)
  446. #  define w32_getlogin_buffer    (PL_sys_intern.thr_intern.Wgetlogin_buffer)
  447. #  define w32_crypt_buffer    (PL_sys_intern.thr_intern.Wcrypt_buffer)
  448. #  define w32_servent        (PL_sys_intern.thr_intern.Wservent)
  449. #  define w32_init_socktype    (PL_sys_intern.thr_intern.Winit_socktype)
  450. #  define w32_use_showwindow    (PL_sys_intern.thr_intern.Wuse_showwindow)
  451. #  define w32_showwindow    (PL_sys_intern.thr_intern.Wshowwindow)
  452. #endif /* USE_5005THREADS */
  453.  
  454. /* UNICODE<>ANSI translation helpers */
  455. /* Use CP_ACP when mode is ANSI */
  456. /* Use CP_UTF8 when mode is UTF8 */
  457.  
  458. #define A2WHELPER_LEN(lpa, alen, lpw, nBytes)\
  459.     (lpw[0] = 0, MultiByteToWideChar((IN_BYTES) ? CP_ACP : CP_UTF8, 0, \
  460.                     lpa, alen, lpw, (nBytes/sizeof(WCHAR))))
  461. #define A2WHELPER(lpa, lpw, nBytes)    A2WHELPER_LEN(lpa, -1, lpw, nBytes)
  462.  
  463. #define W2AHELPER_LEN(lpw, wlen, lpa, nChars)\
  464.     (lpa[0] = '\0', WideCharToMultiByte((IN_BYTES) ? CP_ACP : CP_UTF8, 0, \
  465.                        lpw, wlen, (LPSTR)lpa, nChars,NULL,NULL))
  466. #define W2AHELPER(lpw, lpa, nChars)    W2AHELPER_LEN(lpw, -1, lpa, nChars)
  467.  
  468. #define USING_WIDE() (0)
  469.  
  470. #ifdef USE_ITHREADS
  471. #  define PERL_WAIT_FOR_CHILDREN \
  472.     STMT_START {                            \
  473.     if (w32_pseudo_children && w32_num_pseudo_children) {        \
  474.         long children = w32_num_pseudo_children;            \
  475.         WaitForMultipleObjects(children,                \
  476.                    w32_pseudo_child_handles,        \
  477.                    TRUE, INFINITE);            \
  478.         while (children)                        \
  479.         CloseHandle(w32_pseudo_child_handles[--children]);    \
  480.     }                                \
  481.     } STMT_END
  482. #endif
  483.  
  484. #if defined(USE_FIXED_OSFHANDLE) || defined(PERL_MSVCRT_READFIX)
  485. #ifdef PERL_CORE
  486.  
  487. /* C doesn't like repeat struct definitions */
  488. #if defined(__MINGW32__) && (__MINGW32_MAJOR_VERSION>=3)
  489. #undef _CRTIMP
  490. #endif
  491. #ifndef _CRTIMP
  492. #define _CRTIMP __declspec(dllimport)
  493. #endif
  494.  
  495. /*
  496.  * Control structure for lowio file handles
  497.  */
  498. typedef struct {
  499.     intptr_t osfhnd;/* underlying OS file HANDLE */
  500.     char osfile;    /* attributes of file (e.g., open in text mode?) */
  501.     char pipech;    /* one char buffer for handles opened on pipes */
  502.     int lockinitflag;
  503.     CRITICAL_SECTION lock;
  504. } ioinfo;
  505.  
  506.  
  507. /*
  508.  * Array of arrays of control structures for lowio files.
  509.  */
  510. EXTERN_C _CRTIMP ioinfo* __pioinfo[];
  511.  
  512. /*
  513.  * Definition of IOINFO_L2E, the log base 2 of the number of elements in each
  514.  * array of ioinfo structs.
  515.  */
  516. #define IOINFO_L2E        5
  517.  
  518. /*
  519.  * Definition of IOINFO_ARRAY_ELTS, the number of elements in ioinfo array
  520.  */
  521. #define IOINFO_ARRAY_ELTS   (1 << IOINFO_L2E)
  522.  
  523. /*
  524.  * Access macros for getting at an ioinfo struct and its fields from a
  525.  * file handle
  526.  */
  527. #define _pioinfo(i) (__pioinfo[(i) >> IOINFO_L2E] + ((i) & (IOINFO_ARRAY_ELTS - 1)))
  528. #define _osfhnd(i)  (_pioinfo(i)->osfhnd)
  529. #define _osfile(i)  (_pioinfo(i)->osfile)
  530. #define _pipech(i)  (_pioinfo(i)->pipech)
  531.  
  532. /* since we are not doing a dup2(), this works fine */
  533. #define _set_osfhnd(fh, osfh) (void)(_osfhnd(fh) = (intptr_t)osfh)
  534. #endif
  535. #endif
  536.  
  537. /* IO.xs and POSIX.xs define PERLIO_NOT_STDIO to 1 */
  538. #if defined(PERL_EXT_IO) || defined(PERL_EXT_POSIX)
  539. #undef  PERLIO_NOT_STDIO
  540. #endif
  541. #define PERLIO_NOT_STDIO 0
  542.  
  543. #include "perlio.h"
  544.  
  545. /*
  546.  * This provides a layer of functions and macros to ensure extensions will
  547.  * get to use the same RTL functions as the core.
  548.  */
  549. #include "win32iop.h"
  550.  
  551. #define EXEC_ARGV_CAST(x) ((const char *const *) x)
  552.  
  553. #if !defined(ECONNABORTED) && defined(WSAECONNABORTED)
  554. #define ECONNABORTED WSAECONNABORTED
  555. #endif
  556. #if !defined(ECONNRESET) && defined(WSAECONNRESET)
  557. #define ECONNRESET WSAECONNRESET
  558. #endif
  559. #if !defined(EAFNOSUPPORT) && defined(WSAEAFNOSUPPORT)
  560. #define EAFNOSUPPORT WSAEAFNOSUPPORT
  561. #endif
  562. /* Why not needed for ECONNREFUSED? --abe */
  563.  
  564. DllExport void *win32_signal_context(void);
  565. #define PERL_GET_SIG_CONTEXT win32_signal_context()
  566.  
  567. #endif /* _INC_WIN32_PERL5 */
  568.  
  569.