forked from rkitover/net-ssh2
-
Notifications
You must be signed in to change notification settings - Fork 1
/
typemap
124 lines (104 loc) · 3.45 KB
/
typemap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
TYPEMAP
char * T_PV
unsigned char * T_PV
const char * T_PV
AV * T_AVREF
SSH2 * O_SESSION
SSH2_CHANNEL * O_CHANNEL
SSH2_LISTENER * O_LISTENER
SSH2_SFTP * O_SFTP
SSH2_FILE * O_FILE
SSH2_DIR * O_DIR
SSH2_PUBLICKEY* O_PUBLICKEY
OUTPUT
T_PV
sv_setpv((SV*)$arg, $var);
T_AVREF
$arg = newRV((SV*)$var);
O_SESSION
sv_setref_pv($arg, "Net::SSH2", (void *)$var);
O_CHANNEL
{
GV* gv = (GV*)newSVrv($arg, "Net::SSH2::Channel");
IO* io = (IO*)newSV(0);
const char* name = form("_GEN_%ld", (long)net_ch_gensym++);
SvUPGRADE((SV*)gv, SVt_PVGV);
SvUPGRADE((SV*)io, SVt_PVIO);
gv_init(gv, gv_stashpv("Net::SSH2::Channel", 0/*create*/),
name, strlen(name), 0/*multi*/);
GvSV(gv) = newSViv(PTR2IV($var));
GvIOp(gv) = io;
if (PERL_VERSION > 6) {
sv_magic((SV*)io, newRV((SV*)gv), PERL_MAGIC_tiedscalar, Nullch, 0);
} else {
sv_magic((SV*)gv, newRV((SV*)gv), PERL_MAGIC_tiedscalar, Nullch, 0);
}
}
O_LISTENER
sv_setref_pv($arg, "Net::SSH2::Listener", (void *)$var);
O_SFTP
sv_setref_pv($arg, "Net::SSH2::SFTP", (void *)$var);
O_FILE
{
GV* gv = (GV*)newSVrv($arg, "Net::SSH2::File");
IO* io = (IO*)newSV(0);
const char* name = form("_GEN_%ld", (long)net_fi_gensym++);
SvUPGRADE((SV*)gv, SVt_PVGV);
SvUPGRADE((SV*)io, SVt_PVIO);
gv_init(gv, gv_stashpv("Net::SSH2::File", 0/*create*/),
name, strlen(name), 0/*multi*/);
GvSV(gv) = newSViv(PTR2IV($var));
GvIOp(gv) = io;
if (PERL_VERSION > 6) {
sv_magic((SV*)io, newRV((SV*)gv), PERL_MAGIC_tiedscalar, Nullch, 0);
} else {
sv_magic((SV*)gv, newRV((SV*)gv), PERL_MAGIC_tiedscalar, Nullch, 0);
}
}
O_DIR
sv_setref_pv($arg, "Net::SSH2::Dir", (void *)$var);
O_PUBLICKEY
sv_setref_pv($arg, "Net::SSH2::PublicKey", (void *)$var);
INPUT
T_PV
$var = ($type)SvPV_nolen($arg)
T_AVREF
if(SvROK($arg) && SvTYPE(SvRV($arg)) == SVt_PVAV)
$var = (AV*)SvRV($arg);
else
croak(\"$var is not an array reference\");
O_SESSION
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG))
$var = ($type)SvIV((SV*)SvRV($arg));
else
croak(\"${Package}::$func_name() - invalid session object\");
O_CHANNEL
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVGV))
$var = ($type)SvIVX(GvSV((GV*)SvRV($arg)));
else
croak(\"${Package}::$func_name() - invalid channel object\");
O_LISTENER
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG))
$var = ($type)SvIV((SV*)SvRV($arg));
else
croak(\"${Package}::$func_name() - invalid listener object\");
O_SFTP
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG))
$var = ($type)SvIV((SV*)SvRV($arg));
else
croak(\"${Package}::$func_name() - invalid SFTP object\");
O_FILE
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVGV))
$var = ($type)SvIVX(GvSV((GV*)SvRV($arg)));
else
croak(\"${Package}::$func_name() - invalid SFTP file object\");
O_DIR
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG))
$var = ($type)SvIV((SV*)SvRV($arg));
else
croak(\"${Package}::$func_name() - invalid SFTP directory object\");
O_PUBLICKEY
if(sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG))
$var = ($type)SvIV((SV*)SvRV($arg));
else
croak(\"${Package}::$func_name() - invalid public key object\");