in reply to (tye)Re2: XS question: typemap for a pointer to a pointer?
in thread XS question: typemap for a pointer to a pointer?
Just for concenience, the typemap:/* * This file was generated automatically by xsubpp version 1.9507 from + the * contents of LibnetRaw.xs. Do not edit this file, edit LibnetRaw.xs +instead. * * ANY CHANGES MADE HERE WILL BE LOST! * */ #line 1 "LibnetRaw.xs" #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "libnet.h" #line 17 "LibnetRaw.c" XS(XS_Net__LibnetRaw_libnet_open_raw_sock) { dXSARGS; if (items != 1) Perl_croak(aTHX_ "Usage: Net::LibnetRaw::libnet_open_raw_sock( +protocol)"); { int protocol = (int)SvIV(ST(0)); int RETVAL; dXSTARG; RETVAL = libnet_open_raw_sock(protocol); XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } XS(XS_Net__LibnetRaw_libnet_close_raw_sock) { dXSARGS; if (items != 1) Perl_croak(aTHX_ "Usage: Net::LibnetRaw::libnet_close_raw_sock +(fd)"); { int fd = (int)SvIV(ST(0)); int RETVAL; dXSTARG; RETVAL = libnet_close_raw_sock(fd); XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } XS(XS_Net__LibnetRaw_libnet_write_ip) { dXSARGS; if (items != 3) Perl_croak(aTHX_ "Usage: Net::LibnetRaw::libnet_write_ip(sock, + packet, len)"); { int sock = (int)SvIV(ST(0)); u_char * packet = (u_char *)SvPV(ST(1),PL_na); int len = (int)SvIV(ST(2)); int RETVAL; dXSTARG; RETVAL = libnet_write_ip(sock, packet, len); XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } XS(XS_Net__LibnetRaw_libnet_do_checksum) { dXSARGS; if (items != 3) Perl_croak(aTHX_ "Usage: Net::LibnetRaw::libnet_do_checksum(bu +f, protocol, len)"); { u_char buf = (u_char)SvUV(ST(0)); int protocol = (int)SvIV(ST(1)); int len = (int)SvIV(ST(2)); int RETVAL; dXSTARG; RETVAL = libnet_do_checksum(&buf, protocol, len); sv_setuv(ST(0), (UV)buf); SvSETMAGIC(ST(0)); XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } XS(XS_Net__LibnetRaw_libnet_init_packet) { dXSARGS; if (items != 2) Perl_croak(aTHX_ "Usage: Net::LibnetRaw::libnet_init_packet(p_ +size, buf)"); { size_t p_size = (size_t)SvIV(ST(0)); u_char * buf = (u_char *)SvPV(ST(1),PL_na); int RETVAL; dXSTARG; RETVAL = libnet_init_packet(p_size, &buf); sv_setpv((SV*)ST(1), buf); SvSETMAGIC(ST(1)); XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } XS(XS_Net__LibnetRaw_libnet_destroy_packet) { dXSARGS; if (items != 1) Perl_croak(aTHX_ "Usage: Net::LibnetRaw::libnet_destroy_packet +(buf)"); { u_char * buf = (u_char *)SvPV(ST(0),PL_na); int RETVAL; dXSTARG; RETVAL = libnet_destroy_packet(&buf); XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } XS(XS_Net__LibnetRaw_libnet_name_resolve) { dXSARGS; if (items != 2) Perl_croak(aTHX_ "Usage: Net::LibnetRaw::libnet_name_resolve(h +ostname, use_name)"); { u_char * hostname = (u_char *)SvPV(ST(0),PL_na); u_short use_name = (u_short)SvUV(ST(1)); u_long RETVAL; dXSTARG; RETVAL = libnet_name_resolve(hostname, use_name); XSprePUSH; PUSHu((UV)RETVAL); } XSRETURN(1); } XS(XS_Net__LibnetRaw_libnet_build_ip) { dXSARGS; if (items != 11) Perl_croak(aTHX_ "Usage: Net::LibnetRaw::libnet_build_ip(len, +tos, id, frag, ttl, prot, saddr, daddr, payload, payload_s, buf)"); { u_short len = (u_short)SvUV(ST(0)); u_char tos = (u_char)SvUV(ST(1)); u_short id = (u_short)SvUV(ST(2)); u_short frag = (u_short)SvUV(ST(3)); u_char ttl = (u_char)SvUV(ST(4)); u_char prot = (u_char)SvUV(ST(5)); u_long saddr = (u_long)SvUV(ST(6)); u_long daddr = (u_long)SvUV(ST(7)); const u_char * payload = (const u_char *)SvPV(ST(8),PL_na); int payload_s = (int)SvIV(ST(9)); u_char buf = (u_char)SvUV(ST(10)); int RETVAL; dXSTARG; RETVAL = libnet_build_ip(len, tos, id, frag, ttl, prot, saddr, + daddr, payload, payload_s, &buf); sv_setuv(ST(10), (UV)buf); SvSETMAGIC(ST(10)); XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } XS(XS_Net__LibnetRaw_libnet_build_tcp) { dXSARGS; if (items != 10) Perl_croak(aTHX_ "Usage: Net::LibnetRaw::libnet_build_tcp(spor +t, dport, seq, ack, control, win, urg, payload, payload_s, buf)"); { u_short sport = (u_short)SvUV(ST(0)); u_short dport = (u_short)SvUV(ST(1)); u_long seq = (u_long)SvUV(ST(2)); u_long ack = (u_long)SvUV(ST(3)); u_char control = (u_char)SvUV(ST(4)); u_short win = (u_short)SvUV(ST(5)); u_short urg = (u_short)SvUV(ST(6)); const u_char * payload = (const u_char *)SvPV(ST(7),PL_na); int payload_s = (int)SvIV(ST(8)); u_char buf = (u_char)SvUV(ST(9)); int RETVAL; dXSTARG; RETVAL = libnet_build_tcp(sport, dport, seq, ack, control, win +, urg, payload, payload_s, &buf); sv_setuv(ST(9), (UV)buf); SvSETMAGIC(ST(9)); XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } #ifdef __cplusplus extern "C" #endif XS(boot_Net__LibnetRaw) { dXSARGS; char* file = __FILE__; XS_VERSION_BOOTCHECK ; newXS("Net::LibnetRaw::libnet_open_raw_sock", XS_Net__LibnetRa +w_libnet_open_raw_sock, file); newXS("Net::LibnetRaw::libnet_close_raw_sock", XS_Net__LibnetR +aw_libnet_close_raw_sock, file); newXS("Net::LibnetRaw::libnet_write_ip", XS_Net__LibnetRaw_lib +net_write_ip, file); newXS("Net::LibnetRaw::libnet_do_checksum", XS_Net__LibnetRaw_ +libnet_do_checksum, file); newXS("Net::LibnetRaw::libnet_init_packet", XS_Net__LibnetRaw_ +libnet_init_packet, file); newXS("Net::LibnetRaw::libnet_destroy_packet", XS_Net__LibnetR +aw_libnet_destroy_packet, file); newXS("Net::LibnetRaw::libnet_name_resolve", XS_Net__LibnetRaw +_libnet_name_resolve, file); newXS("Net::LibnetRaw::libnet_build_ip", XS_Net__LibnetRaw_lib +net_build_ip, file); newXS("Net::LibnetRaw::libnet_build_tcp", XS_Net__LibnetRaw_li +bnet_build_tcp, file); XSRETURN_YES; }
Perhaps I am thinking of a pointer to a pointer in the wrong fashion or I am confusing the ways in which perl reference work that I am not clear on. I truly appreciate your help!u_char * T_PV u_char T_UV u_short T_UV u_long T_UV const u_char * T_PV
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
(tye)Re3: XS question: typemap for a pointer to a pointer?
by tye (Sage) on Apr 11, 2001 at 18:24 UTC | |
|
(tye)Re4: XS question: typemap for a pointer to a pointer?
by tye (Sage) on Apr 11, 2001 at 19:02 UTC | |
by Big Willy (Scribe) on Apr 11, 2001 at 22:13 UTC | |
by tye (Sage) on Apr 11, 2001 at 22:22 UTC | |
by Big Willy (Scribe) on Apr 18, 2001 at 08:02 UTC | |
by tye (Sage) on Apr 18, 2001 at 08:20 UTC |