VirtualBox

source: vbox/trunk/src/VBox/Main/linux/vbox-dbus.cpp@ 16684

Last change on this file since 16684 was 16178, checked in by vboxsync, 16 years ago

Main/Linux: fixes and clean ups in the DBus code

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.6 KB
Line 
1/** @file
2 *
3 * Module to dynamically load libdbus and load all symbols
4 * which are needed by VirtualBox.
5 */
6
7/*
8 * Copyright (C) 2008 Sun Microsystems, Inc.
9 *
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.
17 *
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.
21 */
22
23#include "vbox-dbus.h"
24
25#define LOG_GROUP LOG_GROUP_MAIN
26#include <VBox/log.h>
27#include <VBox/err.h>
28
29#include <iprt/ldr.h>
30#include <iprt/assert.h>
31#include <iprt/once.h>
32
33/** The following are the symbols which we need from libdbus. */
34#define VBOX_PROXY_STUB(function, rettype, signature, shortsig) \
35void (*function ## _fn)(void); \
36rettype function signature \
37{ return ( (rettype (*) signature) function ## _fn ) shortsig; }
38
39#include "vbox-dbus-internal.h"
40
41static int32_t loadDBusLibOnce(void *, void *);
42
43#undef VBOX_PROXY_STUB
44
45/* Now comes a table of functions to be loaded from libdbus-1 */
46typedef struct
47{
48 const char *name;
49 void (**fn)(void);
50} SHARED_FUNC;
51
52#define VBOX_PROXY_STUB(s, dummy1, dummy2, dummy3 ) { #s , & s ## _fn } ,
53static SHARED_FUNC SharedFuncs[] =
54{
55#include "vbox-dbus-internal.h"
56 { NULL, NULL }
57};
58#undef VBOX_PROXY_STUB
59
60/* extern */
61int VBoxLoadDBusLib(void)
62{
63 static RTONCE sOnce = RTONCE_INITIALIZER;
64
65 LogFlowFunc(("\n"));
66 int rc = RTOnce (&sOnce, loadDBusLibOnce, NULL, NULL);
67 LogFlowFunc(("rc = %Rrc\n", rc));
68 return rc;
69}
70
71/* The function which does the actual work for VBoxLoadDBusLib, serialised for
72 * thread safety. */
73static int32_t loadDBusLibOnce(void *, void *)
74{
75 int rc = VINF_SUCCESS;
76 RTLDRMOD hLib;
77
78 LogFlowFunc(("\n"));
79 rc = RTLdrLoad(VBOX_DBUS_1_2_LIB, &hLib);
80 if (RT_FAILURE(rc))
81 rc = RTLdrLoad(VBOX_DBUS_1_3_LIB, &hLib);
82 if (RT_FAILURE(rc))
83 LogRelFunc(("Failed to load library %s or %s\n",
84 VBOX_DBUS_1_2_LIB, VBOX_DBUS_1_3_LIB));
85 for (unsigned i = 0; RT_SUCCESS(rc) && SharedFuncs[i].name != NULL; ++i)
86 rc = RTLdrGetSymbol(hLib, SharedFuncs[i].name, (void**)SharedFuncs[i].fn);
87 LogFlowFunc(("rc = %Rrc\n", rc));
88 return rc;
89}
90
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette