~ubuntu-branches/ubuntu/raring/virtualbox-ose/raring

« back to all changes in this revision

Viewing changes to src/VBox/Main/linux/vbox-dbus.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Felix Geyer
  • Date: 2009-12-18 16:44:29 UTC
  • mfrom: (0.3.3 upstream) (0.4.6 squeeze)
  • Revision ID: james.westby@ubuntu.com-20091218164429-jd34ccexpv5na11a
Tags: 3.1.2-dfsg-1ubuntu1
* Merge from Debian unstable (LP: #498219), remaining changes:
  - Disable update action
    - debian/patches/u01-disable-update-action.dpatch
  - VirtualBox should go in Accessories, not in System tools (LP: #288590)
    - debian/virtualbox-ose-qt.files/virtualbox-ose.desktop
  - Add Apport hook
    - debian/virtualbox-ose.files/source_virtualbox-ose.py
    - debian/virtualbox-ose.install
  - Add Launchpad integration
    - debian/control
    - debian/lpi-bug.xpm
    - debian/patches/u02-lp-integration.dpatch
* Fixes the following bugs:
  - Kernel module fails to build with Linux >= 2.6.32 (LP: #474625)
  - X.Org drivers need to be rebuilt against X-Server 1.7 (LP: #495935)
  - The *-source packages try to build the kernel modules even though the
    kernel headers aren't available (LP: #473334)
* Replace *-source packages with transitional packages for *-dkms.
* Adapt u01-disable-update-action.dpatch and u02-lp-integration.dpatch for
  new upstream version.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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) \
35
 
void (*function ## _fn)(void); \
36
 
rettype function signature \
37
 
{ return ( (rettype (*) signature) function ## _fn ) shortsig; }
38
 
 
39
 
#include "vbox-dbus-internal.h"
40
 
 
41
 
static 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 */
46
 
typedef 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 } ,
53
 
static SHARED_FUNC SharedFuncs[] =
54
 
{
55
 
#include "vbox-dbus-internal.h"
56
 
    { NULL, NULL }
57
 
};
58
 
#undef VBOX_PROXY_STUB
59
 
 
60
 
/* extern */
61
 
int 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. */
73
 
static int32_t loadDBusLibOnce(void *, void *)
74
 
{
75
 
    int rc = VINF_SUCCESS;
76
 
    RTLDRMOD hLib;
77
 
 
78
 
    LogFlowFunc(("\n"));
79
 
    rc = RTLdrLoad(VBOX_DBUS_1_3_LIB, &hLib);
80
 
    if (RT_FAILURE(rc))
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));
85
 
    return rc;
86
 
}
87