Email-Address-XS
view release on metacpan or search on metacpan
Email-Address-XS.xs view on Meta::CPAN
struct message_address *last_address;
SV *string_scalar;
INPUT:
const char *this_class_name = "$Package";
STRLEN this_class_len = sizeof("$Package")-1;
INIT:
if (items % 2 == 1) {
carp(CARP_WARN, "Odd number of elements in argument list");
XSRETURN_UNDEF;
}
PPCODE:
first_address = NULL;
last_address = NULL;
taint = false;
#ifndef WITHOUT_SvPV_nomg
utf8 = false;
for (i = 0; i < items; i += 2)
if (perl_group_needs_utf8(aTHX_ ST(i), ST(i+1), (items == 2 ? -1 : i), this_class_name, this_class_len))
utf8 = true;
#else
utf8 = true;
Email-Address-XS.xs view on Meta::CPAN
string_scalar = items >= 1 ? ST(0) : &PL_sv_undef;
class_scalar = items >= 2 ? ST(1) : NULL;
input = get_perl_scalar_string_value(aTHX_ string_scalar, &input_len, "string", false);
utf8 = SvUTF8(string_scalar);
taint = SvTAINTED(string_scalar);
hv_class = get_perl_class_from_perl_scalar_or_cv(aTHX_ class_scalar, cv);
if (class_scalar && !sv_derived_from_pvn(class_scalar, this_class_name, this_class_len, SVf_UTF8)) {
carp(CARP_WARN, "Class %" SVf " is not derived from %s", SVfARG(class_scalar), this_class_name);
XSRETURN_EMPTY;
}
PPCODE:
first_address = message_address_parse(input, input_len, UINT_MAX, MESSAGE_ADDRESS_PARSE_FLAG_NON_STRICT_DOTS_AS_INVALID);
count = count_address_groups(first_address);
EXTEND(SP, count * 2);
address = first_address;
while (get_next_perl_address_group(aTHX_ &address, &group_scalar, &addresses_scalar, hv_class, utf8, taint)) {
PUSHs(group_scalar);
PUSHs(addresses_scalar);
}
message_address_free(&first_address);
Email-Address-XS.xs view on Meta::CPAN
mailbox = get_perl_scalar_string_value(aTHX_ mailbox_scalar, &mailbox_len, "mailbox", false);
domain = get_perl_scalar_string_value(aTHX_ domain_scalar, &domain_len, "domain", false);
mailbox_utf8 = SvUTF8(mailbox_scalar);
domain_utf8 = SvUTF8(domain_scalar);
utf8 = (mailbox_utf8 || domain_utf8);
if (utf8 && !mailbox_utf8)
mailbox = get_perl_scalar_value(aTHX_ mailbox_scalar, &mailbox_len, true, true);
if (utf8 && !domain_utf8)
domain = get_perl_scalar_value(aTHX_ domain_scalar, &domain_len, true, true);
taint = (SvTAINTED(mailbox_scalar) || SvTAINTED(domain_scalar));
PPCODE:
compose_address(&string, &string_len, mailbox, mailbox_len, domain, domain_len);
string_scalar = sv_2mortal(newSVpvn(string, string_len));
string_free(string);
if (utf8)
sv_utf8_decode(string_scalar);
if (taint)
SvTAINTED_on(string_scalar);
EXTEND(SP, 1);
PUSHs(string_scalar);
Email-Address-XS.xs view on Meta::CPAN
bool utf8;
bool taint;
SV *string_scalar;
SV *mailbox_scalar;
SV *domain_scalar;
INIT:
string_scalar = items >= 1 ? ST(0) : &PL_sv_undef;
string = get_perl_scalar_string_value(aTHX_ string_scalar, &string_len, "string", false);
utf8 = SvUTF8(string_scalar);
taint = SvTAINTED(string_scalar);
PPCODE:
split_address(string, string_len, &mailbox, &mailbox_len, &domain, &domain_len);
mailbox_scalar = mailbox ? sv_2mortal(newSVpvn(mailbox, mailbox_len)) : sv_newmortal();
domain_scalar = domain ? sv_2mortal(newSVpvn(domain, domain_len)) : sv_newmortal();
string_free(mailbox);
string_free(domain);
if (utf8) {
sv_utf8_decode(mailbox_scalar);
sv_utf8_decode(domain_scalar);
}
if (taint) {
( run in 0.792 second using v1.01-cache-2.11-cpan-5511b514fd6 )