diff options
Diffstat (limited to 'perl-install/Newt/Av_CharPtrPtr.c')
| -rw-r--r-- | perl-install/Newt/Av_CharPtrPtr.c | 99 | 
1 files changed, 0 insertions, 99 deletions
| diff --git a/perl-install/Newt/Av_CharPtrPtr.c b/perl-install/Newt/Av_CharPtrPtr.c deleted file mode 100644 index f28fa6315..000000000 --- a/perl-install/Newt/Av_CharPtrPtr.c +++ /dev/null @@ -1,99 +0,0 @@ -#ifdef __cplusplus -extern "C" { -#endif -#include "EXTERN.h" -#include "perl.h" -#include "XSUB.h" -#include "Av_CharPtrPtr.h"  /* XS_*_charPtrPtr() */ -#ifdef __cplusplus -} -#endif - - -/* Used by the INPUT typemap for char**. - * Will convert a Perl AV* (containing strings) to a C char**. - */ -char ** -XS_unpack_charPtrPtr( rv ) -SV *rv; -{ -	AV *av; -	SV **ssv; -	char **s; -	int avlen; -	int x; - -	if( SvROK( rv ) && (SvTYPE(SvRV(rv)) == SVt_PVAV) ) -		av = (AV*)SvRV(rv); -	else { -		warn("XS_unpack_charPtrPtr: rv was not an AV ref"); -		return( (char**)NULL ); -	} - -	/* is it empty? */ -	avlen = av_len(av); -	if( avlen < 0 ){ -		warn("XS_unpack_charPtrPtr: array was empty"); -		return( (char**)NULL ); -	} - -	/* av_len+2 == number of strings, plus 1 for an end-of-array sentinel. -	 */ -	s = (char **)safemalloc( sizeof(char*) * (avlen + 2) ); -	if( s == NULL ){ -		warn("XS_unpack_charPtrPtr: unable to malloc char**"); -		return( (char**)NULL ); -	} -	for( x = 0; x <= avlen; ++x ){ -		ssv = av_fetch( av, x, 0 ); -		if( ssv != NULL ){ -			if( SvPOK( *ssv ) ){ -				s[x] = (char *)safemalloc( SvCUR(*ssv) + 1 ); -				if( s[x] == NULL ) -					warn("XS_unpack_charPtrPtr: unable to malloc char*"); -				else -					strcpy( s[x], SvPV( *ssv, PL_na ) ); -			} -			else -				warn("XS_unpack_charPtrPtr: array elem %d was not a string.", x ); -		} -		else -			s[x] = (char*)NULL; -	} -	s[x] = (char*)NULL; /* sentinel */ -	return( s ); -} - -/* Used by the OUTPUT typemap for char**. - * Will convert a C char** to a Perl AV*. - */ -void -XS_pack_charPtrPtr( st, s ) -SV *st; -char **s; -{ -	AV *av = newAV(); -	SV *sv; -	char **c; - -	for( c = s; *c != NULL; ++c ){ -		sv = newSVpv( *c, 0 ); -		av_push( av, sv ); -	} -	sv = newSVrv( st, NULL );	/* upgrade stack SV to an RV */ -	SvREFCNT_dec( sv );	/* discard */ -	SvRV( st ) = (SV*)av;	/* make stack RV point at our AV */ -} - - -/* cleanup the temporary char** from XS_unpack_charPtrPtr */ -void -XS_release_charPtrPtr(s) -char **s; -{ -	char **c; -	for( c = s; *c != NULL; ++c ) -		safefree( *c ); -	safefree( s ); -} - | 
