summaryrefslogtreecommitdiffstats
path: root/perl-install/Newt/Av_CharPtrPtr.c
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/Newt/Av_CharPtrPtr.c')
-rw-r--r--perl-install/Newt/Av_CharPtrPtr.c99
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 );
-}
-