[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: yap - Gnome2::About
- From: Chas Owens <alas widomaker com>
- To: Chas Owens <alas wilma widomaker com>
- Cc: gtk-perl-list gnome org
- Subject: Re: yap - Gnome2::About
- Date: Thu, 17 Apr 2003 20:45:47 -0400
Memory leak! bad Chas, no cookie for you!
The code needs
if (d) free(d);
at the end. Sigh.
On Thu, 2003-04-17 at 17:58, Chas Owens wrote:
> I have stolen some code from Gtk-Perl, cleaned it up (NULL instead of 0,
> const gchar** instead of char**, etc.), and modified it to match the new
> arguments for Gnome2::About.
>
> <patch>
> --- Gnome2/xs/GnomeAbout.xs.orig 2003-04-17 17:30:45.000000000 -0400
> +++ Gnome2/xs/GnomeAbout.xs 2003-04-17 17:50:31.000000000 -0400
> @@ -4,25 +4,58 @@
>
>
> GtkWidget *
> -gnome_about_new (class, name, version, copyright, comments, authors_ref, documenters_ref, translator_credits, logo_pixbuf)
> - SV * class
> - const gchar * name
> - const gchar * version
> - const gchar * copyright
> - const gchar * comments
> - SV * authors_ref
> - SV * documenters_ref
> - const gchar * translator_credits
> +gnome_about_new (class, name=NULL, version=NULL, copyright=NULL, comments=NULL, authors=NULL, documenters=NULL, translator_credits=NULL, logo_pixbuf=NULL)
> + SV * class
> + const gchar * name
> + const gchar * version
> + const gchar * copyright
> + const gchar * comments
> + SV * authors
> + SV * documenters
> + const gchar * translator_credits
> GdkPixbuf_ornull * logo_pixbuf
> - PREINIT:
> - const gchar **authors = NULL;
> - const gchar **documenters = NULL;
> CODE:
> - /* FIXME pull authors and documentors out of the SVs, which may be
> - * either plain strings or refs to arrays of strings */
> + const gchar ** a = NULL;
> + if (authors && SvOK(authors)) {
> + if (SvRV(authors) && (SvTYPE(SvRV(authors)) == SVt_PVAV)) {
> + AV * av = (AV*)SvRV(authors);
> + int i;
> + a = (const gchar**)malloc(
> + sizeof(const gchar*) * (av_len(av)+2)
> + );
> +
> + for(i=0;i<=av_len(av);i++) {
> + a[i] = SvPV(*av_fetch(av, i, 0), PL_na);
> + }
> + a[i] = NULL;
> + } else {
> + a = (const gchar**)malloc(sizeof(const gchar*) * 2);
> + a[0] = SvPV(authors, PL_na);
> + a[1] = NULL;
> + }
> + }
> + const gchar ** d = NULL;
> + if (documenters && SvOK(documenters)) {
> + if (SvRV(documenters) && (SvTYPE(SvRV(documenters)) == SVt_PVAV)) {
> + AV * av = (AV*)SvRV(documenters);
> + int i;
> + d = (const gchar**)malloc(
> + sizeof(const gchar*) * (av_len(av)+2)
> + );
> +
> + for(i=0;i<=av_len(av);i++) {
> + d[i] = SvPV(*av_fetch(av, i, 0), PL_na);
> + }
> + d[i] = NULL;
> + } else {
> + d = (const gchar**)malloc(sizeof(const gchar*) * 2);
> + d[0] = SvPV(documenters, PL_na);
> + d[1] = NULL;
> + }
> + }
> RETVAL = gnome_about_new (name, version, copyright, comments,
> - authors, documenters, translator_credits,
> - logo_pixbuf);
> + a, d, translator_credits, logo_pixbuf);
> + if (a) free(a);
> OUTPUT:
> RETVAL
> </patch>
>
> _______________________________________________
> gtk-perl-list mailing list
> gtk-perl-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtk-perl-list
--
Chas Owens <alas widomaker com>
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]