VirtualBox

Changeset 3934 in vbox for trunk/src


Ignore:
Timestamp:
Jul 31, 2007 8:36:16 AM (17 years ago)
Author:
vboxsync
Message:

Switched to runtime detection and loading of dbus and libhal on Linux hosts (in Main)

Location:
trunk/src/VBox/Main
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/HostImpl.cpp

    r3758 r3934  
    3232#include <linux/cdrom.h>
    3333#ifdef VBOX_USE_LIBHAL
    34 # include <libhal.h>
    35 /* These are defined by libhal.h and by VBox header files. */
    36 # undef TRUE
    37 # undef FALSE
     34// # include <libhal.h>
     35// /* These are defined by libhal.h and by VBox header files. */
     36// # undef TRUE
     37// # undef FALSE
     38#include "vbox-libhal.h"
    3839#endif
    3940#include <errno.h>
     
    15301531    bool halSuccess = false;
    15311532    DBusError dbusError;
    1532     dbus_error_init (&dbusError);
    1533     DBusConnection *dbusConnection = dbus_bus_get(DBUS_BUS_SYSTEM, &dbusError);
     1533    if (!LibHalCheckPresence())
     1534        return false;
     1535    DBusErrorInit (&dbusError);
     1536    DBusConnection *dbusConnection = DBusBusGet(DBUS_BUS_SYSTEM, &dbusError);
    15341537    if (dbusConnection != 0)
    15351538    {
    1536         LibHalContext *halContext = libhal_ctx_new();
     1539        LibHalContext *halContext = LibHalCtxNew();
    15371540        if (halContext != 0)
    15381541        {
    1539             if (libhal_ctx_set_dbus_connection (halContext, dbusConnection))
     1542            if (LibHalCtxSetDBusConnection (halContext, dbusConnection))
    15401543            {
    1541                 if (libhal_ctx_init(halContext, &dbusError))
     1544                if (LibHalCtxInit(halContext, &dbusError))
    15421545                {
    15431546                    int numDevices;
    1544                     char **halDevices = libhal_find_device_by_capability(halContext,
     1547                    char **halDevices = LibHalFindDeviceByCapability(halContext,
    15451548                                                "storage.cdrom", &numDevices, &dbusError);
    15461549                    if (halDevices != 0)
     
    15511554                        for (int i = 0; i < numDevices; i++)
    15521555                        {
    1553                             char *devNode = libhal_device_get_property_string(halContext,
     1556                            char *devNode = LibHalDeviceGetPropertyString(halContext,
    15541557                                                    halDevices[i], "block.device", &dbusError);
    15551558                            if (devNode != 0)
     
    15611564                                    /* We do not check the error here, as this field may
    15621565                                       not even exist. */
    1563                                     vendor = libhal_device_get_property_string(halContext,
     1566                                    vendor = LibHalDeviceGetPropertyString(halContext,
    15641567                                                    halDevices[i], "info.vendor", 0);
    1565                                     product = libhal_device_get_property_string(halContext,
     1568                                    product = LibHalDeviceGetPropertyString(halContext,
    15661569                                                    halDevices[i], "info.product", &dbusError);
    15671570                                    if ((product != 0 && product[0] != 0))
     
    15891592                                            LogRel(("Host::COMGETTER(DVDDrives): failed to get property \"info.product\" for device %s.  dbus error: %s (%s)\n",
    15901593                                                    halDevices[i], dbusError.name, dbusError.message));
    1591                                             dbus_error_free(&dbusError);
     1594                                            DBusErrorFree(&dbusError);
    15921595                                        }
    15931596                                        ComObjPtr <HostDVDDrive> hostDVDDriveObj;
     
    15991602                                    if (vendor != 0)
    16001603                                    {
    1601                                         libhal_free_string(vendor);
     1604                                        LibHalFreeString(vendor);
    16021605                                    }
    16031606                                    if (product != 0)
    16041607                                    {
    1605                                         libhal_free_string(product);
     1608                                        LibHalFreeString(product);
    16061609                                    }
    16071610                                }
     
    16101613                                    LogRel(("Host::COMGETTER(DVDDrives): failed to validate the block device %s as a DVD drive\n"));
    16111614                                }
    1612                                 libhal_free_string(devNode);
     1615                                LibHalFreeString(devNode);
    16131616                            }
    16141617                            else
     
    16161619                                LogRel(("Host::COMGETTER(DVDDrives): failed to get property \"block.device\" for device %s.  dbus error: %s (%s)\n",
    16171620                                        halDevices[i], dbusError.name, dbusError.message));
    1618                                 dbus_error_free(&dbusError);
     1621                                DBusErrorFree(&dbusError);
    16191622                            }
    16201623                        }
    1621                         libhal_free_string_array(halDevices);
     1624                        LibHalFreeStringArray(halDevices);
    16221625                    }
    16231626                    else
    16241627                    {
    16251628                        LogRel(("Host::COMGETTER(DVDDrives): failed to get devices with capability \"storage.cdrom\".  dbus error: %s (%s)\n", dbusError.name, dbusError.message));
    1626                         dbus_error_free(&dbusError);
     1629                        DBusErrorFree(&dbusError);
    16271630                    }
    1628                     if (!libhal_ctx_shutdown(halContext, &dbusError))  /* what now? */
     1631                    if (!LibHalCtxShutdown(halContext, &dbusError))  /* what now? */
    16291632                    {
    16301633                        LogRel(("Host::COMGETTER(DVDDrives): failed to shutdown the libhal context.  dbus error: %s (%s)\n", dbusError.name, dbusError.message));
    1631                         dbus_error_free(&dbusError);
     1634                        DBusErrorFree(&dbusError);
    16321635                    }
    16331636                }
     
    16351638                {
    16361639                    LogRel(("Host::COMGETTER(DVDDrives): failed to initialise libhal context.  dbus error: %s (%s)\n", dbusError.name, dbusError.message));
    1637                     dbus_error_free(&dbusError);
     1640                    DBusErrorFree(&dbusError);
    16381641                }
    1639                 libhal_ctx_free(halContext);
     1642                LibHalCtxFree(halContext);
    16401643            }
    16411644            else
     
    16481651            LogRel(("Host::COMGETTER(DVDDrives): failed to get a libhal context - out of memory?\n"));
    16491652        }
    1650         dbus_connection_unref(dbusConnection);
     1653        DBusConnectionUnref(dbusConnection);
    16511654    }
    16521655    else
    16531656    {
    16541657        LogRel(("Host::COMGETTER(DVDDrives): failed to connect to dbus.  dbus error: %s (%s)\n", dbusError.name, dbusError.message));
    1655         dbus_error_free(&dbusError);
     1658        DBusErrorFree(&dbusError);
    16561659    }
    16571660    return halSuccess;
     
    16701673    bool halSuccess = false;
    16711674    DBusError dbusError;
    1672     dbus_error_init (&dbusError);
    1673     DBusConnection *dbusConnection = dbus_bus_get(DBUS_BUS_SYSTEM, &dbusError);
     1675    if (!LibHalCheckPresence())
     1676        return false;
     1677    DBusErrorInit (&dbusError);
     1678    DBusConnection *dbusConnection = DBusBusGet(DBUS_BUS_SYSTEM, &dbusError);
    16741679    if (dbusConnection != 0)
    16751680    {
    1676         LibHalContext *halContext = libhal_ctx_new();
     1681        LibHalContext *halContext = LibHalCtxNew();
    16771682        if (halContext != 0)
    16781683        {
    1679             if (libhal_ctx_set_dbus_connection (halContext, dbusConnection))
     1684            if (LibHalCtxSetDBusConnection (halContext, dbusConnection))
    16801685            {
    1681                 if (libhal_ctx_init(halContext, &dbusError))
     1686                if (LibHalCtxInit(halContext, &dbusError))
    16821687                {
    16831688                    int numDevices;
    1684                     char **halDevices = libhal_find_device_by_capability(halContext,
     1689                    char **halDevices = LibHalFindDeviceByCapability(halContext,
    16851690                                                "storage", &numDevices, &dbusError);
    16861691                    if (halDevices != 0)
     
    16911696                        for (int i = 0; i < numDevices; i++)
    16921697                        {
    1693                             char *driveType = libhal_device_get_property_string(halContext,
     1698                            char *driveType = LibHalDeviceGetPropertyString(halContext,
    16941699                                                    halDevices[i], "storage.drive_type", 0);
    16951700                            if (driveType != 0)
     
    16971702                                if (strcmp(driveType, "floppy") != 0)
    16981703                                {
    1699                                     libhal_free_string(driveType);
     1704                                    LibHalFreeString(driveType);
    17001705                                    continue;
    17011706                                }
    1702                                 libhal_free_string(driveType);
     1707                                LibHalFreeString(driveType);
    17031708                            }
    17041709                            else
     
    17081713                                continue;
    17091714                            }
    1710                             char *devNode = libhal_device_get_property_string(halContext,
     1715                            char *devNode = LibHalDeviceGetPropertyString(halContext,
    17111716                                                    halDevices[i], "block.device", &dbusError);
    17121717                            if (devNode != 0)
     
    17181723                                    /* We do not check the error here, as this field may
    17191724                                       not even exist. */
    1720                                     vendor = libhal_device_get_property_string(halContext,
     1725                                    vendor = LibHalDeviceGetPropertyString(halContext,
    17211726                                                    halDevices[i], "info.vendor", 0);
    1722                                     product = libhal_device_get_property_string(halContext,
     1727                                    product = LibHalDeviceGetPropertyString(halContext,
    17231728                                                    halDevices[i], "info.product", &dbusError);
    17241729                                    if ((product != 0) && (product[0] != 0))
     
    17461751                                            LogRel(("Host::COMGETTER(FloppyDrives): failed to get property \"info.product\" for device %s.  dbus error: %s (%s)\n",
    17471752                                                    halDevices[i], dbusError.name, dbusError.message));
    1748                                             dbus_error_free(&dbusError);
     1753                                            DBusErrorFree(&dbusError);
    17491754                                        }
    17501755                                        ComObjPtr <HostFloppyDrive> hostFloppyDrive;
     
    17561761                                    if (vendor != 0)
    17571762                                    {
    1758                                         libhal_free_string(vendor);
     1763                                        LibHalFreeString(vendor);
    17591764                                    }
    17601765                                    if (product != 0)
    17611766                                    {
    1762                                         libhal_free_string(product);
     1767                                        LibHalFreeString(product);
    17631768                                    }
    17641769                                }
     
    17671772                                    LogRel(("Host::COMGETTER(FloppyDrives): failed to validate the block device %s as a floppy drive\n"));
    17681773                                }
    1769                                 libhal_free_string(devNode);
     1774                                LibHalFreeString(devNode);
    17701775                            }
    17711776                            else
     
    17731778                                LogRel(("Host::COMGETTER(FloppyDrives): failed to get property \"block.device\" for device %s.  dbus error: %s (%s)\n",
    17741779                                        halDevices[i], dbusError.name, dbusError.message));
    1775                                 dbus_error_free(&dbusError);
     1780                                DBusErrorFree(&dbusError);
    17761781                            }
    17771782                        }
    1778                         libhal_free_string_array(halDevices);
     1783                        LibHalFreeStringArray(halDevices);
    17791784                    }
    17801785                    else
    17811786                    {
    17821787                        LogRel(("Host::COMGETTER(FloppyDrives): failed to get devices with capability \"storage.cdrom\".  dbus error: %s (%s)\n", dbusError.name, dbusError.message));
    1783                         dbus_error_free(&dbusError);
     1788                        DBusErrorFree(&dbusError);
    17841789                    }
    1785                     if (!libhal_ctx_shutdown(halContext, &dbusError))  /* what now? */
     1790                    if (!LibHalCtxShutdown(halContext, &dbusError))  /* what now? */
    17861791                    {
    17871792                        LogRel(("Host::COMGETTER(FloppyDrives): failed to shutdown the libhal context.  dbus error: %s (%s)\n", dbusError.name, dbusError.message));
    1788                         dbus_error_free(&dbusError);
     1793                        DBusErrorFree(&dbusError);
    17891794                    }
    17901795                }
     
    17921797                {
    17931798                    LogRel(("Host::COMGETTER(FloppyDrives): failed to initialise libhal context.  dbus error: %s (%s)\n", dbusError.name, dbusError.message));
    1794                     dbus_error_free(&dbusError);
     1799                    DBusErrorFree(&dbusError);
    17951800                }
    1796                 libhal_ctx_free(halContext);
     1801                LibHalCtxFree(halContext);
    17971802            }
    17981803            else
     
    18051810            LogRel(("Host::COMGETTER(FloppyDrives): failed to get a libhal context - out of memory?\n"));
    18061811        }
    1807         dbus_connection_unref(dbusConnection);
     1812        DBusConnectionUnref(dbusConnection);
    18081813    }
    18091814    else
    18101815    {
    18111816        LogRel(("Host::COMGETTER(FloppyDrives): failed to connect to dbus.  dbus error: %s (%s)\n", dbusError.name, dbusError.message));
    1812         dbus_error_free(&dbusError);
     1817        DBusErrorFree(&dbusError);
    18131818    }
    18141819    return halSuccess;
  • trunk/src/VBox/Main/Makefile.kmk

    r3822 r3934  
    129129VBoxSVC_DEFS.win.x86 += _WIN32_WINNT=0x0500
    130130VBoxSVC_DEFS.win.amd64 += _WIN32_WINNT=0x0510
     131VBoxSVC_DEFS.linux += VBOX_USE_LIBHAL
     132
    131133VBoxSVC_INCS = \
    132134        include \
     
    146148        $(LIB_VMM) \
    147149        $(LIB_REM)
    148 
    149 ifdef VBOX_WITH_LIBHAL
    150 VBoxSVC_CXXFLAGS += \
    151         $(LIB_HAL_CFLAGS)
    152 VBoxSVC_LIBPATH += \
    153         $(LIB_HAL_LIBPATH)
    154 VBoxSVC_LIBS += \
    155         $(LIB_HAL_LIBS)
    156 VBoxSVC_DEFS += \
    157         VBOX_USE_LIBHAL
    158 endif
    159150
    160151VBoxSVC_SOURCES = \
     
    203194        win32/VBoxSVC.rc
    204195
     196VBoxSVC_SOURCES.linux = \
     197        linux/vbox-libhal.cpp
     198
    205199ifdef VBOX_WITH_XPCOM
    206200VBoxSVC_SOURCES += \
Note: See TracChangeset for help on using the changeset viewer.

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