3
* Module to dynamically load libdbus and load all symbols
4
* which are needed by VirtualBox.
8
* Copyright (C) 2008 Sun Microsystems, Inc.
10
* This file is part of VirtualBox Open Source Edition (OSE), as
11
* available from http://www.virtualbox.org. This file is free software;
12
* you can redistribute it and/or modify it under the terms of the GNU
13
* General Public License (GPL) as published by the Free Software
14
* Foundation, in version 2 as it comes in the "COPYING" file of the
15
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
19
* Clara, CA 95054 USA or visit http://www.sun.com if you need
20
* additional information or have any questions.
23
#include "vbox-dbus.h"
25
#define LOG_GROUP LOG_GROUP_MAIN
30
#include <iprt/assert.h>
31
#include <iprt/once.h>
33
/** The following are the symbols which we need from libdbus. */
34
#define VBOX_PROXY_STUB(function, rettype, signature, shortsig) \
35
void (*function ## _fn)(void); \
36
rettype function signature \
37
{ return ( (rettype (*) signature) function ## _fn ) shortsig; }
39
#include "vbox-dbus-internal.h"
41
static int32_t loadDBusLibOnce(void *, void *);
43
#undef VBOX_PROXY_STUB
45
/* Now comes a table of functions to be loaded from libdbus-1 */
52
#define VBOX_PROXY_STUB(s, dummy1, dummy2, dummy3 ) { #s , & s ## _fn } ,
53
static SHARED_FUNC SharedFuncs[] =
55
#include "vbox-dbus-internal.h"
58
#undef VBOX_PROXY_STUB
61
int VBoxLoadDBusLib(void)
63
static RTONCE sOnce = RTONCE_INITIALIZER;
66
int rc = RTOnce (&sOnce, loadDBusLibOnce, NULL, NULL);
67
LogFlowFunc(("rc = %Rrc\n", rc));
71
/* The function which does the actual work for VBoxLoadDBusLib, serialised for
73
static int32_t loadDBusLibOnce(void *, void *)
75
int rc = VINF_SUCCESS;
79
rc = RTLdrLoad(VBOX_DBUS_1_3_LIB, &hLib);
81
LogRelFunc(("Failed to load library %s\n", VBOX_DBUS_1_3_LIB));
82
for (unsigned i = 0; RT_SUCCESS(rc) && SharedFuncs[i].name != NULL; ++i)
83
rc = RTLdrGetSymbol(hLib, SharedFuncs[i].name, (void**)SharedFuncs[i].fn);
84
LogFlowFunc(("rc = %Rrc\n", rc));