mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2025-12-28 08:30:09 +01:00
having a bad cvs add day apparently
This commit is contained in:
parent
4067152efc
commit
1617fbe36c
2 changed files with 195 additions and 0 deletions
178
test/test-utils.c
Normal file
178
test/test-utils.c
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
#include "test-utils.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DBusLoop *loop;
|
||||
DBusConnection *connection;
|
||||
|
||||
} CData;
|
||||
|
||||
dbus_bool_t
|
||||
test_connection_dispatch_one_message (DBusConnection *connection)
|
||||
{
|
||||
DBusDispatchStatus status;
|
||||
|
||||
while ((status = dbus_connection_dispatch (connection)) == DBUS_DISPATCH_NEED_MEMORY)
|
||||
_dbus_wait_for_memory ();
|
||||
|
||||
return status == DBUS_DISPATCH_DATA_REMAINS;
|
||||
}
|
||||
|
||||
void
|
||||
test_connection_dispatch_all_messages (DBusConnection *connection)
|
||||
{
|
||||
while (test_connection_dispatch_one_message (connection))
|
||||
;
|
||||
}
|
||||
|
||||
static dbus_bool_t
|
||||
connection_watch_callback (DBusWatch *watch,
|
||||
unsigned int condition,
|
||||
void *data)
|
||||
{
|
||||
CData *cd = data;
|
||||
dbus_bool_t retval;
|
||||
|
||||
dbus_connection_ref (cd->connection);
|
||||
|
||||
retval = dbus_connection_handle_watch (cd->connection, watch, condition);
|
||||
|
||||
test_connection_dispatch_all_messages (cd->connection);
|
||||
|
||||
dbus_connection_unref (cd->connection);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static dbus_bool_t
|
||||
add_watch (DBusWatch *watch,
|
||||
void *data)
|
||||
{
|
||||
CData *cd = data;
|
||||
|
||||
return _dbus_loop_add_watch (cd->loop,
|
||||
watch,
|
||||
connection_watch_callback,
|
||||
cd, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
remove_watch (DBusWatch *watch,
|
||||
void *data)
|
||||
{
|
||||
CData *cd = data;
|
||||
|
||||
_dbus_loop_remove_watch (cd->loop,
|
||||
watch, connection_watch_callback, cd);
|
||||
}
|
||||
|
||||
static void
|
||||
connection_timeout_callback (DBusTimeout *timeout,
|
||||
void *data)
|
||||
{
|
||||
CData *cd = data;
|
||||
|
||||
dbus_connection_ref (cd->connection);
|
||||
|
||||
/* Can return FALSE on OOM but we just let it fire again later */
|
||||
dbus_timeout_handle (timeout);
|
||||
|
||||
test_connection_dispatch_all_messages (cd->connection);
|
||||
|
||||
dbus_connection_unref (cd->connection);
|
||||
}
|
||||
|
||||
static dbus_bool_t
|
||||
add_timeout (DBusTimeout *timeout,
|
||||
void *data)
|
||||
{
|
||||
CData *cd = data;
|
||||
|
||||
return _dbus_loop_add_timeout (cd->loop,
|
||||
timeout, connection_timeout_callback, cd, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
remove_timeout (DBusTimeout *timeout,
|
||||
void *data)
|
||||
{
|
||||
CData *cd = data;
|
||||
|
||||
_dbus_loop_remove_timeout (cd->loop,
|
||||
timeout, connection_timeout_callback, cd);
|
||||
}
|
||||
|
||||
static void
|
||||
cdata_free (void *data)
|
||||
{
|
||||
CData *cd = data;
|
||||
|
||||
dbus_connection_unref (cd->connection);
|
||||
_dbus_loop_unref (cd->loop);
|
||||
|
||||
dbus_free (cd);
|
||||
}
|
||||
|
||||
static CData*
|
||||
cdata_new (DBusLoop *loop,
|
||||
DBusConnection *connection)
|
||||
{
|
||||
CData *cd;
|
||||
|
||||
cd = dbus_new0 (CData, 1);
|
||||
if (cd == NULL)
|
||||
return NULL;
|
||||
|
||||
cd->loop = loop;
|
||||
cd->connection = connection;
|
||||
|
||||
dbus_connection_ref (cd->connection);
|
||||
_dbus_loop_ref (cd->loop);
|
||||
|
||||
return cd;
|
||||
}
|
||||
|
||||
dbus_bool_t
|
||||
test_connection_setup (DBusLoop *loop,
|
||||
DBusConnection *connection)
|
||||
{
|
||||
CData *cd;
|
||||
|
||||
cd = cdata_new (loop, connection);
|
||||
if (cd == NULL)
|
||||
goto nomem;
|
||||
|
||||
/* Because dbus-mainloop.c checks dbus_timeout_get_enabled(),
|
||||
* dbus_watch_get_enabled() directly, we don't have to provide
|
||||
* "toggled" callbacks.
|
||||
*/
|
||||
|
||||
if (!dbus_connection_set_watch_functions (connection,
|
||||
add_watch,
|
||||
remove_watch,
|
||||
NULL,
|
||||
cd, cdata_free))
|
||||
goto nomem;
|
||||
|
||||
|
||||
cd = cdata_new (loop, connection);
|
||||
if (cd == NULL)
|
||||
goto nomem;
|
||||
|
||||
if (!dbus_connection_set_timeout_functions (connection,
|
||||
add_timeout,
|
||||
remove_timeout,
|
||||
NULL,
|
||||
cd, cdata_free))
|
||||
{
|
||||
dbus_connection_set_watch_functions (connection, NULL, NULL, NULL, NULL, NULL);
|
||||
goto nomem;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
||||
nomem:
|
||||
if (cd)
|
||||
cdata_free (cd);
|
||||
return FALSE;
|
||||
}
|
||||
17
test/test-utils.h
Normal file
17
test/test-utils.h
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#ifndef TEST_UTILS_H
|
||||
#define TEST_UTILS_H
|
||||
#include <config.h>
|
||||
#define DBUS_COMPILATION /* Cheat and use private stuff */
|
||||
#include <dbus/dbus.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <dbus/dbus-mainloop.h>
|
||||
#include <dbus/dbus-internals.h>
|
||||
#undef DBUS_COMPILATION
|
||||
|
||||
dbus_bool_t test_connection_setup (DBusLoop *loop,
|
||||
DBusConnection *connection);
|
||||
void test_connection_dispatch_all_messages (DBusConnection *connection);
|
||||
dbus_bool_t test_connection_dispatch_one_message (DBusConnection *connection);
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Reference in a new issue