📄 perl.h
字号:
#ifdef PERL_MICRO /* Last chance to export Perl_my_swap */# define MYSWAP#endif#if !defined(PERL_FOR_X2P) && !defined(WIN32)# include "embed.h"#endif#define MEM_SIZE Size_t#if defined(STANDARD_C) && defined(I_STDDEF)# include <stddef.h># define STRUCT_OFFSET(s,m) offsetof(s,m)#else# define STRUCT_OFFSET(s,m) (Size_t)(&(((s *)0)->m))#endif#if defined(I_STRING) || defined(__cplusplus)# include <string.h>#else# include <strings.h>#endif/* This comes after <stdlib.h> so we don't try to change the standard * library prototypes; we'll use our own in proto.h instead. */#ifdef MYMALLOC# ifdef PERL_POLLUTE_MALLOC# ifndef PERL_EXTMALLOC_DEF# define Perl_malloc malloc# define Perl_calloc calloc# define Perl_realloc realloc# define Perl_mfree free# endif# else# define EMBEDMYMALLOC /* for compatibility */# endifMalloc_t Perl_malloc (MEM_SIZE nbytes);Malloc_t Perl_calloc (MEM_SIZE elements, MEM_SIZE size);Malloc_t Perl_realloc (Malloc_t where, MEM_SIZE nbytes);/* 'mfree' rather than 'free', since there is already a 'perl_free' * that causes clashes with case-insensitive linkers */Free_t Perl_mfree (Malloc_t where);typedef struct perl_mstats perl_mstats_t;# define safemalloc Perl_malloc# define safecalloc Perl_calloc# define saferealloc Perl_realloc# define safefree Perl_mfree#else /* MYMALLOC */# define safemalloc safesysmalloc# define safecalloc safesyscalloc# define saferealloc safesysrealloc# define safefree safesysfree#endif /* MYMALLOC */#if !defined(HAS_STRCHR) && defined(HAS_INDEX) && !defined(strchr)#define strchr index#define strrchr rindex#endif#ifdef I_MEMORY# include <memory.h>#endif#ifdef HAS_MEMCPY# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)# ifndef memcpy extern char * memcpy (char*, char*, int);# endif# endif#else# ifndef memcpy# ifdef HAS_BCOPY# define memcpy(d,s,l) bcopy(s,d,l)# else# define memcpy(d,s,l) my_bcopy(s,d,l)# endif# endif#endif /* HAS_MEMCPY */#ifdef HAS_MEMSET# if !defined(STANDARD_C) && !defined(I_STRING) && !defined(I_MEMORY)# ifndef memset extern char *memset (char*, int, int);# endif# endif#else# define memset(d,c,l) my_memset(d,c,l)#endif /* HAS_MEMSET */#if !defined(HAS_MEMMOVE) && !defined(memmove)# if defined(HAS_BCOPY) && defined(HAS_SAFE_BCOPY)# define memmove(d,s,l) bcopy(s,d,l)# else# if defined(HAS_MEMCPY) && defined(HAS_SAFE_MEMCPY)# define memmove(d,s,l) memcpy(d,s,l)# else# define memmove(d,s,l) my_bcopy(s,d,l)# endif# endif#endif#if defined(mips) && defined(ultrix) && !defined(__STDC__)# undef HAS_MEMCMP#endif#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 memchr# ifndef HAS_MEMCHR# define memchr(s,c,n) ninstr((char*)(s), ((char*)(s)) + n, &(c), &(c) + 1)# 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>#if defined(WIN32) && (defined(PERL_OBJECT) || defined(PERL_IMPLICIT_SYS) || defined(PERL_CAPI))# define WIN32SCK_IS_STDSCK /* don't pull in custom wsock layer */#endif#if defined(HAS_SOCKET) && !defined(VMS) /* VMS handles sockets via vmsish.h */# include <sys/socket.h># if defined(USE_SOCKS) && defined(I_SOCKS)# if !defined(INCLUDE_PROTOTYPES)# define INCLUDE_PROTOTYPES /* for <socks.h> */# define PERL_SOCKS_NEED_PROTOTYPES# endif# ifdef USE_THREADS# define PERL_USE_THREADS /* store our value */# undef USE_THREADS# endif# include <socks.h># ifdef USE_THREADS# undef USE_THREADS /* socks.h does this on its own */# endif# ifdef PERL_USE_THREADS# define USE_THREADS /* restore our value */# undef PERL_USE_THREADS# endif# ifdef PERL_SOCKS_NEED_PROTOTYPES /* keep cpp space clean */# undef INCLUDE_PROTOTYPES# undef PERL_SOCKS_NEED_PROTOTYPES# endif# ifdef USE_64_BIT_ALL# define SOCKS_64BIT_BUG /* until proven otherwise */# endif# endif # ifdef I_NETDB# include <netdb.h># endif# ifndef ENOTSOCK# ifdef I_NET_ERRNO# include <net/errno.h># endif# endif#endif#ifdef SETERRNO# undef SETERRNO /* SOCKS might have defined this */#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 DEFSV THREADSV(0)# define SAVE_DEFSV save_threadsv(0)#else# define ERRSV GvSV(PL_errgv)# define DEFSV GvSV(PL_defgv)# define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))#endif /* USE_THREADS */#define ERRHV GvHV(PL_errgv) /* XXX unused, here for compatibility */#ifndef errno extern int errno; /* ANSI allows errno to be an lvalue expr. * For example in multithreaded environments * something like this might happen: * extern int *_errno(void); * #define errno (*_errno()) */#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> /* NeXT needs dirent + sys/dir.h */# if defined(I_SYS_DIR) && (defined(NeXT) || defined(__NeXT__))# 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.) */#ifdef I_SYSMODE#include <sys/mode.h>#endif#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#endif#ifndef S_IRGRP# ifdef S_IRUSR# define S_IRGRP (S_IRUSR>>3)# define S_IWGRP (S_IWUSR>>3)# define S_IXGRP (S_IXUSR>>3)# else# define S_IRGRP 0040# define S_IWGRP 0020# define S_IXGRP 0010# endif#endif#ifndef S_IROTH# ifdef S_IRUSR# define S_IROTH (S_IRUSR>>6)# define S_IWOTH (S_IWUSR>>6)# define S_IXOTH (S_IXUSR>>6)# else# define S_IROTH 0040# define S_IWOTH 0020# define S_IXOTH 0010# endif#endif#ifndef S_ISUID# define S_ISUID 04000#endif#ifndef S_ISGID# define S_ISGID 02000#endif#ifndef S_IRWXU# define S_IRWXU (S_IRUSR|S_IWUSR|S_IXUSR)#endif #ifndef S_IRWXG# define S_IRWXG (S_IRGRP|S_IWGRP|S_IXGRP)#endif #ifndef S_IRWXO# define S_IRWXO (S_IROTH|S_IWOTH|S_IXOTH)#endif #ifndef S_IREAD# define S_IREAD S_IRUSR#endif#ifndef S_IWRITE# define S_IWRITE S_IWUSR#endif#ifndef S_IEXEC# define S_IEXEC S_IXUSR#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -