################################################################################ ## ## $Revision: 11 $ ## $Author: mhx $ ## $Date: 2005/03/10 18:08:41 +0100 $ ## ################################################################################ ## ## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## ## This program is free software; you can redistribute it and/or ## modify it under the same terms as Perl itself. ## ################################################################################ =provides SvPV_nolen sv_2pv_nolen SvPVbyte sv_2pvbyte sv_pvn sv_pvn_force =implementation #ifndef SvPV_nolen #if { NEED sv_2pv_nolen } char * sv_2pv_nolen(pTHX_ register SV *sv) { STRLEN n_a; return sv_2pv(sv, &n_a); } #endif /* Hint: sv_2pv_nolen * Use the SvPV_nolen() macro instead of sv_2pv_nolen(). */ /* SvPV_nolen depends on sv_2pv_nolen */ #define SvPV_nolen(sv) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX(sv) : sv_2pv_nolen(sv)) #endif #ifdef SvPVbyte /* Hint: SvPVbyte * Does not work in perl-5.6.1, ppport.h implements a version * borrowed from perl-5.7.3. */ #if { VERSION < 5.7.0 } #if { NEED sv_2pvbyte } char * sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp) { sv_utf8_downgrade(sv,0); return SvPV(sv,*lp); } #endif /* Hint: sv_2pvbyte * Use the SvPVbyte() macro instead of sv_2pvbyte(). */ #undef SvPVbyte /* SvPVbyte depends on sv_2pvbyte */ #define SvPVbyte(sv, lp) \ ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp)) #endif #else # define SvPVbyte SvPV # define sv_2pvbyte sv_2pv #endif /* sv_2pvbyte_nolen depends on sv_2pv_nolen */ __UNDEFINED__ sv_2pvbyte_nolen sv_2pv_nolen /* Hint: sv_pvn * Always use the SvPV() macro instead of sv_pvn(). */ __UNDEFINED__ sv_pvn(sv, len) SvPV(sv, len) /* Hint: sv_pvn_force * Always use the SvPV_force() macro instead of sv_pvn_force(). */ __UNDEFINED__ sv_pvn_force(sv, len) SvPV_force(sv, len) =xsinit #define NEED_sv_2pv_nolen #define NEED_sv_2pvbyte =xsubs IV SvPVbyte(sv) SV *sv PREINIT: STRLEN len; const char *str; CODE: str = SvPVbyte(sv, len); RETVAL = strEQ(str, "mhx") ? len : -1; OUTPUT: RETVAL IV SvPV_nolen(sv) SV *sv PREINIT: const char *str; CODE: str = SvPV_nolen(sv); RETVAL = strEQ(str, "mhx") ? 42 : 0; OUTPUT: RETVAL =tests plan => 2 ok(&Devel::PPPort::SvPVbyte("mhx"), 3); ok(&Devel::PPPort::SvPV_nolen("mhx"), 42);