TYPEMAP
gpgme_ctx_t GPGME_CTX_T
perl_gpgme_ctx_or_null_t PERL_GPGME_CTX_OR_NULL_T
gpgme_protocol_t GPGME_PROTOCOL_T
gpgme_keylist_mode_t GPGME_KEYLIST_MODE_T
gpgme_data_t GPGME_DATA_T
gpgme_sig_mode_t GPGME_SIG_MODE_T
gpgme_key_t GPGME_KEY_T
const gpgme_key_t GPGME_KEY_T
gpgme_validity_t GPGME_VALIDITY_T
gpgme_sig_notation_flags_t GPGME_SIG_NOTATION_FLAGS_T
OUTPUT
GPGME_CTX_T
$arg = perl_gpgme_new_sv_from_ptr ($var, \"Crypt::GpgME\");
GPGME_PROTOCOL_T
$arg = perl_gpgme_protocol_to_string ($var);
GPGME_KEYLIST_MODE_T
{
AV *av = newAV ();
if ($var & GPGME_KEYLIST_MODE_LOCAL) {
av_push (av, newSVpvn (\"local\", 5));
}
if ($var & GPGME_KEYLIST_MODE_EXTERN) {
av_push (av, newSVpvn (\"extern\", 6));
}
if ($var & GPGME_KEYLIST_MODE_SIGS) {
av_push (av, newSVpvn (\"sigs\", 4));
}
if ($var & GPGME_KEYLIST_MODE_SIG_NOTATIONS) {
av_push (av, newSVpvn (\"sig-notations\", 13));
}
if ($var & GPGME_KEYLIST_MODE_VALIDATE) {
av_push (av, newSVpvn (\"validate\", 8));
}
$arg = newRV_noinc ((SV *)av);
}
GPGME_DATA_T
$arg = perl_gpgme_data_to_sv ($var);
GPGME_VALIDITY_T
$arg = perl_gpgme_validity_to_string ($var);
GPGME_KEY_T
$arg = perl_gpgme_new_sv_from_ptr ($var, \"Crypt::GpgME::Key\");
INPUT
GPGME_CTX_T
$var = ($type)perl_gpgme_get_ptr_from_sv ($arg, \"Crypt::GpgME\");
PERL_GPGME_CTX_OR_NULL_T
if (!$arg || !SvOK ($arg) || !SvROK ($arg)) {
$var = NULL;
}
else {
$var = ($type)perl_gpgme_get_ptr_from_sv ($arg, \"Crypt::GpgME\");
}
GPGME_PROTOCOL_T
{
char *protocol = SvPV_nolen ($arg);
if (strcasecmp (protocol, \"openpgp\") == 0) {
$var = GPGME_PROTOCOL_OpenPGP;
}
else if (strcasecmp (protocol, \"cms\") == 0) {
$var = GPGME_PROTOCOL_CMS;
}
else {
croak (\"unknown protocol\");
}
}
GPGME_KEYLIST_MODE_T
{
AV *av;
int i;
if (!$arg || !SvOK ($arg) || !SvROK ($arg) || !(SvTYPE (SvRV ($arg)) == SVt_PVAV)) {
croak (\"not an array reference\");
}
av = (AV *)SvRV ($arg);
$var = 0;
for (i = 0; i <= av_len (av); i++) {
char *keylist_mode;
SV **ae = av_fetch (av, i, 0);
if (!ae) {
croak (\"failed to fetch array element\");
}
keylist_mode = SvPV_nolen (*ae);
if (strcasecmp (keylist_mode, \"local\") == 0) {
$var |= GPGME_KEYLIST_MODE_LOCAL;
}
else if (strcasecmp (keylist_mode, \"extern\") == 0) {
$var |= GPGME_KEYLIST_MODE_EXTERN;
}
else if (strcasecmp (keylist_mode, \"sigs\") == 0) {
$var |= GPGME_KEYLIST_MODE_SIGS;
}
else if (strcasecmp (keylist_mode, \"sig-notations\") == 0) {
$var |= GPGME_KEYLIST_MODE_SIG_NOTATIONS;
}
else if (strcasecmp (keylist_mode, \"validate\") == 0) {
$var |= GPGME_KEYLIST_MODE_VALIDATE;
}
else {
croak (\"unknown keylist mode\");
}
}
}
GPGME_DATA_T
{
SV *tmp;
if (!SvROK ($arg)) {
tmp = perl_gpgme_data_io_handle_from_scalar ($arg);
}
else {
tmp = $arg;
}
if (tmp && SvOK (tmp) && sv_isobject (tmp) && sv_derived_from (tmp, \"IO::Handle\")) {
$var = ($type)perl_gpgme_data_from_io_handle (tmp);
}
else {
croak (\"not a valid IO::Handle\");
}
}
GPGME_SIG_MODE_T
{
char *sig_mode = SvPV_nolen ($arg);
if (strcasecmp (sig_mode, \"normal\") == 0) {
$var = GPGME_SIG_MODE_NORMAL;
}
else if (strcasecmp (sig_mode, \"detach\") == 0) {
$var = GPGME_SIG_MODE_DETACH;
}
else if (strcasecmp (sig_mode, \"clear\") == 0) {
$var = GPGME_SIG_MODE_CLEAR;
}
else {
croak (\"unknown sig mode\");
}
}
GPGME_KEY_T
$var = ($type)perl_gpgme_get_ptr_from_sv ($arg, \"Crypt::GpgME::Key\");
GPGME_SIG_NOTATION_FLAGS_T
if (!$arg || !SvOK ($arg) || !SvROK ($arg) || !(SvTYPE (SvRV ($arg)) != SVt_PVAV)) {
croak (\"not a valid flags array reference\");
}
{
AV *av;
SV **sv;
int i, len;
char *str;
av = (AV *)SvRV ($arg);
len = av_len (av);
for (i = 0; i <= len; i++) {
sv = av_fetch (av, i, 0);
if (!sv) {
croak (\"failed to fetch array element\");
}
str = SvPV_nolen (*sv);
if (strcasecmp (str, \"human-readable\") == 0) {
$var |= GPGME_SIG_NOTATION_HUMAN_READABLE;
}
else if (strcasecmp (str, \"critical\") == 0) {
$var |= GPGME_SIG_NOTATION_CRITICAL;
}
else {
croak (\"invalid notation flag\");
}
}
}