⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ppport.h

📁 mysql数据库源代码
💻 H
字号:
/* This file is Based on output from  * Perl/Pollution/Portability Version 2.0000 */#ifndef _P_P_PORTABILITY_H_#define _P_P_PORTABILITY_H_#ifndef PERL_REVISION#   ifndef __PATCHLEVEL_H_INCLUDED__#       include "patchlevel.h"#   endif#   ifndef PERL_REVISION#	define PERL_REVISION	(5)        /* Replace: 1 */#       define PERL_VERSION	PATCHLEVEL#       define PERL_SUBVERSION	SUBVERSION        /* Replace PERL_PATCHLEVEL with PERL_VERSION */        /* Replace: 0 */#   endif#endif#define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION)#ifndef ERRSV#	define ERRSV perl_get_sv("@",FALSE)#endif#if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5))/* Replace: 1 */#	define PL_Sv		Sv#	define PL_compiling	compiling#	define PL_copline	copline#	define PL_curcop	curcop#	define PL_curstash	curstash#	define PL_defgv		defgv#	define PL_dirty		dirty#	define PL_hints		hints#	define PL_na		na#	define PL_perldb	perldb#	define PL_rsfp_filters	rsfp_filters#	define PL_rsfp		rsfp#	define PL_stdingv	stdingv#	define PL_sv_no		sv_no#	define PL_sv_undef	sv_undef#	define PL_sv_yes	sv_yes/* Replace: 0 */#endif#ifndef pTHX#    define pTHX#    define pTHX_#    define aTHX#    define aTHX_#endif         #ifndef PTR2IV#    define PTR2IV(d)   (IV)(d)#endif #ifndef INT2PTR#    define INT2PTR(any,d)      (any)(d)#endif#ifndef dTHR#  ifdef WIN32#	define dTHR extern int Perl___notused#  else#	define dTHR extern int errno#  endif#endif#ifndef boolSV#	define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)#endif#ifndef gv_stashpvn#	define gv_stashpvn(str,len,flags) gv_stashpv(str,flags)#endif#ifndef newSVpvn#	define newSVpvn(data,len) ((len) ? newSVpv ((data), (len)) : newSVpv ("", 0))#endif#ifndef newRV_inc/* Replace: 1 */#	define newRV_inc(sv) newRV(sv)/* Replace: 0 */#endif/* DEFSV appears first in 5.004_56 */#ifndef DEFSV#  define DEFSV	GvSV(PL_defgv)#endif#ifndef SAVE_DEFSV#    define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))#endif#ifndef newRV_noinc#  ifdef __GNUC__#    define newRV_noinc(sv)               \      ({                                  \          SV *nsv = (SV*)newRV(sv);       \          SvREFCNT_dec(sv);               \          nsv;                            \      })#  else#    if defined(CRIPPLED_CC) || defined(USE_THREADS)static SV * newRV_noinc (SV * sv){          SV *nsv = (SV*)newRV(sv);                 SvREFCNT_dec(sv);                         return nsv;                     }#    else#      define newRV_noinc(sv)    \        ((PL_Sv=(SV*)newRV(sv), SvREFCNT_dec(sv), (SV*)PL_Sv)#    endif#  endif#endif/* Provide: newCONSTSUB *//* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */#if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 63))#if defined(NEED_newCONSTSUB)static#elseextern void newCONSTSUB _((HV * stash, char * name, SV *sv));#endif#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL)voidnewCONSTSUB(stash,name,sv)HV *stash;char *name;SV *sv;{	U32 oldhints = PL_hints;	HV *old_cop_stash = PL_curcop->cop_stash;	HV *old_curstash = PL_curstash;	line_t oldline = PL_curcop->cop_line;	PL_curcop->cop_line = PL_copline;	PL_hints &= ~HINT_BLOCK_SCOPE;	if (stash)		PL_curstash = PL_curcop->cop_stash = stash;	newSUB(#if (PERL_VERSION < 3) || ((PERL_VERSION == 3) && (PERL_SUBVERSION < 22))     /* before 5.003_22 */		start_subparse(),#else#  if (PERL_VERSION == 3) && (PERL_SUBVERSION == 22)     /* 5.003_22 */     		start_subparse(0),#  else     /* 5.003_23  onwards */     		start_subparse(FALSE, 0),#  endif#endif		newSVOP(OP_CONST, 0, newSVpv(name,0)),		newSVOP(OP_CONST, 0, &PL_sv_no),   /* SvPV(&PL_sv_no) == "" -- GMB */		newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))	);	PL_hints = oldhints;	PL_curcop->cop_stash = old_cop_stash;	PL_curstash = old_curstash;	PL_curcop->cop_line = oldline;}#endif#endif /* newCONSTSUB */#ifndef START_MY_CXT/* * Boilerplate macros for initializing and accessing interpreter-local * data from C.  All statics in extensions should be reworked to use * this, if you want to make the extension thread-safe.  See ext/re/re.xs * for an example of the use of these macros. * * Code that uses these macros is responsible for the following: * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" * 2. Declare a typedef named my_cxt_t that is a structure that contains *    all the data that needs to be interpreter-local. * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. * 4. Use the MY_CXT_INIT macro such that it is called exactly once *    (typically put in the BOOT: section). * 5. Use the members of the my_cxt_t structure everywhere as *    MY_CXT.member. * 6. Use the dMY_CXT macro (a declaration) in all the functions that *    access MY_CXT. */#if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \    defined(PERL_CAPI)    || defined(PERL_IMPLICIT_CONTEXT)/* This must appear in all extensions that define a my_cxt_t structure, * right after the definition (i.e. at file scope).  The non-threads * case below uses it to declare the data as static. */#define START_MY_CXT#if PERL_REVISION == 5 && \    (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION < 68 ))/* Fetches the SV that keeps the per-interpreter data. */#define dMY_CXT_SV \	SV *my_cxt_sv = perl_get_sv(MY_CXT_KEY, FALSE)#else /* >= perl5.004_68 */#define dMY_CXT_SV \	SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY,		\				  sizeof(MY_CXT_KEY)-1, TRUE)#endif /* < perl5.004_68 *//* This declaration should be used within all functions that use the * interpreter-local data. */#define dMY_CXT	\	dMY_CXT_SV;							\	my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv))/* Creates and zeroes the per-interpreter data. * (We allocate my_cxtp in a Perl SV so that it will be released when * the interpreter goes away.) */#define MY_CXT_INIT \	dMY_CXT_SV;							\	/* newSV() allocates one more than needed */			\	my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\	Zero(my_cxtp, 1, my_cxt_t);					\	sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))/* This macro must be used to access members of the my_cxt_t structure. * e.g. MYCXT.some_data */#define MY_CXT		(*my_cxtp)/* Judicious use of these macros can reduce the number of times dMY_CXT * is used.  Use is similar to pTHX, aTHX etc. */#define pMY_CXT		my_cxt_t *my_cxtp#define pMY_CXT_	pMY_CXT,#define _pMY_CXT	,pMY_CXT#define aMY_CXT		my_cxtp#define aMY_CXT_	aMY_CXT,#define _aMY_CXT	,aMY_CXT#else /* single interpreter */#ifndef NOOP#  define NOOP (void)0#endif#ifdef HASATTRIBUTE#  define PERL_UNUSED_DECL __attribute__((unused))#else#  define PERL_UNUSED_DECL#endif    #ifndef dNOOP#  define dNOOP extern int Perl___notused PERL_UNUSED_DECL#endif#define START_MY_CXT	static my_cxt_t my_cxt;#define dMY_CXT_SV	dNOOP#define dMY_CXT		dNOOP#define MY_CXT_INIT	NOOP#define MY_CXT		my_cxt#define pMY_CXT		void#define pMY_CXT_#define _pMY_CXT#define aMY_CXT#define aMY_CXT_#define _aMY_CXT#endif #endif /* START_MY_CXT */#ifndef DBM_setFilter/*    The DBM_setFilter & DBM_ckFilter macros are only used by    the *DB*_File modules */#define DBM_setFilter(db_type,code)				\	{							\	    if (db_type)					\	        RETVAL = sv_mortalcopy(db_type) ;		\	    ST(0) = RETVAL ;					\	    if (db_type && (code == &PL_sv_undef)) {		\                SvREFCNT_dec(db_type) ;				\	        db_type = NULL ;				\	    }							\	    else if (code) {					\	        if (db_type)					\	            sv_setsv(db_type, code) ;			\	        else						\	            db_type = newSVsv(code) ;			\	    }	    						\	}#define DBM_ckFilter(arg,type,name)				\	if (db->type) {						\	    if (db->filtering) {				\	        croak("recursion detected in %s", name) ;	\	    }                     				\	    ENTER ;						\	    SAVETMPS ;						\	    SAVEINT(db->filtering) ;				\	    db->filtering = TRUE ;				\	    SAVESPTR(DEFSV) ;					\	    DEFSV = arg ;					\	    SvTEMP_off(arg) ;					\	    PUSHMARK(SP) ;					\	    PUTBACK ;						\	    (void) perl_call_sv(db->type, G_DISCARD); 		\	    SPAGAIN ;						\	    PUTBACK ;						\	    FREETMPS ;						\	    LEAVE ;						\	}#endif /* DBM_setFilter */#endif /* _P_P_PORTABILITY_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -