📄 perl.h
字号:
#if defined(HAS_MEMCMP) && defined(HAS_SANE_MEMCMP)
# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)
# ifndef memcmp
extern int memcmp _((char*, char*, int));
# endif
# endif
# ifdef BUGGY_MSC
# pragma function(memcmp)
# endif
#else
# ifndef memcmp
# define memcmp my_memcmp
# endif
#endif /* HAS_MEMCMP && HAS_SANE_MEMCMP */
#ifndef memzero
# ifdef HAS_MEMSET
# define memzero(d,l) memset(d,0,l)
# else
# ifdef HAS_BZERO
# define memzero(d,l) bzero(d,l)
# else
# define memzero(d,l) my_bzero(d,l)
# endif
# endif
#endif
#ifndef HAS_BCMP
# ifndef bcmp
# define bcmp(s1,s2,l) memcmp(s1,s2,l)
# endif
#endif /* !HAS_BCMP */
#ifdef I_NETINET_IN
# include <netinet/in.h>
#endif
#ifdef I_ARPA_INET
# include <arpa/inet.h>
#endif
#if defined(SF_APPEND) && defined(USE_SFIO) && defined(I_SFIO)
/* <sfio.h> defines SF_APPEND and <sys/stat.h> might define SF_APPEND
* (the neo-BSD seem to do this). */
# undef SF_APPEND
#endif
#ifdef I_SYS_STAT
# include <sys/stat.h>
#endif
/* The stat macros for Amdahl UTS, Unisoft System V/88 (and derivatives
like UTekV) are broken, sometimes giving false positives. Undefine
them here and let the code below set them to proper values.
The ghs macro stands for GreenHills Software C-1.8.5 which
is the C compiler for sysV88 and the various derivatives.
This header file bug is corrected in gcc-2.5.8 and later versions.
--Kaveh Ghazi (ghazi@noc.rutgers.edu) 10/3/94. */
#if defined(uts) || (defined(m88k) && defined(ghs))
# undef S_ISDIR
# undef S_ISCHR
# undef S_ISBLK
# undef S_ISREG
# undef S_ISFIFO
# undef S_ISLNK
#endif
#ifdef I_TIME
# include <time.h>
#endif
#ifdef I_SYS_TIME
# ifdef I_SYS_TIME_KERNEL
# define KERNEL
# endif
# include <sys/time.h>
# ifdef I_SYS_TIME_KERNEL
# undef KERNEL
# endif
#endif
#if defined(HAS_TIMES) && defined(I_SYS_TIMES)
# include <sys/times.h>
#endif
#if defined(HAS_STRERROR) && (!defined(HAS_MKDIR) || !defined(HAS_RMDIR))
# undef HAS_STRERROR
#endif
#include <errno.h>
#ifdef HAS_SOCKET
# ifdef I_NET_ERRNO
# include <net/errno.h>
# endif
#endif
#ifdef VMS
# define SETERRNO(errcode,vmserrcode) \
STMT_START { \
set_errno(errcode); \
set_vaxc_errno(vmserrcode); \
} STMT_END
#else
# define SETERRNO(errcode,vmserrcode) errno = (errcode)
#endif
#ifdef USE_THREADS
# define ERRSV (thr->errsv)
# define ERRHV (thr->errhv)
# define DEFSV THREADSV(0)
# define SAVE_DEFSV save_threadsv(0)
#else
# define ERRSV GvSV(PL_errgv)
# define ERRHV GvHV(PL_errgv)
# define DEFSV GvSV(PL_defgv)
# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
#endif /* USE_THREADS */
#ifndef errno
extern int errno; /* ANSI allows errno to be an lvalue expr */
#endif
#ifdef HAS_STRERROR
# ifdef VMS
char *strerror _((int,...));
# else
#ifndef DONT_DECLARE_STD
char *strerror _((int));
#endif
# endif
# ifndef Strerror
# define Strerror strerror
# endif
#else
# ifdef HAS_SYS_ERRLIST
extern int sys_nerr;
extern char *sys_errlist[];
# ifndef Strerror
# define Strerror(e) \
((e) < 0 || (e) >= sys_nerr ? "(unknown)" : sys_errlist[e])
# endif
# endif
#endif
#ifdef I_SYS_IOCTL
# ifndef _IOCTL_
# include <sys/ioctl.h>
# endif
#endif
#if defined(mc300) || defined(mc500) || defined(mc700) || defined(mc6000)
# ifdef HAS_SOCKETPAIR
# undef HAS_SOCKETPAIR
# endif
# ifdef I_NDBM
# undef I_NDBM
# endif
#endif
#if INTSIZE == 2
# define htoni htons
# define ntohi ntohs
#else
# define htoni htonl
# define ntohi ntohl
#endif
/* Configure already sets Direntry_t */
#if defined(I_DIRENT)
# include <dirent.h>
# if defined(NeXT) && defined(I_SYS_DIR) /* NeXT needs dirent + sys/dir.h */
# include <sys/dir.h>
# endif
#else
# ifdef I_SYS_NDIR
# include <sys/ndir.h>
# else
# ifdef I_SYS_DIR
# ifdef hp9000s500
# include <ndir.h> /* may be wrong in the future */
# else
# include <sys/dir.h>
# endif
# endif
# endif
#endif
#ifdef FPUTS_BOTCH
/* work around botch in SunOS 4.0.1 and 4.0.2 */
# ifndef fputs
# define fputs(sv,fp) fprintf(fp,"%s",sv)
# endif
#endif
/*
* The following gobbledygook brought to you on behalf of __STDC__.
* (I could just use #ifndef __STDC__, but this is more bulletproof
* in the face of half-implementations.)
*/
#ifndef S_IFMT
# ifdef _S_IFMT
# define S_IFMT _S_IFMT
# else
# define S_IFMT 0170000
# endif
#endif
#ifndef S_ISDIR
# define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
#endif
#ifndef S_ISCHR
# define S_ISCHR(m) ((m & S_IFMT) == S_IFCHR)
#endif
#ifndef S_ISBLK
# ifdef S_IFBLK
# define S_ISBLK(m) ((m & S_IFMT) == S_IFBLK)
# else
# define S_ISBLK(m) (0)
# endif
#endif
#ifndef S_ISREG
# define S_ISREG(m) ((m & S_IFMT) == S_IFREG)
#endif
#ifndef S_ISFIFO
# ifdef S_IFIFO
# define S_ISFIFO(m) ((m & S_IFMT) == S_IFIFO)
# else
# define S_ISFIFO(m) (0)
# endif
#endif
#ifndef S_ISLNK
# ifdef _S_ISLNK
# define S_ISLNK(m) _S_ISLNK(m)
# else
# ifdef _S_IFLNK
# define S_ISLNK(m) ((m & S_IFMT) == _S_IFLNK)
# else
# ifdef S_IFLNK
# define S_ISLNK(m) ((m & S_IFMT) == S_IFLNK)
# else
# define S_ISLNK(m) (0)
# endif
# endif
# endif
#endif
#ifndef S_ISSOCK
# ifdef _S_ISSOCK
# define S_ISSOCK(m) _S_ISSOCK(m)
# else
# ifdef _S_IFSOCK
# define S_ISSOCK(m) ((m & S_IFMT) == _S_IFSOCK)
# else
# ifdef S_IFSOCK
# define S_ISSOCK(m) ((m & S_IFMT) == S_IFSOCK)
# else
# define S_ISSOCK(m) (0)
# endif
# endif
# endif
#endif
#ifndef S_IRUSR
# ifdef S_IREAD
# define S_IRUSR S_IREAD
# define S_IWUSR S_IWRITE
# define S_IXUSR S_IEXEC
# else
# define S_IRUSR 0400
# define S_IWUSR 0200
# define S_IXUSR 0100
# endif
# define S_IRGRP (S_IRUSR>>3)
# define S_IWGRP (S_IWUSR>>3)
# define S_IXGRP (S_IXUSR>>3)
# define S_IROTH (S_IRUSR>>6)
# define S_IWOTH (S_IWUSR>>6)
# define S_IXOTH (S_IXUSR>>6)
#endif
#ifndef S_ISUID
# define S_ISUID 04000
#endif
#ifndef S_ISGID
# define S_ISGID 02000
#endif
#ifdef ff_next
# undef ff_next
#endif
#if defined(cray) || defined(gould) || defined(i860) || defined(pyr)
# define SLOPPYDIVIDE
#endif
#ifdef UV
#undef UV
#endif
/* XXX QUAD stuff is not currently supported on most systems.
Specifically, perl internals don't support long long. Among
the many problems is that some compilers support long long,
but the underlying library functions (such as sprintf) don't.
Some things do work (such as quad pack/unpack on convex);
also some systems use long long for the fpos_t typedef. That
seems to work too.
The IV type is supposed to be long enough to hold any integral
value or a pointer.
--Andy Dougherty August 1996
*/
#ifdef cray
# define Quad_t int
#else
# ifdef convex
# define Quad_t long long
# else
# if LONGSIZE == 8
# define Quad_t long
# endif
# endif
#endif
/* XXX Experimental set-up for long long. Just add -DUSE_LONG_LONG
to your ccflags. --Andy Dougherty 4/1998
*/
#ifdef USE_LONG_LONG
# if defined(HAS_LONG_LONG) && LONGLONGSIZE == 8
# define Quad_t long long
# endif
#endif
#ifdef Quad_t
# define HAS_QUAD
typedef Quad_t IV;
typedef unsigned Quad_t UV;
# define IV_MAX PERL_QUAD_MAX
# define IV_MIN PERL_QUAD_MIN
# define UV_MAX PERL_UQUAD_MAX
# define UV_MIN PERL_UQUAD_MIN
#else
typedef long IV;
typedef unsigned long UV;
# define IV_MAX PERL_LONG_MAX
# define IV_MIN PERL_LONG_MIN
# define UV_MAX PERL_ULONG_MAX
# define UV_MIN PERL_ULONG_MIN
#endif
/* Previously these definitions used hardcoded figures.
* It is hoped these formula are more portable, although
* no data one way or another is presently known to me.
* The "PERL_" names are used because these calculated constants
* do not meet the ANSI requirements for LONG_MAX, etc., which
* need to be constants acceptable to #if - kja
* define PERL_LONG_MAX 2147483647L
* define PERL_LONG_MIN (-LONG_MAX - 1)
* define PERL ULONG_MAX 4294967295L
*/
#ifdef I_LIMITS /* Needed for cast_xxx() functions below. */
# include <limits.h>
#else
#ifdef I_VALUES
# include <values.h>
#endif
#endif
/*
* Try to figure out max and min values for the integral types. THE CORRECT
* SOLUTION TO THIS MESS: ADAPT enquire.c FROM GCC INTO CONFIGURE. The
* following hacks are used if neither limits.h or values.h provide them:
* U<TYPE>_MAX: for types >= int: ~(unsigned TYPE)0
* for types < int: (unsigned TYPE)~(unsigned)0
* The argument to ~ must be unsigned so that later signed->unsigned
* conversion can't modify the value's bit pattern (e.g. -0 -> +0),
* and it must not be smaller than int because ~ does integral promotion.
* <type>_MAX: (<type>) (U<type>_MAX >> 1)
* <type>_MIN: -<type>_MAX - <is_twos_complement_architecture: (3 & -1) == 3>.
* The latter is a hack which happens to work on some machines but
* does *not* catch any random system, or things like integer types
* with NaN if that is possible.
*
* All of the types are explicitly cast to prevent accidental loss of
* numeric range, and in the hope that they will be less likely to confuse
* over-eager optimizers.
*
*/
#define PERL_UCHAR_MIN ((unsigned char)0)
#ifdef UCHAR_MAX
# define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
#else
# ifdef MAXUCHAR
# define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
# else
# define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
# endif
#endif
/*
* CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be
* ambiguous. It may be equivalent to (signed char) or (unsigned char)
* depending on local options. Until Configure detects this (or at least
* detects whether the "signed" keyword is available) the CHAR ranges
* will not be included. UCHAR functions normally.
* - kja
*/
#define PERL_USHORT_MIN ((unsigned short)0)
#ifdef USHORT_MAX
# define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
#else
# ifdef MAXUSHORT
# define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
# else
# ifdef USHRT_MAX
# define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
# else
# define PERL_USHORT_MAX ((unsigned short)~(unsigned)0)
# endif
# endif
#endif
#ifdef SHORT_MAX
# define PERL_SHORT_MAX ((short)SHORT_MAX)
#else
# ifdef MAXSHORT /* Often used in <values.h> */
# define PERL_SHORT_MAX ((short)MAXSHORT)
# else
# ifdef SHRT_MAX
# define PERL_SHORT_MAX ((short)SHRT_MAX)
# else
# define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1))
# endif
# endif
#endif
#ifdef SHORT_MIN
# define PERL_SHORT_MIN ((short)SHORT_MIN)
#else
# ifdef MINSHORT
# define PERL_SHORT_MIN ((short)MINSHORT)
# else
# ifdef SHRT_MIN
# define PERL_SHORT_MIN ((short)SHRT_MIN)
# else
# define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3))
# endif
# endif
#endif
#ifdef UINT_MAX
# define PERL_UINT_MAX ((unsigned int)UINT_MAX)
#else
# ifdef MAXUINT
# define PERL_UINT_MAX ((unsigned int)MAXUINT)
# else
# define PERL_UINT_MAX (~(unsigned int)0)
# endif
#endif
#define PERL_UINT_MIN ((unsigned int)0)
#ifdef INT_MAX
# define PERL_INT_MAX ((int)INT_MAX)
#else
# ifdef MAXINT /* Often used in <values.h> */
# define PERL_INT_MAX ((int)MAXINT)
# else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -