va_lists in glib/gtk and set/get(...) functions
- From: Tim Janik <timj gtk org>
 
- To: Gtk+ Developers <gtk-devel-list redhat com>
 
- Subject: va_lists in glib/gtk and set/get(...) functions
 
- Date: Fri, 21 Aug 1998 22:07:14 +0200 (CEST)
 
hey all,
several people have recently encountered problems with the current
implementation of varargs functions (...) in glib/gtk.
Havoc Pennington wants to implement c++ equivalents to e.g.
void gnome_canvas_item_set (GnomeCanvasItem *item, ...);
which basically translates into
GnomeCanvasItem::set (...);
for c++, no parameter to start the va_list from.
what he needs is:
void gnome_canvas_item_set (GnomeCanvasItem *item,
                            const gchar     *arg_name,
                            ...);
and then:
GnomeCanvasItem::set (const gchar *first_arg_name, ...);
so he can issue va_start (args, first_arg_name); but this requires changes
to the underlying arg mechanisms in gtk.
also passing va_lists by reference is a problem on platforms that define va_list
as some kind of array.
i'll therefore go through gtk and glib and change the
void func ([some args], va_list *args1, va_list *args2)
{
}
prototypes to
void func ([some args], va_list args1)
{
  va_list arg2 = args1;
}
also, most of the object/child argument functions (plus the gtk internals)
will be changed to feature the const gchar *first_arg_name variable, so
Havoc's problem will be solved as well.
functions that will be changed in a source compatible manner are:
gtk_object_set, gtk_widget_new, gtk_widget_set and gtk_arg_collect_value
from gtkargcollector.c (this will probably be moved into a public *.h file
that is installed but not included by default for gtk).
source incompatible changes are standing out for
void            g_logv                  (const gchar    *log_domain,
                                         GLogLevelFlags  log_level,
                                         const gchar    *format,
                                         va_list         args1);
gint    g_vsnprintf             (gchar       *string,
                                 gulong       n,
                                 gchar const *format,
                                 va_list      args1);
and the non-public
extern gchar* g_vsprintf (const gchar *fmt, va_list args);
---
ciaoTJ
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]