ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Convert-Scalar/Scalar.xs
Revision: 1.4
Committed: Mon Sep 23 03:42:02 2002 UTC (21 years, 8 months ago) by root
Branch: MAIN
Changes since 1.3: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #include "EXTERN.h"
2 #include "perl.h"
3 #include "XSUB.h"
4
5 #if PERL_VERSION < 7
6 # define is_utf8_string(s,l) (croak ("utf8_valid requires perl 5.7 or higher"), 0)
7 #endif
8
9 MODULE = Convert::Scalar PACKAGE = Convert::Scalar
10
11 int
12 utf8(scalar,mode=0)
13 SV * scalar
14 SV * mode
15 PROTOTYPE: $;$
16 CODE:
17 SvGETMAGIC (scalar);
18 RETVAL = !!SvUTF8 (scalar);
19 if (items > 1)
20 {
21 if (SvREADONLY (scalar))
22 croak ("Convert::Scalar::utf8 called on read only scalar");
23 if (SvTRUE (mode))
24 SvUTF8_on (scalar);
25 else
26 SvUTF8_off (scalar);
27 }
28 OUTPUT:
29 RETVAL
30
31 void
32 utf8_on(scalar)
33 SV * scalar
34 PROTOTYPE: $
35 PPCODE:
36 if (SvREADONLY (scalar))
37 croak ("Convert::Scalar::utf8_on called on read only scalar");
38
39 SvGETMAGIC (scalar);
40 SvUTF8_on (scalar);
41 if (GIMME_V != G_VOID)
42 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar)));
43
44 void
45 utf8_off(scalar)
46 SV * scalar
47 PROTOTYPE: $
48 PPCODE:
49 if (SvREADONLY (scalar))
50 croak ("Convert::Scalar::utf8_off called on read only scalar");
51
52 SvGETMAGIC (scalar);
53 SvUTF8_off (scalar);
54 if (GIMME_V != G_VOID)
55 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar)));
56
57 int
58 utf8_valid(scalar)
59 SV * scalar
60 PROTOTYPE: $
61 CODE:
62 STRLEN len;
63 char *str = SvPV (scalar, len);
64 RETVAL = !!is_utf8_string (str, len);
65 OUTPUT:
66 RETVAL
67
68 void
69 utf8_upgrade(scalar)
70 SV * scalar
71 PROTOTYPE: $
72 PPCODE:
73 if (SvREADONLY (scalar))
74 croak ("Convert::Scalar::utf8_upgrade called on read only scalar");
75
76 sv_utf8_upgrade(scalar);
77 if (GIMME_V != G_VOID)
78 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar)));
79
80 bool
81 utf8_downgrade(scalar, fail_ok = 0)
82 SV * scalar
83 bool fail_ok
84 PROTOTYPE: $;$
85 CODE:
86 if (SvREADONLY (scalar))
87 croak ("Convert::Scalar::utf8_downgrade called on read only scalar");
88
89 RETVAL = sv_utf8_downgrade (scalar, fail_ok);
90 OUTPUT:
91 RETVAL
92
93 void
94 utf8_encode(scalar)
95 SV * scalar
96 PROTOTYPE: $
97 PPCODE:
98 if (SvREADONLY (scalar))
99 croak ("Convert::Scalar::utf8_encode called on read only scalar");
100
101 sv_utf8_encode (scalar);
102 if (GIMME_V != G_VOID)
103 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar)));
104
105 UV
106 utf8_length(scalar)
107 SV * scalar
108 PROTOTYPE: $
109 CODE:
110 RETVAL = (UV) utf8_length (SvPV_nolen (scalar), SvEND (scalar));
111 OUTPUT:
112 RETVAL
113
114 void
115 unmagic(scalar, type)
116 SV * scalar
117 char type
118 PROTOTYPE: $
119 CODE:
120 sv_unmagic (scalar, type);
121
122 void
123 weaken(scalar)
124 SV * scalar
125 PROTOTYPE: $
126 CODE:
127 sv_rvweaken (scalar);
128
129 void
130 taint(scalar)
131 SV * scalar
132 PROTOTYPE: $
133 CODE:
134 SvTAINTED_on (scalar);
135
136 int
137 tainted(scalar)
138 SV * scalar
139 PROTOTYPE: $
140 CODE:
141 RETVAL = SvTAINTED (scalar);
142 OUTPUT:
143 RETVAL
144
145 void
146 untaint(scalar)
147 SV * scalar
148 PROTOTYPE: $
149 CODE:
150 SvTAINTED_off (scalar);
151
152 void
153 grow(scalar,newlen)
154 SV * scalar
155 U32 newlen
156 PROTOTYPE: $$
157 PPCODE:
158 sv_grow (scalar, newlen);
159 if (GIMME_V != G_VOID)
160 XPUSHs (sv_2mortal (SvREFCNT_inc (scalar)));
161
162 int
163 refcnt(scalar,newrefcnt=0)
164 SV * scalar
165 int newrefcnt
166 PROTOTYPE: $;$
167 ALIAS:
168 refcnt_rv = 1
169 CODE:
170 if (ix)
171 {
172 if (!SvROK (scalar)) croak ("refcnt_rv requires a reference as it's first argument");
173 scalar = SvRV (scalar);
174 }
175 RETVAL = SvREFCNT (scalar);
176 if (items > 1)
177 SvREFCNT (scalar) = newrefcnt;
178 OUTPUT:
179 RETVAL
180
181 void
182 refcnt_inc(scalar)
183 SV * scalar
184 ALIAS:
185 refcnt_inc_rv = 1
186 PROTOTYPE: $
187 CODE:
188 if (ix)
189 {
190 if (!SvROK (scalar)) croak ("refcnt_inc_rv requires a reference as it's first argument");
191 scalar = SvRV (scalar);
192 }
193 SvREFCNT_inc (scalar);
194
195 void
196 refcnt_dec(scalar)
197 SV * scalar
198 ALIAS:
199 refcnt_dec_rv = 1
200 PROTOTYPE: $
201 CODE:
202 if (ix)
203 {
204 if (!SvROK (scalar)) croak ("refcnt_dec_rv requires a reference as it's first argument");
205 scalar = SvRV (scalar);
206 }
207 SvREFCNT_dec (scalar);