[3327] in BarnOwl Developers
[PATCH 2/5] Added support for calling perl subs with various return types
daemon@ATHENA.MIT.EDU (Jason Gross)
Sun Jan 13 14:08:21 2013
From: Jason Gross <jgross@MIT.EDU>
To: barnowl-dev@mit.edu
Cc: Jason Gross <jgross@mit.edu>
Date: Sun, 13 Jan 2013 14:07:51 -0500
In-Reply-To: <1358104074-23031-1-git-send-email-jgross@mit.edu>
---
perlconfig.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 82 insertions(+), 0 deletions(-)
diff --git a/perlconfig.c b/perlconfig.c
index 42169ac..c569a72 100644
--- a/perlconfig.c
+++ b/perlconfig.c
@@ -427,6 +427,88 @@ void owl_perlconfig_new_command(const char *name)
);
}
+CALLER_OWN char *owl_perlconfig_perl_call(const char *method, int argc, const char *const *argv)
+{
+ SV *rv;
+ char *out = NULL;
+ int i;
+ OWL_PERL_CALL(call_pv(method, G_SCALAR|G_EVAL)
+ ,
+ OWL_PERL_PUSH_ARGS(i, argc, argv);
+ ,
+ "Perl Error: '%s'"
+ ,
+ false
+ ,
+ false
+ ,
+ rv = POPs;
+ if (rv && SvPOK(rv))
+ out = g_strdup(SvPV_nolen(rv));
+ );
+ return out;
+}
+
+int owl_perlconfig_perl_call_int(const char *method, int argc, const char *const *argv)
+{
+ SV *rv;
+ int ret = -1;
+ int i;
+ OWL_PERL_CALL(call_pv(method, G_SCALAR|G_EVAL)
+ ,
+ OWL_PERL_PUSH_ARGS(i, argc, argv);
+ ,
+ "Perl Error: '%s'"
+ ,
+ false
+ ,
+ false
+ ,
+ rv = POPs;
+ if (rv && SvIOK(rv))
+ ret = SvIV(rv);
+ );
+ return ret;
+}
+
+bool owl_perlconfig_perl_call_bool(const char *method, int argc, const char *const *argv)
+{
+ SV *rv;
+ bool ret = false;
+ int i;
+ OWL_PERL_CALL(call_pv(method, G_SCALAR|G_EVAL)
+ ,
+ OWL_PERL_PUSH_ARGS(i, argc, argv);
+ ,
+ "Perl Error: '%s'"
+ ,
+ false
+ ,
+ false
+ ,
+ rv = POPs;
+ if (rv)
+ ret = SvTRUE(rv);
+ );
+ return ret;
+}
+
+void owl_perlconfig_perl_call_norv(const char *method, int argc, const char *const *argv)
+{
+ int i;
+ OWL_PERL_CALL(call_pv(method, G_DISCARD|G_EVAL)
+ ,
+ OWL_PERL_PUSH_ARGS(i, argc, argv);
+ ,
+ "Perl Error: '%s'"
+ ,
+ false
+ ,
+ true
+ ,
+ );
+}
+
/* caller must free the result */
CALLER_OWN char *owl_perlconfig_perlcmd(const owl_cmd *cmd, int argc, const char *const *argv)
{
--
1.7.2.5