libpurple/plugins/perl/perl-common.h

Sat, 10 May 2014 03:56:36 +0530

author
Ankit Vani <a@nevitus.org>
date
Sat, 10 May 2014 03:56:36 +0530
branch
soc.2013.gobjectification.plugins
changeset 37144
8b63b9948107
parent 37109
94d1a2589d5a
parent 35989
2b5a26ddbb69
child 37160
8300c06145d8
permissions
-rw-r--r--

Merged default branch

#ifndef _PURPLE_PERL_COMMON_H_
#define _PURPLE_PERL_COMMON_H_

#include <glib.h>
#ifdef _WIN32
#undef STRINGIFY
#undef pipe
#endif

#define SILENT_NO_TAINT_SUPPORT 0
#define NO_TAINT_SUPPORT 0

#include <EXTERN.h>
#include <perl.h>
#include <XSUB.h>

/* XXX: perl defines it's own _ but I think it's safe to undef it */
#undef _
/* Dirty hack to prevent the win32 libc compat stuff from interfering with the Perl internal stuff */
#ifdef _WIN32
#define _WIN32DEP_H_
#endif
#include "internal.h"
#ifdef _WIN32
#undef _WIN32DEP_H_
#endif
#include "plugins.h"

#define is_hvref(o) \
	((o) && SvROK(o) && SvRV(o) && (SvTYPE(SvRV(o)) == SVt_PVHV))

#define hvref(o) \
	(is_hvref(o) ? (HV *)SvRV(o) : NULL);

#define PURPLE_PERL_BOOT_PROTO(x) \
	void boot_Purple__##x(pTHX_ CV *cv);

#define PURPLE_PERL_BOOT(x) \
	purple_perl_callXS(boot_Purple__##x, cv, mark)

#ifdef HAVE_NEW_SVUPGRADE
#	define SvUPGRADE_common(a, b) SvUPGRADE(a, b)
#else
#	define SvUPGRADE_common(a, b) if (!SvUPGRADE(a, b)) { croak("Cannot upgrade variable"); }
#endif

typedef struct _PurplePerlInfoStrings PurplePerlInfoStrings;

typedef struct
{
	PurplePlugin *plugin;
	PurplePerlInfoStrings *info_strings;
	char *package;
	char *load_sub;
	char *unload_sub;
	char *prefs_sub;
#ifdef PURPLE_GTKPERL
	char *gtk_prefs_sub;
#endif
	char *plugin_action_sub;
} PurplePerlScript;

void purple_perl_normalize_script_name(char *name);

SV *newSVGChar(const char *str);

void purple_perl_callXS(void (*subaddr)(pTHX_ CV *cv), CV *cv, SV **mark);
void purple_perl_bless_plain(const char *stash, void *object);
SV *purple_perl_bless_object(void *object, const char *stash);
gboolean purple_perl_is_ref_object(SV *o);
void *purple_perl_ref_object(SV *o);

int execute_perl(const char *function, int argc, char **args);

#if 0
gboolean purple_perl_value_from_sv(PurpleValue *value, SV *sv);
SV *purple_perl_sv_from_value(const PurpleValue *value);
#endif

void *purple_perl_data_from_sv(GType type, SV *sv);
SV *purple_perl_sv_from_vargs(GType type, va_list *args, void ***copy_arg);
SV *purple_perl_sv_from_fun(PurplePlugin *plugin, SV *callback);
#endif /* _PURPLE_PERL_COMMON_H_ */

mercurial