diff options
author | Norbert Preining <norbert@preining.info> | 2024-03-15 03:06:35 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2024-03-15 03:06:35 +0000 |
commit | 12679ab7d3c2a210f4123163671b532b8b55d5f9 (patch) | |
tree | 0060d13467186ad977f4e73488ee20dd6c0017ab /systems/texlive/tlnet/tlpkg/tlperl/lib/CORE/win32.h | |
parent | 62170822e034fdd3f81de7274835d0d3b0467100 (diff) |
CTAN sync 202403150306
Diffstat (limited to 'systems/texlive/tlnet/tlpkg/tlperl/lib/CORE/win32.h')
-rw-r--r-- | systems/texlive/tlnet/tlpkg/tlperl/lib/CORE/win32.h | 173 |
1 files changed, 18 insertions, 155 deletions
diff --git a/systems/texlive/tlnet/tlpkg/tlperl/lib/CORE/win32.h b/systems/texlive/tlnet/tlpkg/tlperl/lib/CORE/win32.h index 6d5e186204..211c55ce7e 100644 --- a/systems/texlive/tlnet/tlpkg/tlperl/lib/CORE/win32.h +++ b/systems/texlive/tlnet/tlpkg/tlperl/lib/CORE/win32.h @@ -15,49 +15,19 @@ /* Win32 only optimizations for faster building */ #ifdef PERL_IS_MINIPERL -/* this macro will remove Winsock only on miniperl, PERL_IMPLICIT_SYS and - * makedef.pl create dependencies that will keep Winsock linked in even with - * this macro defined, even though sockets will be umimplemented from a script - * level in full perl - */ -# define WIN32_NO_SOCKETS /* less I/O calls during each require */ # define PERL_DISABLE_PMC -/* unnecessery for miniperl to lookup anything from an "installed" perl */ +/* unnecessary for miniperl to lookup anything from an "installed" perl */ # define WIN32_NO_REGISTRY /* allow minitest to work */ # define PERL_TEXTMODE_SCRIPTS #endif -#ifdef WIN32_NO_SOCKETS -# undef HAS_SOCKET -# undef HAS_GETPROTOBYNAME -# undef HAS_GETPROTOBYNUMBER -# undef HAS_GETPROTOENT -# undef HAS_GETNETBYNAME -# undef HAS_GETNETBYADDR -# undef HAS_GETNETENT -# undef HAS_GETSERVBYNAME -# undef HAS_GETSERVBYPORT -# undef HAS_GETSERVENT -# undef HAS_GETHOSTBYNAME -# undef HAS_GETHOSTBYADDR -# undef HAS_GETHOSTENT -# undef HAS_SELECT -# undef HAS_IOCTL -# undef HAS_NTOHL -# undef HAS_HTONL -# undef HAS_HTONS -# undef HAS_NTOHS -# define WIN32SCK_IS_STDSCK -#endif - #if defined(PERL_IMPLICIT_SYS) # define DYNAMIC_ENV_FETCH # define HAS_GETENV_LEN -# define prime_env_iter() # define WIN32IO_IS_STDIO /* don't pull in custom stdio layer */ # define WIN32SCK_IS_STDSCK /* don't pull in custom wsock layer */ #endif @@ -234,10 +204,10 @@ struct utsname { /* access() mode bits */ #ifndef R_OK -# define R_OK 4 -# define W_OK 2 -# define X_OK 1 -# define F_OK 0 +# define R_OK 4 +# define W_OK 2 +# define X_OK 1 +# define F_OK 0 #endif /* for waitpid() */ @@ -261,17 +231,9 @@ typedef long uid_t; typedef long gid_t; typedef unsigned short mode_t; -#if _MSC_VER < 1800 -#define isnan _isnan /* Defined already in VC++ 12.0 */ -#endif #define snprintf _snprintf #define vsnprintf _vsnprintf -/* on VS2003, msvcrt.lib is missing these symbols */ -#if _MSC_VER >= 1300 && _MSC_VER < 1400 -# pragma intrinsic(_rotl64,_rotr64) -#endif - MSVC_DIAG_IGNORE(4756 4056) PERL_STATIC_INLINE double S_Infinity() { @@ -293,8 +255,8 @@ MSVC_DIAG_RESTORE importing __PL_nan_u across DLL boundaries in size in the importing DLL will be more than the 8 bytes it will take up being in each XS DLL if that DLL actually uses __PL_nan_u */ -extern const __declspec(selectany) union { unsigned __int64 __q; double __d; } -__PL_nan_u = { 0x7FF8000000000000UI64 }; +union PerlNan { unsigned __int64 __q; double __d; }; +extern const __declspec(selectany) union PerlNan __PL_nan_u = { 0x7FF8000000000000UI64 }; #define NV_NAN ((NV)__PL_nan_u.__d) /* The CRT was rewritten in VS2015. */ @@ -464,7 +426,6 @@ DllExport void win32_get_child_IO(child_IO_table* ptr); DllExport HWND win32_create_message_window(void); DllExport int win32_async_check(pTHX); -extern int my_fclose(FILE *); extern char * win32_get_privlib(WIN32_NO_REGISTRY_M_(const char *pl) STRLEN *const len); extern char * win32_get_sitelib(const char *pl, STRLEN *const len); extern char * win32_get_vendorlib(const char *pl, STRLEN *const len); @@ -604,113 +565,6 @@ void win32_wait_for_children(pTHX); # define PERL_WAIT_FOR_CHILDREN win32_wait_for_children(aTHX) #endif -/* The following ioinfo struct manipulations had been removed but were - * reinstated to fix RT#120091/118059. However, they do not work with - * the rewritten CRT in VS2015 so they are removed once again for VS2015 - * onwards, which will therefore suffer from the reintroduction of the - * close socket bug. */ -#if (!defined(_MSC_VER)) || (defined(_MSC_VER) && _MSC_VER < 1900) - -#ifdef PERL_CORE - -/* C doesn't like repeat struct definitions */ -#if defined(__MINGW32__) && (__MINGW32_MAJOR_VERSION>=3) -# undef _CRTIMP -#endif -#ifndef _CRTIMP -# define _CRTIMP __declspec(dllimport) -#endif - - -/* VS2005 has multiple ioinfo struct definitions through VS2005's release life - * VS2008-2012 have been stable but do not assume future VSs will have the - * same ioinfo struct, just because past struct stability. If research is done - * on the CRTs of future VSs, the version check can be bumped up so the newer - * VS uses a fixed ioinfo size. (Actually, only VS2013 (_MSC_VER 1800) hasn't - * been looked at; after that we cannot use the ioinfo struct anyway (see the - * #if above).) - */ -#if ! (_MSC_VER < 1400 || (_MSC_VER >= 1500 && _MSC_VER <= 1700) \ - || defined(__MINGW32__)) -/* size of ioinfo struct is determined at runtime */ -# define WIN32_DYN_IOINFO_SIZE -#endif - -#ifndef WIN32_DYN_IOINFO_SIZE -/* - * Control structure for lowio file handles - */ -typedef struct { - intptr_t osfhnd;/* underlying OS file HANDLE */ - char osfile; /* attributes of file (e.g., open in text mode?) */ - char pipech; /* one char buffer for handles opened on pipes */ - int lockinitflag; - CRITICAL_SECTION lock; -/* this struct definition breaks ABI compatibility with - * not using, cl.exe's native VS version specitfic CRT. */ -# if _MSC_VER >= 1400 && _MSC_VER < 1500 -# error "This ioinfo struct is incomplete for Visual C 2005" -# endif -/* VS2005 CRT has at least 3 different definitions of this struct based on the - * CRT DLL's build number. */ -# if _MSC_VER >= 1500 -# ifndef _SAFECRT_IMPL - /* Not used in the safecrt downlevel. We do not define them, so we cannot - * use them accidentally */ - char textmode : 7;/* __IOINFO_TM_ANSI or __IOINFO_TM_UTF8 or __IOINFO_TM_UTF16LE */ - char unicode : 1; /* Was the file opened as unicode? */ - char pipech2[2]; /* 2 more peak ahead chars for UNICODE mode */ - __int64 startpos; /* File position that matches buffer start */ - BOOL utf8translations; /* Buffer contains translations other than CRLF*/ - char dbcsBuffer; /* Buffer for the lead byte of dbcs when converting from dbcs to unicode */ - BOOL dbcsBufferUsed; /* Bool for the lead byte buffer is used or not */ -# endif -# endif -} ioinfo; -#else -typedef intptr_t ioinfo; -#endif - -/* - * Array of arrays of control structures for lowio files. - */ -EXTERN_C _CRTIMP ioinfo* __pioinfo[]; - -/* - * Definition of IOINFO_L2E, the log base 2 of the number of elements in each - * array of ioinfo structs. - */ -#define IOINFO_L2E 5 - -/* - * Definition of IOINFO_ARRAY_ELTS, the number of elements in ioinfo array - */ -#define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E) - -/* - * Access macros for getting at an ioinfo struct and its fields from a - * file handle - */ -#ifdef WIN32_DYN_IOINFO_SIZE -# define _pioinfo(i) ((intptr_t *) \ - (((Size_t)__pioinfo[(i) >> IOINFO_L2E])/* * to head of array ioinfo [] */\ - /* offset to the head of a particular ioinfo struct */ \ - + (((i) & (IOINFO_ARRAY_ELTS - 1)) * w32_ioinfo_size)) \ - ) -/* first slice of ioinfo is always the OS handle */ -# define _osfhnd(i) (*(_pioinfo(i))) -#else -# define _pioinfo(i) (__pioinfo[(i) >> IOINFO_L2E] + ((i) & (IOINFO_ARRAY_ELTS - 1))) -# define _osfhnd(i) (_pioinfo(i)->osfhnd) -#endif - -/* since we are not doing a dup2(), this works fine */ -#define _set_osfhnd(fh, osfh) (void)(_osfhnd(fh) = (intptr_t)osfh) - -#endif /* PERL_CORE */ - -#endif /* !defined(_MSC_VER) || _MSC_VER<1900 */ - /* IO.xs and POSIX.xs define PERLIO_NOT_STDIO to 1 */ #if defined(PERL_EXT_IO) || defined(PERL_EXT_POSIX) #undef PERLIO_NOT_STDIO @@ -733,11 +587,20 @@ DllExport void *win32_signal_context(void); /* ucrt at least seems to allocate a whole bit per type, just mask off one bit from the mask for our symlink - file type. + and socket file types. */ -#define _S_IFLNK ((unsigned)(_S_IFMT ^ (_S_IFMT & -_S_IFMT))) +#define _S_IFLNK ((unsigned)(_S_IFDIR | _S_IFCHR)) +#define _S_IFSOCK ((unsigned)(_S_IFDIR | _S_IFIFO)) +/* mingw64 defines _S_IFBLK to 0x3000 which is _S_IFDIR | _S_IFIFO */ +#ifndef _S_IFBLK +# define _S_IFBLK ((unsigned)(_S_IFCHR | _S_IFIFO)) +#endif #undef S_ISLNK #define S_ISLNK(mode) (((mode) & _S_IFMT) == _S_IFLNK) +#undef S_ISSOCK +#define S_ISSOCK(mode) (((mode) & _S_IFMT) == _S_IFSOCK) +#undef S_ISBLK +#define S_ISBLK(mode) (((mode) & _S_IFMT) == _S_IFBLK) /* |