gnutls: add closure-related fields to TLS pollable sources
authorDan Winship <danw@gnome.org>
Tue, 7 Dec 2010 22:08:38 +0000 (23:08 +0100)
committerDan Winship <danw@gnome.org>
Tue, 7 Dec 2010 22:08:38 +0000 (23:08 +0100)
This brings in glib-genmarshal...

.gitignore
configure.ac
proxy/libproxy/Makefile.am
tls/gnutls/Makefile.am
tls/gnutls/gnutls-marshal.list [new file with mode: 0644]
tls/gnutls/gtlsconnection-gnutls.c

index 725eca7..ed6e2f5 100644 (file)
@@ -6,6 +6,7 @@ Makefile
 *.o
 *.lo
 *.la
+*-marshal.[ch]
 
 # autofoo stuff here
 config.*
index 2617595..45ab851 100644 (file)
@@ -32,10 +32,7 @@ AM_GLIB_GNU_GETTEXT
 dnl *****************************
 dnl *** Check GLib GIO        ***
 dnl *****************************
-
-PKG_CHECK_MODULES(GIO, [gio-2.0 >= 2.27.4])
-AC_SUBST(GIO_CFLAGS)
-AC_SUBST(GIO_LIBS)
+AM_PATH_GLIB_2_0(2.27.4,,,gio)
 
 GIO_MODULE_DIR=$($PKG_CONFIG --variable giomoduledir gio-2.0)
 AS_IF([test "x$GIO_MODULE_DIR" = "x"],
index dbd9ba0..e0d9ef8 100644 (file)
@@ -15,13 +15,13 @@ libgiolibproxy_la_SOURCES =                 \
 
 libgiolibproxy_la_CFLAGS = \
        -DG_LOG_DOMAIN=\"GLib-Net\"     \
-       $(GIO_CFLAGS)                   \
+       $(GLIB_CFLAGS)                  \
        $(LIBPROXY_CFLAGS)              \
        -DGIO_MODULE_DIR=\"$(GIO_MODULE_DIR)\"  \
        -DG_DISABLE_DEPRECATED
 
 libgiolibproxy_la_LDFLAGS = $(module_flags)
 libgiolibproxy_la_LIBADD = \
-               $(GIO_LIBS) \
+               $(GLIB_LIBS) \
                $(LIBPROXY_LIBS) \
                $(NULL)
index 4d2824b..a206b08 100644 (file)
@@ -7,8 +7,19 @@ module_flags = -export_dynamic -avoid-version -module -no-undefined -export-symb
 giomodule_LTLIBRARIES = libgiognutls.la
 giomoduledir = $(GIO_MODULE_DIR)
 
+gnutls-marshal.h: gnutls-marshal.list
+       $(AM_V_GEN) $(GLIB_GENMARSHAL) --prefix=_gnutls_marshal $(srcdir)/gnutls-marshal.list --header --internal > $@.tmp && \
+         mv $@.tmp $@
+
+gnutls-marshal.c: gnutls-marshal.h gnutls-marshal.list
+       $(AM_V_GEN) (echo "#include \"gnutls-marshal.h\""; \
+       $(GLIB_GENMARSHAL) --prefix=_gnutls_marshal $(srcdir)/gnutls-marshal.list --body --internal) > $@.tmp && \
+         mv $@.tmp $@
+
 libgiognutls_la_SOURCES =              \
        gnutls-module.c                 \
+       gnutls-marshal.c                \
+       gnutls-marshal.h                \
        gtlsbackend-gnutls.c            \
        gtlsbackend-gnutls.h            \
        gtlscertificate-gnutls.c        \
@@ -25,9 +36,11 @@ libgiognutls_la_SOURCES =            \
        gtlsserverconnection-gnutls.h   \
        $(NULL)
 
+$(libgiognutls_la_OBJECTS): gnutls-marshal.h
+
 libgiognutls_la_CFLAGS = \
        -DG_LOG_DOMAIN=\"GLib-Net\"     \
-       $(GIO_CFLAGS)                   \
+       $(GLIB_CFLAGS)                  \
        $(LIBGNUTLS_CFLAGS)             \
        $(LIBGCRYPT_CFLAGS)             \
        -DGIO_MODULE_DIR=\"$(GIO_MODULE_DIR)\"  \
@@ -35,7 +48,17 @@ libgiognutls_la_CFLAGS = \
 
 libgiognutls_la_LDFLAGS = $(module_flags)
 libgiognutls_la_LIBADD =               \
-       $(GIO_LIBS)                     \
+       $(GLIB_LIBS)                    \
        $(GNUTLS_LIBS)                  \
        $(LIBGCRYPT_LIBS)               \
        $(NULL)
+
+BUILT_SOURCES =                \
+       gnutls-marshal.h        \
+       gnutls-marshal.c
+
+EXTRA_DIST =                   \
+       gnutls-marshal.list
+
+CLEANFILES =                   \
+       $(BUILT_SOURCES)
diff --git a/tls/gnutls/gnutls-marshal.list b/tls/gnutls/gnutls-marshal.list
new file mode 100644 (file)
index 0000000..22a6d67
--- /dev/null
@@ -0,0 +1 @@
+BOOL:VOID
index f1327f2..de25e4d 100644 (file)
@@ -31,6 +31,7 @@
 #include "gtlsinputstream-gnutls.h"
 #include "gtlsoutputstream-gnutls.h"
 #include "gtlsserverconnection-gnutls.h"
+#include "gnutls-marshal.h"
 #include <glib/gi18n-lib.h>
 
 static void g_tls_connection_gnutls_get_property (GObject    *object,
@@ -635,12 +636,38 @@ gnutls_source_finalize (GSource *source)
     g_source_unref (gnutls_source->child_source);
 }
 
+static gboolean
+g_tls_connection_gnutls_source_closure_callback (GObject  *stream,
+                                                gpointer  data)
+{
+  GClosure *closure = data;
+
+  GValue param = { 0, };
+  GValue result_value = { 0, };
+  gboolean result;
+
+  g_value_init (&result_value, G_TYPE_BOOLEAN);
+
+  g_value_init (&param, G_TYPE_OBJECT);
+  g_value_set_object (&param, stream);
+
+  g_closure_invoke (closure, &result_value, 1, &param, NULL);
+
+  result = g_value_get_boolean (&result_value);
+  g_value_unset (&result_value);
+  g_value_unset (&param);
+
+  return result;
+}
+
 static GSourceFuncs gnutls_source_funcs =
 {
   gnutls_source_prepare,
   gnutls_source_check,
   gnutls_source_dispatch,
-  gnutls_source_finalize
+  gnutls_source_finalize,
+  (GSourceFunc)g_tls_connection_gnutls_source_closure_callback,
+  (GSourceDummyMarshal)_gnutls_marshal_BOOLEAN__VOID,
 };
 
 GSource *