Changeset 14722 in vbox
- Timestamp:
- Nov 27, 2008 5:11:36 PM (16 years ago)
- svn:sync-xref-src-repo-rev:
- 40035
- Location:
- trunk/src/VBox/Main
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/HostImpl.cpp
r14715 r14722 35 35 # define _LINUX_BYTEORDER_GENERIC_H 36 36 # include <linux/cdrom.h> 37 # ifdef VBOX_USE_LIBHAL 38 // # include <libhal.h> 39 // /* These are defined by libhal.h and by VBox header files. */ 40 // # undef TRUE 41 // # undef FALSE 42 # include "vbox-libhal.h" 37 # ifdef VBOX_WITH_LIBHAL 38 # include <libhal.h> 39 /* These are defined by libhal.h and by VBox header files. */ 40 # undef TRUE 41 # undef FALSE 43 42 # endif 44 43 # include <errno.h> … … 68 67 # include <sys/mnttab.h> 69 68 # include <sys/mntent.h> 69 /* Dynamic loading of libhal on Solaris hosts */ 70 70 # ifdef VBOX_USE_LIBHAL 71 71 # include "vbox-libhal.h" … … 360 360 361 361 #elif defined(RT_OS_LINUX) 362 #ifdef VBOX_ USE_LIBHAL362 #ifdef VBOX_WITH_LIBHAL 363 363 if (!getDVDInfoFromHal(list)) /* Playing with #defines in this way is nasty, I know. */ 364 #endif /* USE_LIBHAL defined */364 #endif /* VBOX_WITH_LIBHAL defined */ 365 365 // On Linux without hal, the situation is much more complex. We will take a 366 366 // heuristical approach and also allow the user to specify a list of host … … 468 468 delete[] hostDrives; 469 469 #elif defined(RT_OS_LINUX) 470 #ifdef VBOX_ USE_LIBHAL470 #ifdef VBOX_WITH_LIBHAL 471 471 if (!getFloppyInfoFromHal(list)) /* Playing with #defines in this way is nasty, I know. */ 472 #endif /* USE_LIBHAL defined */472 #endif /* VBOX_WITH_LIBHAL defined */ 473 473 // As with the CDROMs, on Linux we have to take a multi-level approach 474 474 // involving parsing the mount tables. As this is not bulletproof, we'll … … 1888 1888 1889 1889 #if defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS) 1890 # ifdef VBOX_USE_LIBHAL 1890 # ifdef VBOX_WITH_LIBHAL /* Linux, load libhal statically */ 1891 1892 /** Helper function for setting up a libhal context */ 1893 bool hostInitLibHal(DBusConnection **pDBusConnection, 1894 LibHalContext **pLibHalContext) 1895 { 1896 bool halSuccess = true; 1897 DBusError dbusError; 1898 1899 dbus_error_init (&dbusError); 1900 DBusConnection *dbusConnection; 1901 LibHalContext *libhalContext; 1902 dbusConnection = dbus_bus_get (DBUS_BUS_SYSTEM, &dbusError); 1903 if (dbusConnection == NULL) 1904 halSuccess = false; 1905 if (dbusConnection == NULL && !dbus_error_is_set (&dbusError)) 1906 LogRelFunc (("Unresolved error getting DBus connection.\n")); 1907 if (halSuccess) 1908 { 1909 libhalContext = libhal_ctx_new(); 1910 if (libhalContext == NULL) 1911 halSuccess = false; 1912 } 1913 if ( halSuccess 1914 && !libhal_ctx_set_dbus_connection (libhalContext, dbusConnection)) 1915 halSuccess = false; 1916 if ( halSuccess 1917 && !libhal_ctx_init (libhalContext, &dbusError)) 1918 { 1919 halSuccess = false; 1920 if (!dbus_error_is_set (&dbusError)) 1921 LogRelFunc (("Unresolved error initialising the libhal context.\n")); 1922 } 1923 if (halSuccess) 1924 { 1925 *pDBusConnection = dbusConnection; 1926 *pLibHalContext = libhalContext; 1927 } 1928 return halSuccess; 1929 } 1930 1931 /** 1932 * Helper function to query the hal subsystem for information about DVD drives attached to the 1933 * system. 1934 * 1935 * @returns true if information was successfully obtained, false otherwise 1936 * @retval list drives found will be attached to this list 1937 */ 1938 bool Host::getDVDInfoFromHal(std::list <ComObjPtr <HostDVDDrive> > &list) 1939 { 1940 DBusConnection *dbusConnection; 1941 LibHalContext *libhalContext; 1942 int numDevices = 0; 1943 char **halDevices = NULL; 1944 bool halSuccess = hostInitLibHal (&dbusConnection, &libhalContext); 1945 if (halSuccess) 1946 halDevices = libhal_manager_find_device_string_match(libhalContext, 1947 "storage.drive_type", "cdrom", 1948 &numDevices, NULL); 1949 /* Hal is installed and working, so if no devices are reported, assume 1950 that there are none. */ 1951 for (int i = 0; halSuccess && i < numDevices; ++i) 1952 { 1953 char *devNode = libhal_device_get_property_string(libhalContext, 1954 halDevices[i], "block.device", NULL); 1955 Utf8Str description; 1956 char *vendor = NULL, *product = NULL; 1957 if (devNode != NULL) 1958 { 1959 vendor = libhal_device_get_property_string(libhalContext, 1960 halDevices[i], "info.vendor", NULL); 1961 product = libhal_device_get_property_string(libhalContext, 1962 halDevices[i], "info.product", NULL); 1963 if ((product != 0 && product[0] != 0)) 1964 { 1965 if ((vendor != 0) && (vendor[0] != 0)) 1966 description = Utf8StrFmt ("%s %s", 1967 vendor, product); 1968 else 1969 description = product; 1970 } 1971 ComObjPtr <HostDVDDrive> hostDVDDriveObj; 1972 hostDVDDriveObj.createObject(); 1973 if (!description.isNull ()) 1974 hostDVDDriveObj->init (Bstr (devNode), 1975 Bstr (halDevices[i]), 1976 Bstr (description)); 1977 else 1978 hostDVDDriveObj->init (Bstr (devNode), 1979 Bstr (halDevices[i])); 1980 list.push_back (hostDVDDriveObj); 1981 if (vendor != NULL) 1982 libhal_free_string(vendor); 1983 if (product != NULL) 1984 libhal_free_string(product); 1985 libhal_free_string(devNode); 1986 } 1987 } 1988 if (halDevices != NULL) 1989 libhal_free_string_array(halDevices); 1990 if (halSuccess) 1991 libhal_ctx_shutdown (libhalContext, NULL); 1992 if (libhalContext != NULL) 1993 libhal_ctx_free (libhalContext); 1994 if (dbusConnection != NULL) 1995 dbus_connection_unref (dbusConnection); 1996 return halSuccess; 1997 } 1998 1999 /** 2000 * Helper function to query the hal subsystem for information about floppy drives attached to the 2001 * system. 2002 * 2003 * @returns true if information was successfully obtained, false otherwise 2004 * @retval list drives found will be attached to this list 2005 */ 2006 bool Host::getFloppyInfoFromHal(std::list <ComObjPtr <HostFloppyDrive> > &list) 2007 { 2008 DBusConnection *dbusConnection; 2009 LibHalContext *libhalContext; 2010 int numDevices = 0; 2011 char **halDevices = NULL; 2012 bool halSuccess = hostInitLibHal (&dbusConnection, &libhalContext); 2013 if (halSuccess) 2014 halDevices = libhal_manager_find_device_string_match(libhalContext, 2015 "storage.drive_type", "floppy", 2016 &numDevices, NULL); 2017 /* Hal is installed and working, so if no devices are reported, assume 2018 that there are none. */ 2019 for (int i = 0; halSuccess && i < numDevices; ++i) 2020 { 2021 char *devNode = libhal_device_get_property_string(libhalContext, 2022 halDevices[i], "block.device", NULL); 2023 Utf8Str description; 2024 char *vendor = NULL, *product = NULL; 2025 if (devNode != NULL) 2026 { 2027 vendor = libhal_device_get_property_string(libhalContext, 2028 halDevices[i], "info.vendor", NULL); 2029 product = libhal_device_get_property_string(libhalContext, 2030 halDevices[i], "info.product", NULL); 2031 if ((product != 0 && product[0] != 0)) 2032 { 2033 if ((vendor != 0) && (vendor[0] != 0)) 2034 description = Utf8StrFmt ("%s %s", 2035 vendor, product); 2036 else 2037 description = product; 2038 } 2039 ComObjPtr <HostFloppyDrive> hostFloppyDriveObj; 2040 hostFloppyDriveObj.createObject(); 2041 if (!description.isNull ()) 2042 hostFloppyDriveObj->init (Bstr (devNode), 2043 Bstr (halDevices[i]), 2044 Bstr (description)); 2045 else 2046 hostFloppyDriveObj->init (Bstr (devNode), 2047 Bstr (halDevices[i])); 2048 list.push_back (hostFloppyDriveObj); 2049 if (vendor != NULL) 2050 libhal_free_string(vendor); 2051 if (product != NULL) 2052 libhal_free_string(product); 2053 libhal_free_string(devNode); 2054 } 2055 } 2056 if (halDevices != NULL) 2057 libhal_free_string_array(halDevices); 2058 if (halSuccess) 2059 libhal_ctx_shutdown (libhalContext, NULL); 2060 if (libhalContext != NULL) 2061 libhal_ctx_free (libhalContext); 2062 if (dbusConnection != NULL) 2063 dbus_connection_unref (dbusConnection); 2064 return halSuccess; 2065 } 2066 2067 # elif defined VBOX_USE_LIBHAL /* Solaris hosts, loading libhal at runtime */ 2068 1891 2069 /** 1892 2070 * Helper function to query the hal subsystem for information about DVD drives attached to the -
trunk/src/VBox/Main/Makefile.kmk
r14714 r14722 198 198 $(if $(VBOX_WITH_RESOURCE_USAGE_API),VBOX_WITH_RESOURCE_USAGE_API,) \ 199 199 $(if $(VBOX_WITH_PDM_ASYNC_COMPLETION),VBOX_WITH_PDM_ASYNC_COMPLETION,) \ 200 $(if $(VBOX_WITH_LIBHAL),VBOX_WITH_LIBHAL,) \ 200 201 $(if $(VBOX_USB_WITH_SYSFS),VBOX_USB_WITH_SYSFS,) 201 202 … … 301 302 win/VBoxSVC.rc 302 303 303 VBoxSVC_SOURCES.linux = \304 linux/vbox-libhal.cpp305 306 304 VBoxSVC_SOURCES.solaris = \ 307 305 linux/vbox-libhal.cpp \ -
trunk/src/VBox/Main/include/HostImpl.h
r14524 r14722 133 133 134 134 #if defined(RT_OS_LINUX) || defined(RT_OS_SOLARIS) 135 # if def VBOX_USE_LIBHAL135 # if defined(VBOX_WITH_LIBHAL) || defined(VBOX_USE_LIBHAL) 136 136 bool getDVDInfoFromHal(std::list <ComObjPtr <HostDVDDrive> > &list); 137 137 bool getFloppyInfoFromHal(std::list <ComObjPtr <HostFloppyDrive> > &list);
Note:
See TracChangeset
for help on using the changeset viewer.