################################################################################
##
## $Revision: 10 $
## $Author: mhx $
## $Date: 2005/01/31 08:10:54 +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);