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

« back to all changes in this revision

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

  • Committer: Bazaar Package Importer
  • Author(s): Felix Geyer
  • Date: 2011-01-30 23:27:25 UTC
  • mfrom: (0.3.12 upstream)
  • Revision ID: james.westby@ubuntu.com-20110130232725-2ouajjd2ggdet0zd
Tags: 4.0.2-dfsg-1ubuntu1
* Merge from Debian unstable, remaining changes:
  - Add Apport hook.
    - debian/virtualbox-ose.files/source_virtualbox-ose.py
    - debian/virtualbox-ose.install
  - Drop *-source packages.
* Drop ubuntu-01-fix-build-gcc45.patch, fixed upstream.
* Drop ubuntu-02-as-needed.patch, added to the Debian package.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/** @file
2
 
 *
3
 
 * Module to dynamically load libhal and libdbus and load all symbols
4
 
 * which are needed by VirtualBox.
5
 
 */
6
 
 
7
 
/*
8
 
 * Copyright (C) 2006-2007 Oracle Corporation
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
 
 
19
 
#include "vbox-libhal.h"
20
 
 
21
 
#include <iprt/err.h>
22
 
#include <iprt/ldr.h>
23
 
 
24
 
/**
25
 
 * Whether we have tried to load libdbus and libhal yet.  This flag should only be set
26
 
 * to "true" after we have either loaded both libraries and all symbols which we need,
27
 
 * or failed to load something and unloaded and set back to zero pLibDBus and pLibHal.
28
 
 */
29
 
static bool gCheckedForLibHal = false;
30
 
/**
31
 
 * Pointer to the libhal shared object.  This should only be set once all needed libraries
32
 
 * and symbols have been successfully loaded.
33
 
 */
34
 
static RTLDRMOD ghLibHal = 0;
35
 
 
36
 
/** The following are the symbols which we need from libdbus and libhal. */
37
 
void (*gDBusErrorInit)(DBusError *);
38
 
DBusConnection *(*gDBusBusGet)(DBusBusType, DBusError *);
39
 
void (*gDBusErrorFree)(DBusError *);
40
 
void (*gDBusConnectionUnref)(DBusConnection *);
41
 
LibHalContext *(*gLibHalCtxNew)(void);
42
 
dbus_bool_t (*gLibHalCtxSetDBusConnection)(LibHalContext *, DBusConnection *);
43
 
dbus_bool_t (*gLibHalCtxInit)(LibHalContext *, DBusError *);
44
 
char **(*gLibHalFindDeviceStringMatch)(LibHalContext *, const char *, const char *, int *,
45
 
        DBusError *);
46
 
char *(*gLibHalDeviceGetPropertyString)(LibHalContext *, const char *, const char *, DBusError *);
47
 
void (*gLibHalFreeString)(char *);
48
 
void (*gLibHalFreeStringArray)(char **);
49
 
dbus_bool_t (*gLibHalCtxShutdown)(LibHalContext *, DBusError *);
50
 
dbus_bool_t (*gLibHalCtxFree)(LibHalContext *);
51
 
 
52
 
bool gLibHalCheckPresence(void)
53
 
{
54
 
    RTLDRMOD hLibHal;
55
 
 
56
 
    if (ghLibHal != 0 && gCheckedForLibHal == true)
57
 
        return true;
58
 
    if (gCheckedForLibHal == true)
59
 
        return false;
60
 
    if (!RT_SUCCESS(RTLdrLoad(LIB_HAL, &hLibHal)))
61
 
    {
62
 
        return false;
63
 
    }
64
 
    if (   RT_SUCCESS(RTLdrGetSymbol(hLibHal, "dbus_error_init", (void **) &gDBusErrorInit))
65
 
        && RT_SUCCESS(RTLdrGetSymbol(hLibHal, "dbus_bus_get", (void **) &gDBusBusGet))
66
 
        && RT_SUCCESS(RTLdrGetSymbol(hLibHal, "dbus_error_free", (void **) &gDBusErrorFree))
67
 
        && RT_SUCCESS(RTLdrGetSymbol(hLibHal, "dbus_connection_unref",
68
 
                                     (void **) &gDBusConnectionUnref))
69
 
        && RT_SUCCESS(RTLdrGetSymbol(hLibHal, "libhal_ctx_new", (void **) &gLibHalCtxNew))
70
 
        && RT_SUCCESS(RTLdrGetSymbol(hLibHal, "libhal_ctx_set_dbus_connection",
71
 
                                     (void **) &gLibHalCtxSetDBusConnection))
72
 
        && RT_SUCCESS(RTLdrGetSymbol(hLibHal, "libhal_ctx_init", (void **) &gLibHalCtxInit))
73
 
        && RT_SUCCESS(RTLdrGetSymbol(hLibHal, "libhal_manager_find_device_string_match",
74
 
                                     (void **) &gLibHalFindDeviceStringMatch))
75
 
        && RT_SUCCESS(RTLdrGetSymbol(hLibHal, "libhal_device_get_property_string",
76
 
                                     (void **) &gLibHalDeviceGetPropertyString))
77
 
        && RT_SUCCESS(RTLdrGetSymbol(hLibHal, "libhal_free_string", (void **) &gLibHalFreeString))
78
 
        && RT_SUCCESS(RTLdrGetSymbol(hLibHal, "libhal_free_string_array",
79
 
                                     (void **) &gLibHalFreeStringArray))
80
 
        && RT_SUCCESS(RTLdrGetSymbol(hLibHal, "libhal_ctx_shutdown", (void **) &gLibHalCtxShutdown))
81
 
        && RT_SUCCESS(RTLdrGetSymbol(hLibHal, "libhal_ctx_free", (void **) &gLibHalCtxFree))
82
 
       )
83
 
    {
84
 
        ghLibHal = hLibHal;
85
 
        gCheckedForLibHal = true;
86
 
        return true;
87
 
    }
88
 
    else
89
 
    {
90
 
        RTLdrClose(hLibHal);
91
 
        gCheckedForLibHal = true;
92
 
        return false;
93
 
    }
94
 
}