view libgaim/plugins/perl/common/Util.xs @ 15104:53f7a4a8ad2a

[gaim-migrate @ 17889] Fix some leakage in the perl loader bindings by using a special typedef to handle functions that return g_malloc()-ed values. Thanks to the Gtk-Perl folks for any easy way to do this. Fix gaim_gtk_sound_get_event_label() to correctly indicate that the retval is a constant. committer: Tailor Script <tailor@pidgin.im>
author Daniel Atallah <daniel.atallah@gmail.com>
date Mon, 04 Dec 2006 03:49:34 +0000
parents 338ac096e322
children d83f71ca0cd7
line wrap: on
line source

#include "module.h"

typedef struct {
	char *cb;
} GaimPerlUrlData;

static void gaim_perl_util_url_cb(GaimUtilFetchUrlData *url_data, void *user_data, const gchar *url_text, size_t size, const gchar *error_message) {
	GaimPerlUrlData *gpr = (GaimPerlUrlData *)user_data;
	dSP;
	ENTER;
	SAVETMPS;
	PUSHMARK(SP);

	XPUSHs(sv_2mortal(newSVpvn(url_text, size)));
	PUTBACK;

	call_pv(gpr->cb, G_EVAL | G_SCALAR);
	SPAGAIN;

	g_free(gpr->cb);
	g_free(gpr);

	PUTBACK;
	FREETMPS;
	LEAVE;
}

MODULE = Gaim::Util  PACKAGE = Gaim::Util  PREFIX = gaim_
PROTOTYPES: ENABLE

void
gaim_util_fetch_url(handle, url, full, user_agent, http11, cb)
	Gaim::Plugin handle
	const char *url
	gboolean full
	const char *user_agent
	gboolean http11
	SV * cb
CODE:
	GaimPerlUrlData *gpr;
	STRLEN len;
	char *basename;

	basename = g_path_get_basename(handle->path);
	gaim_perl_normalize_script_name(basename);
	gpr = g_new(GaimPerlUrlData, 1);

	gpr->cb = g_strdup_printf("Gaim::Script::%s::%s", basename, SvPV(cb, len));
	g_free(basename);
	gaim_util_fetch_url(url, full, user_agent, http11, gaim_perl_util_url_cb, gpr);

int
gaim_build_dir(path, mode)
	const char *path
	int mode

const char *
gaim_date_format_full(tm)
	const struct tm *tm

const char *
gaim_date_format_long(tm)
	const struct tm *tm

const char *
gaim_date_format_short(tm)
	const struct tm *tm

gboolean
gaim_email_is_valid(address)
	const char *address

const char *
gaim_escape_filename(str)
	const char *str

gchar_own *
gaim_fd_get_ip(fd)
	int fd

const gchar *
gaim_home_dir()

gboolean
gaim_markup_extract_info_field(str, len, dest, start_token, skip, end_token, check_value, no_value_token, display_name, is_link, link_prefix, format_cb)
	const char *str
	int len
	GString *dest
	const char *start_token
	int skip
	const char *end_token
	char check_value
	const char *no_value_token
	const char *display_name
	gboolean is_link
	const char *link_prefix
	Gaim::Util::InfoFieldFormatCallback format_cb

gboolean
gaim_markup_find_tag(needle, haystack, start, end, attributes)
	const char *needle
	const char *haystack
	const char **start
	const char **end
	GData **attributes

gchar_own *
gaim_markup_get_tag_name(tag)
	const char *tag

void
gaim_markup_html_to_xhtml(html, dest_xhtml, dest_plain)
	const char *html
	char **dest_xhtml
	char **dest_plain

gchar_own *
gaim_markup_linkify(str)
	const char *str

gchar_own *
gaim_markup_slice(str, x, y)
	const char *str
	guint x
	guint y

gchar_own *
gaim_markup_strip_html(str)
	const char *str

gboolean
gaim_message_meify(message, len)
	char *message
	size_t len

FILE *
gaim_mkstemp(path, binary)
	char **path
	gboolean binary

const char *
gaim_normalize(account, str)
	Gaim::Account account
	const char *str

gboolean
gaim_program_is_valid(program)
	const char *program

gchar_own *
gaim_str_add_cr(str)
	const char *str

gchar_own *
gaim_str_binary_to_ascii(binary, len)
	const unsigned char *binary
	guint len

gboolean
gaim_str_has_prefix(s, p)
	const char *s
	const char *p

gboolean
gaim_str_has_suffix(s, x)
	const char *s
	const char *x

gchar_own *
gaim_str_seconds_to_string(sec)
	guint sec

gchar_own *
gaim_str_size_to_units(size)
	size_t size

void
gaim_str_strip_char(str, thechar)
	char *str
	char thechar

time_t
gaim_str_to_time(timestamp, utc = FALSE, tm = NULL, tz_off = NULL, rest = NULL)
	const char *timestamp
	gboolean utc
	struct tm *tm
	long *tz_off
	const char **rest

gchar_own *
gaim_strcasereplace(string, delimiter, replacement)
	const char *string
	const char *delimiter
	const char *replacement

const char *
gaim_strcasestr(haystack, needle)
	const char *haystack
	const char *needle

gchar_own *
gaim_strdup_withhtml(src)
	const gchar *src

gchar_own *
gaim_strreplace(string, delimiter, replacement)
	const char *string
	const char *delimiter
	const char *replacement

gchar_own *
gaim_text_strip_mnemonic(in)
	const char *in

time_t
gaim_time_build(year, month, day, hour, min, sec)
	int year
	int month
	int day
	int hour
	int min
	int sec

const char *
gaim_time_format(tm)
	const struct tm *tm

const char *
gaim_unescape_filename(str)
	const char *str

gchar_own *
gaim_unescape_html(html)
	const char *html

const char *
gaim_url_decode(str)
	const char *str

const char *
gaim_url_encode(str)
	const char *str

gboolean
gaim_url_parse(url, ret_host, ret_port, ret_path, ret_user, ret_passwd)
	const char *url
	char **ret_host
	int *ret_port
	char **ret_path
	char **ret_user
	char **ret_passwd

const char *
gaim_user_dir()

const char *
gaim_utf8_strftime(const char *format, const struct tm *tm);

void
gaim_util_set_user_dir(dir)
	const char *dir

gboolean
gaim_util_write_data_to_file(filename, data, size)
	const char *filename
	const char *data
	size_t size