summaryrefslogtreecommitdiff
path: root/libre/virtualbox-libre-modules-lts
diff options
context:
space:
mode:
Diffstat (limited to 'libre/virtualbox-libre-modules-lts')
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/60-vboxguest.rules2
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/LocalConfig.kmk19
-rw-r--r--[-rwxr-xr-x]libre/virtualbox-libre-modules-lts/PKGBUILD194
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/build.sh20
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/free-distros.patch1383
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/libre.patch5765
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_blag.pngbin1411 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_blag_64.pngbin1549 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_dragora.pngbin2375 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_dragora_64.pngbin2430 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_dynebolic.pngbin1621 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_gnewsense.pngbin2315 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_gnewsense_64.pngbin2470 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_gnu.pngbin2728 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_gnu_64.pngbin2705 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_gnuhurd.pngbin2728 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_gnulinux.pngbin2728 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_gnulinux_64.pngbin2705 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_musix.pngbin2451 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_musix_64.pngbin2581 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_os64base.pngbin1300 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_os64base.xcfbin2844 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_osbase.pngbin1042 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_osbase.xcfbin2748 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_parabola.pngbin1931 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_parabola_64.pngbin2096 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_trisquel.pngbin2451 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_trisquel_64.pngbin2592 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_ututo.pngbin2615 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_ututo_64.pngbin2751 -> 0 bytes
-rwxr-xr-xlibre/virtualbox-libre-modules-lts/os_venenux.pngbin1653 -> 0 bytes
-rw-r--r--[-rwxr-xr-x]libre/virtualbox-libre-modules-lts/virtualbox-libre-guest-modules-lts.install (renamed from libre/virtualbox-libre-modules-lts/virtualbox-libre-parabola-modules-lts.install)0
-rw-r--r--[-rwxr-xr-x]libre/virtualbox-libre-modules-lts/virtualbox-libre-host-modules-lts.install (renamed from libre/virtualbox-libre-modules-lts/virtualbox-libre-modules-lts.install)2
33 files changed, 77 insertions, 7308 deletions
diff --git a/libre/virtualbox-libre-modules-lts/60-vboxguest.rules b/libre/virtualbox-libre-modules-lts/60-vboxguest.rules
deleted file mode 100755
index 6285f7249..000000000
--- a/libre/virtualbox-libre-modules-lts/60-vboxguest.rules
+++ /dev/null
@@ -1,2 +0,0 @@
-ACTION=="add", KERNEL=="vboxguest", SUBSYSTEM=="misc", OWNER="root", MODE="0600"
-ACTION=="add", KERNEL=="vboxuser", SUBSYSTEM=="misc", OWNER="root", MODE="0666"
diff --git a/libre/virtualbox-libre-modules-lts/LocalConfig.kmk b/libre/virtualbox-libre-modules-lts/LocalConfig.kmk
deleted file mode 100755
index af79f90cd..000000000
--- a/libre/virtualbox-libre-modules-lts/LocalConfig.kmk
+++ /dev/null
@@ -1,19 +0,0 @@
-VBOX_WITH_ADDITION_DRIVERS =
-VBOX_WITH_INSTALLER = 1
-VBOX_WITH_LINUX_ADDITIONS = 1
-VBOX_WITH_X11_ADDITIONS =
-VBOX_WITH_TESTCASES =
-VBOX_WITH_TESTSUITE =
-VBOX_WITH_ORIGIN :=
-VBOX_PATH_APP_PRIVATE_ARCH := /usr/lib/virtualbox
-VBOX_PATH_SHARED_LIBS := $(VBOX_PATH_APP_PRIVATE_ARCH)
-VBOX_WITH_RUNPATH := $(VBOX_PATH_APP_PRIVATE_ARCH)
-VBOX_PATH_APP_PRIVATE := /usr/share/virtualbox
-VBOX_PATH_APP_DOCS := /usr/share/virtualbox
-VBOX_WITH_REGISTRATION_REQUEST =
-VBOX_WITH_UPDATE_REQUEST =
-VBOX_WITH_VNC := 1
-VBOX_BLD_PYTHON = python2
-VBOX_JAVA_HOME = /usr/lib/jvm/java-6-openjdk
-VBOX_GCC_WERR =
-VBOX_GCC_WARN =
diff --git a/libre/virtualbox-libre-modules-lts/PKGBUILD b/libre/virtualbox-libre-modules-lts/PKGBUILD
index a3355d582..13a37fe88 100755..100644
--- a/libre/virtualbox-libre-modules-lts/PKGBUILD
+++ b/libre/virtualbox-libre-modules-lts/PKGBUILD
@@ -1,153 +1,71 @@
# $Id$
# Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl>
-# Maintainer (Parabola): Márcio Silva <coadde@lavabit.com>
-# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
+# Contributor: Ionut Biru <ibiru@archlinux.org>
+# Contributor: Sébastien Luttringer <seblu@aur.archlinux.org>
# Maintainer (Parabola): Jorge López <jorginho@lavabit.com>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
pkgbase=virtualbox-libre-modules-lts
-pkgname=('virtualbox-libre-modules-lts' 'virtualbox-libre-parabola-modules-lts')
-pkgver=4.1.22
-pkgrel=1
+pkgname=('virtualbox-libre-host-modules-lts' 'virtualbox-libre-guest-modules-lts')
+pkgver=4.2.0
+pkgrel=2
arch=('i686' 'x86_64')
url='http://virtualbox.org'
license=('GPL')
-makedepends=('libstdc++5' 'bin86' 'dev86' 'iasl' 'libxslt' 'libxml2' 'libpng' 'libidl2' 'xalan-c' 'sdl-libre' 'linux-libre-lts' 'linux-libre-lts-headers')
-[[ $CARCH == "x86_64" ]] && makedepends=("${makedepends[@]}" 'gcc-multilib' 'lib32-glibc')
-source=(http://download.virtualbox.org/virtualbox/${pkgver}/VirtualBox-${pkgver}.tar.bz2
- LocalConfig.kmk 60-vboxguest.rules os_blag_64.png os_blag.png
- os_dragora_64.png os_dragora.png os_dynebolic.png os_gnewsense_64.png os_gnewsense.png
- os_gnu_64.png os_gnuhurd.png os_gnulinux_64.png os_gnulinux.png os_gnu.png
- os_musix_64.png os_musix.png os_parabola_64.png os_parabola.png os_trisquel_64.png
- os_trisquel.png os_ututo_64.png os_ututo.png os_venenux.png libre.patch
- free-distros.patch)
-md5sums=('84c5beeead094ce52d098105897aadbb'
- '4c88bd122677a35f68abd76eb01b378b'
- 'ed1341881437455d9735875ddf455fbe'
- '8538dba8686d7449cb481c9bae9d722a'
- '545c925b46f2ac95e5f8ae407fad101a'
- 'f6416f509c2e5460e4dc624e0a57f3c1'
- 'bbfb59dd517c020a23701b480187a355'
- 'efacfdb61918286ea9bc89866b8fd239'
- '7c3eb09995e8bafeef414374e44ad4ce'
- 'a49ed3ab6bd0fb084de0ab3dd97ae93e'
- '6b432b3305ed446125eef052c38355a6'
- 'a70022a468bd3e9daf01818d2d74ac3c'
- '6b432b3305ed446125eef052c38355a6'
- 'a70022a468bd3e9daf01818d2d74ac3c'
- 'a70022a468bd3e9daf01818d2d74ac3c'
- '380eb2ab6cad3da198094585853c129c'
- 'a60bb9a98abcc3c34156f9051d00df9a'
- '3a908ef6952bcf987e63ef2fe4e98d24'
- '02e87c39c353634cecacf98f1707fa15'
- '0cf41a41e7a415d404d5584e047fd450'
- '449cde3b58390284b59c5d663de3edc9'
- 'c7951fe6888d939f3a7d0dafe477e82b'
- '4da8eeb2ece7e475fc7a0d1003da26c6'
- '5e4187af59726d71c5be48d0cd816c34'
- 'a9e4724b56ddf99bb2e9a8fab8ad43ba'
- '1e47d90affabfbf6dbb07d9d42742d6a')
-
-_extramodules=extramodules-3.0-LIBRE-LTS
+makedepends=('linux-libre-lts-headers'
+ "virtualbox-libre-host-source>=$pkgver"
+ "virtualbox-libre-guest-source>=$pkgver"
+ 'expac')
build() {
- _kernver="$(cat /usr/lib/modules/${_extramodules}/version)"
- export KERN_DIR=/usr/lib/modules/${_kernver}/build/
- export KERN_INCL=/usr/src/linux-${_kernver}/include/
-
- cd "$srcdir/VirtualBox-${pkgver}"
-
- patch -Np1 -i "$srcdir/libre.patch"
- patch -Np1 -i "$srcdir/free-distros.patch"
-
- ## Removing Nonfree directories
- rm -rv "./include/VBox/ExtPack"
- rm -rv "./src/VBox/ExtPacks"
- rm -rv "./src/VBox/Main/src-helper-apps"
-
- ## Removing Oracle VM VirtualBox Extension Pack icons
- rm -v "./src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns"
- rm -v "./src/VBox/Resources/other/virtualbox-vbox-extpack-"{16px,20px,24px,32px,40px,48px,64px,72px,80px,96px,128px,256px,512px}.png
- rm -v "./src/VBox/Resources/win/OSE/virtualbox-vbox-extpack.ico"
- rm -v "./src/VBox/Frontends/VirtualBox/images/extension_pack_"{16px,32px,disabled{_16px,_32px},install{_16px,_32px},install_disabled{_16px,_32px},uninstall{_16px,_32px},uninstall_disabled{_16px,_32px}}.png
-
- ## Adding free distros icons
- for i in {gnuhurd,dynebolic,venenux,{gnu{,linux},parabola,gnewsense,blag,dragora,ututo,musix,trisquel}{,_64}}; do
- cp -v "$srcdir/os_${i}.png" "./src/VBox/Frontends/VirtualBox/images"
- done
-
- ## Removing non-free OS icons
- rm -v "./src/VBox/Frontends/VirtualBox/images/os_"{{{arch,turbo}linux,debian,fedora,gentoo,linux{24,26},macosx,mandriva,{free,net,open}bsd,redhat,solaris,opensuse,oracle{,solaris},ubuntu,win{2k{3,8},7,8,vista,xp},xandros}{,_64},dos,jrockitve,l4,linux{,22,_other},netware,qnx,os2{_other,ecs,warp{3,4,45}},win{2k,31,95,98,_other,me,nt4}}.png
-
- cp "$srcdir/LocalConfig.kmk" .
-
- ./configure \
- --with-linux=/usr/src/linux-${_kernver} \
- --disable-java \
- --disable-docs \
- --disable-xpcom \
- --disable-python \
- --disable-sdl-ttf \
- --disable-alsa \
- --disable-pulse \
- --disable-dbus \
- --disable-opengl \
- --build-headless \
- --nofatal
- source ./env.sh
- kmk all
-
- make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src"
- make -C "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src"
+ # current kernel libre version
+ _kernver=$(expac -Q '%v' linux-libre-lts-headers)-LIBRE-LTS
+ # dkms need modification to be run as user
+ cp -r /var/lib/dkms .
+ echo "dkms_tree='$srcdir/dkms'" > dkms.conf
+ # build host modules
+ msg2 'Host modules'
+ dkms --dkmsframework dkms.conf build "vboxhost/$pkgver" -k "$_kernver"
+ # build guest modules
+ msg2 'Guest modules'
+ dkms --dkmsframework dkms.conf build "vboxguest/$pkgver" -k "$_kernver"
}
-package_virtualbox-libre-parabola-modules-lts(){
- pkgdesc="Additions only for Parabola guests (long-term supported kernel libre modules)"
- license=('GPL')
- install=virtualbox-libre-parabola-modules-lts.install
- depends=('linux-libre-lts>=3.0' 'linux-libre-lts<3.1')
- replaces=('virtualbox-archlinux-modules-lts')
- conflicts=('virtualbox-archlinux-modules-lts')
- provides=("virtualbox-archlinux-modules-lts=$pkgver" 'virtualbox-libre-parabola-modules')
-
- source "$srcdir/VirtualBox-${pkgver}/env.sh"
-
- cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/additions/src"
-
- for module in vboxguest.ko vboxsf.ko vboxvideo.ko; do
- install -D -m644 ${module} \
- "$pkgdir/usr/lib/modules/${_extramodules}/${module}"
- done
-
- install -D -m 0644 "$srcdir/60-vboxguest.rules" \
- "$pkgdir/usr/lib/udev/rules.d/60-vboxguest.rules"
-
- find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \;
+package_virtualbox-libre-host-modules-lts(){
+ pkgdesc='Host kernel libre modules for VirtualBox'
+ depends=('linux-libre-lts>=3.0' 'linux-libre-lts<3.1')
+ replaces=('virtualbox-host-modules-lts' 'virtualbox-modules-lts' 'virtualbox-libre-modules-lts')
+ conflicts=('virtualbox-host-modules-lts' 'virtualbox-modules-lts' 'virtualbox-libre-modules-lts')
+ provides=("virtualbox-host-modules-lts=$pkgver" "virtualbox-libre-host-modules=$pkgver")
+ install=virtualbox-libre-host-modules-lts.install
+
+ _kernver=$(expac -Q '%v' linux-libre-lts-headers)-LIBRE-LTS
+ _extraver=extramodules-${_kernver%.*}-LIBRE-LTS
+
+ install -dm755 "$pkgdir/usr/lib/modules/$_extraver"
+ cd "dkms/vboxhost/$pkgver/$_kernver/$CARCH/module"
+ install -m644 * "$pkgdir/usr/lib/modules/$_extraver"
+ find "$pkgdir" -name '*.ko' -exec gzip -9 {} +
+ sed -ie "s/EXTRAMODULES='.*'/EXTRAMODULES='$_extraver'/" "$startdir/virtualbox-libre-host-modules-lts.install"
}
-package_virtualbox-libre-modules-lts(){
- pkgdesc="Long-term supported kernel libre modules for VirtualBox"
- license=('GPL')
- install=virtualbox-libre-modules-lts.install
- depends=('linux-libre-lts>=3.0' 'linux-libre-lts<3.1')
- replaces=('virtualbox-modules-lts')
- conflicts=('virtualbox-modules-lts')
- provides=("virtualbox-modules-lts=$pkgver" 'virtualbox-libre-modules')
-
- source "$srcdir/VirtualBox-${pkgver}/env.sh"
-
- cd "$srcdir/VirtualBox-${pkgver}/out/linux.$BUILD_PLATFORM_ARCH/release/bin/src"
-
- install -D -m644 vboxdrv.ko \
- "$pkgdir/usr/lib/modules/${_extramodules}/vboxdrv.ko"
-
- install -D -m644 vboxnetadp.ko \
- "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetadp.ko"
-
- install -D -m644 vboxnetflt.ko \
- "$pkgdir/usr/lib/modules/${_extramodules}/vboxnetflt.ko"
-
- install -D -m644 vboxpci.ko \
- "$pkgdir/usr/lib/modules/${_extramodules}/vboxpci.ko"
-
- find "${pkgdir}" -name '*.ko' -exec gzip -9 {} +
+package_virtualbox-libre-guest-modules-lts(){
+ pkgdesc='Guest kernel libre modules for VirtualBox'
+ license=('GPL')
+ depends=('linux-libre-lts>=3.0' 'linux-libre-lts<3.1')
+ replaces=('virtualbox-guest-modules-lts' 'virtualbox-archlinux-modules-lts' 'virtualbox-libre-parabola-modules-lts')
+ conflicts=('virtualbox-guest-modules-lts' 'virtualbox-archlinux-modules-lts' 'virtualbox-libre-parabola-modules-lts')
+ provides=("virtualbox-guest-modules-lts=$pkgver" "virtualbox-libre-host-modules=$pkgver")
+ install=virtualbox-libre-guest-modules-lts.install
+
+ _kernver=$(expac -Q '%v' linux-libre-lts-headers)-LIBRE-LTS
+ _extraver=extramodules-${_kernver%.*}-LIBRE-LTS
+
+ install -dm755 "$pkgdir/usr/lib/modules/$_extraver"
+ cd "dkms/vboxguest/$pkgver/$_kernver/$CARCH/module"
+ install -m644 * "$pkgdir/usr/lib/modules/$_extraver"
+ find "$pkgdir" -name '*.ko' -exec gzip -9 {} +
+ sed -ie "s/EXTRAMODULES='.*'/EXTRAMODULES='$_extraver'/" "$startdir/virtualbox-libre-guest-modules-lts.install"
}
+
+# vim:set ts=2 sw=2 et:
diff --git a/libre/virtualbox-libre-modules-lts/build.sh b/libre/virtualbox-libre-modules-lts/build.sh
new file mode 100755
index 000000000..87aefbff0
--- /dev/null
+++ b/libre/virtualbox-libre-modules-lts/build.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+if (( $# != 1 )); then
+ echo "usage: $0 extra"
+ echo " $0 testing"
+ exit 1
+fi
+
+$1-i686-build
+linux32 makechrootpkg -I ../../virtualbox/trunk/virtualbox-libre-host-source-*-i686.pkg.tar.xz -r /var/lib/archbuild/$1-i686
+linux32 makechrootpkg -I ../../virtualbox/trunk/virtualbox-libre-guest-source-*-i686.pkg.tar.xz -r /var/lib/archbuild/$1-i686
+linux32 makechrootpkg -r /var/lib/archbuild/$1-i686
+
+$1-x86_64-build
+makechrootpkg -I ../../virtualbox/trunk/virtualbox-libre-host-source-*-x86_64.pkg.tar.xz -r /var/lib/archbuild/$1-x86_64
+makechrootpkg -I ../../virtualbox/trunk/virtualbox-libre-guest-source-*-x86_64.pkg.tar.xz -r /var/lib/archbuild/$1-x86_64
+makechrootpkg -r /var/lib/archbuild/$1-x86_64
+
+
+# vim:set ts=2 sw=2 ft=sh et:
diff --git a/libre/virtualbox-libre-modules-lts/free-distros.patch b/libre/virtualbox-libre-modules-lts/free-distros.patch
deleted file mode 100755
index 47857e05d..000000000
--- a/libre/virtualbox-libre-modules-lts/free-distros.patch
+++ /dev/null
@@ -1,1383 +0,0 @@
---- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.569003667 -0300
-+++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/wizards/newvm/UINewVMWzd.cpp 2012-07-25 14:51:03.652333615 -0300
-@@ -44,94 +44,38 @@
- * first matching string found, will be used. */
- static const osTypePattern gs_OSTypePattern[] =
- {
-- { QRegExp("DOS", Qt::CaseInsensitive), "DOS" },
-
-- /* Windows */
-- { QRegExp("Wi.*98", Qt::CaseInsensitive), "Windows98" },
-- { QRegExp("Wi.*95", Qt::CaseInsensitive), "Windows95" },
-- { QRegExp("Wi.*Me", Qt::CaseInsensitive), "WindowsMe" },
-- { QRegExp("(Wi.*NT)|(NT4)", Qt::CaseInsensitive), "WindowsNT4" },
-- { QRegExp("((Wi.*XP)|(\\bXP\\b)).*64", Qt::CaseInsensitive), "WindowsXP_64" },
-- { QRegExp("(Wi.*XP)|(\\bXP\\b)", Qt::CaseInsensitive), "WindowsXP" },
-- { QRegExp("((Wi.*2003)|(W2K3)).*64", Qt::CaseInsensitive), "Windows2003_64" },
-- { QRegExp("(Wi.*2003)|(W2K3)", Qt::CaseInsensitive), "Windows2003" },
-- { QRegExp("((Wi.*V)|(Vista)).*64", Qt::CaseInsensitive), "WindowsVista_64" },
-- { QRegExp("(Wi.*V)|(Vista)", Qt::CaseInsensitive), "WindowsVista" },
-- { QRegExp("((Wi.*2008)|(W2K8)).*64", Qt::CaseInsensitive), "Windows2008_64" },
-- { QRegExp("(Wi.*2008)|(W2K8)", Qt::CaseInsensitive), "Windows2008" },
-- { QRegExp("(Wi.*2000)|(W2K)", Qt::CaseInsensitive), "Windows2000" },
-- { QRegExp("(Wi.*7.*64)|(W7.*64)", Qt::CaseInsensitive), "Windows7_64" },
-- { QRegExp("(Wi.*7)|(W7)", Qt::CaseInsensitive), "Windows7" },
-- { QRegExp("(Wi.*8.*64)|(W8.*64)", Qt::CaseInsensitive), "Windows8_64" },
-- { QRegExp("(Wi.*8)|(W8)", Qt::CaseInsensitive), "Windows8" },
-- { QRegExp("Wi.*3", Qt::CaseInsensitive), "Windows31" },
-- { QRegExp("Wi", Qt::CaseInsensitive), "WindowsXP" },
--
-- /* Solaris */
-- { QRegExp("((Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)).*64", Qt::CaseInsensitive), "OpenSolaris_64" },
-- { QRegExp("(Op.*So)|(os20[01][0-9])|(So.*1[01])|(India)|(Neva)", Qt::CaseInsensitive), "OpenSolaris" },
-- { QRegExp("So.*64", Qt::CaseInsensitive), "Solaris_64" },
-- { QRegExp("So", Qt::CaseInsensitive), "Solaris" },
--
-- /* OS/2 */
-- { QRegExp("OS[/|!-]{,1}2.*W.*4.?5", Qt::CaseInsensitive), "OS2Warp45" },
-- { QRegExp("OS[/|!-]{,1}2.*W.*4", Qt::CaseInsensitive), "OS2Warp4" },
-- { QRegExp("OS[/|!-]{,1}2.*W", Qt::CaseInsensitive), "OS2Warp3" },
-- { QRegExp("(OS[/|!-]{,1}2.*e)|(eCS.*)", Qt::CaseInsensitive), "OS2eCS" },
-- { QRegExp("OS[/|!-]{,1}2", Qt::CaseInsensitive), "OS2" },
--
-- /* Code names for Linux distributions */
-- { QRegExp("((edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)).*64", Qt::CaseInsensitive), "Ubuntu_64" },
-- { QRegExp("(edgy)|(feisty)|(gutsy)|(hardy)|(intrepid)|(jaunty)|(karmic)|(lucid)|(maverick)|(natty)|(oneiric)|(precise)", Qt::CaseInsensitive), "Ubuntu" },
-- { QRegExp("((sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)).*64", Qt::CaseInsensitive), "Debian_64" },
-- { QRegExp("(sarge)|(etch)|(lenny)|(squeeze)|(wheezy)|(sid)", Qt::CaseInsensitive), "Debian" },
-- { QRegExp("((moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)).*64", Qt::CaseInsensitive), "Fedora_64" },
-- { QRegExp("(moonshine)|(werewolf)|(sulphur)|(cambridge)|(leonidas)|(constantine)|(goddard)|(laughlin)|(lovelock)|(verne)", Qt::CaseInsensitive), "Fedora" },
--
-- /* Regular names of Linux distributions */
-- { QRegExp("Arc.*64", Qt::CaseInsensitive), "ArchLinux_64" },
-- { QRegExp("Arc", Qt::CaseInsensitive), "ArchLinux" },
-- { QRegExp("Deb.*64", Qt::CaseInsensitive), "Debian_64" },
-- { QRegExp("Deb", Qt::CaseInsensitive), "Debian" },
-- { QRegExp("((SU)|(Nov)|(SLE)).*64", Qt::CaseInsensitive), "OpenSUSE_64" },
-- { QRegExp("(SU)|(Nov)|(SLE)", Qt::CaseInsensitive), "OpenSUSE" },
-- { QRegExp("Fe.*64", Qt::CaseInsensitive), "Fedora_64" },
-- { QRegExp("Fe", Qt::CaseInsensitive), "Fedora" },
-- { QRegExp("((Gen)|(Sab)).*64", Qt::CaseInsensitive), "Gentoo_64" },
-- { QRegExp("(Gen)|(Sab)", Qt::CaseInsensitive), "Gentoo" },
-- { QRegExp("Man.*64", Qt::CaseInsensitive), "Mandriva_64" },
-- { QRegExp("Man", Qt::CaseInsensitive), "Mandriva" },
-- { QRegExp("((Red)|(rhel)|(cen)).*64", Qt::CaseInsensitive), "RedHat_64" },
-- { QRegExp("(Red)|(rhel)|(cen)", Qt::CaseInsensitive), "RedHat" },
-- { QRegExp("Tur.*64", Qt::CaseInsensitive), "Turbolinux_64" },
-- { QRegExp("Tur", Qt::CaseInsensitive), "Turbolinux" },
-- { QRegExp("Ub.*64", Qt::CaseInsensitive), "Ubuntu_64" },
-- { QRegExp("Ub", Qt::CaseInsensitive), "Ubuntu" },
-- { QRegExp("Xa.*64", Qt::CaseInsensitive), "Xandros_64" },
-- { QRegExp("Xa", Qt::CaseInsensitive), "Xandros" },
-- { QRegExp("((Or)|(oel)).*64", Qt::CaseInsensitive), "Oracle_64" },
-- { QRegExp("(Or)|(oel)", Qt::CaseInsensitive), "Oracle" },
-- { QRegExp("((Li)|(lnx)).*2.?2", Qt::CaseInsensitive), "Linux22" },
-- { QRegExp("((Li)|(lnx)).*2.?4.*64", Qt::CaseInsensitive), "Linux24_64" },
-- { QRegExp("((Li)|(lnx)).*2.?4", Qt::CaseInsensitive), "Linux24" },
-- { QRegExp("((((Li)|(lnx)).*2.?6)|(LFS)).*64", Qt::CaseInsensitive), "Linux26_64" },
-- { QRegExp("(((Li)|(lnx)).*2.?6)|(LFS)", Qt::CaseInsensitive), "Linux26" },
-- { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "Linux26_64" },
-- { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "Linux26" },
-+ /* Code names for GNU/Linux distributions */
-+ { QRegExp("((Taranis)|(Dagda)|(Brigantia)).*64", Qt::CaseInsensitive), "Trisquel_64" },
-+ { QRegExp("(Taranis)|(Dagda)|(Brigantia)", Qt::CaseInsensitive), "Trisquel" },
-+ { QRegExp("((metad)|(parkes)|(three)).*64", Qt::CaseInsensitive), "gNewSense_64" },
-+ { QRegExp("(deltah)|(metad)|(parkes)|(three)", Qt::CaseInsensitive), "gNewSense" },
-+ { QRegExp("((90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)).*64", Qt::CaseInsensitive), "Blag_64" },
-+ { QRegExp("(90k)|(119k)|(140k)|(160k)|(90000)|(119000)|(140000)|(160000)|(Spartakus)", Qt::CaseInsensitive), "Blag" },
-+
-+ /* Regular names of GNU/Linux distributions and GNU-Hurd */
-+ { QRegExp("Pa.*64", Qt::CaseInsensitive), "Parabola_64" },
-+ { QRegExp("Pa", Qt::CaseInsensitive), "Parabola" },
-+ { QRegExp("((gNe)|(new)|(Sen)).*64", Qt::CaseInsensitive), "gNewSense_64" },
-+ { QRegExp("(gNe)|(new)|(Sen)", Qt::CaseInsensitive), "gNewSense" },
-+ { QRegExp("Bla.*64", Qt::CaseInsensitive), "Blag_64" },
-+ { QRegExp("Bla", Qt::CaseInsensitive), "Blag" },
-+ { QRegExp("Dra.*64", Qt::CaseInsensitive), "Dragora_64" },
-+ { QRegExp("Dra", Qt::CaseInsensitive), "Dragora" },
-+ { QRegExp("((Utu)|(XS)).*64", Qt::CaseInsensitive), "Ututo_64" },
-+ { QRegExp("(Utu)|(XS)", Qt::CaseInsensitive), "Ututo" },
-+ { QRegExp("Mus.*64", Qt::CaseInsensitive), "Musix_64" },
-+ { QRegExp("Mus", Qt::CaseInsensitive), "Musix" },
-+ { QRegExp("Tri.*64", Qt::CaseInsensitive), "Trisquel_64" },
-+ { QRegExp("Tri", Qt::CaseInsensitive), "Trisquel" },
-+ { QRegExp("Dyn", Qt::CaseInsensitive), "Dynebolic" },
-+ { QRegExp("Ven", Qt::CaseInsensitive), "Venenux" },
-+ { QRegExp("GNU", Qt::CaseInsensitive), "GNU" },
-+ { QRegExp("Hu", Qt::CaseInsensitive), "GNUHurd" },
-+ { QRegExp("((Li)|(lnx)).*64", Qt::CaseInsensitive), "GNULinux_64" },
-+ { QRegExp("(Li)|(lnx)", Qt::CaseInsensitive), "GNULinux" },
-
- /* Other */
-- { QRegExp("L4", Qt::CaseInsensitive), "L4" },
-- { QRegExp("((Fr.*B)|(fbsd)).*64", Qt::CaseInsensitive), "FreeBSD_64" },
-- { QRegExp("(Fr.*B)|(fbsd)", Qt::CaseInsensitive), "FreeBSD" },
-- { QRegExp("Op.*B.*64", Qt::CaseInsensitive), "OpenBSD_64" },
-- { QRegExp("Op.*B", Qt::CaseInsensitive), "OpenBSD" },
-- { QRegExp("Ne.*B.*64", Qt::CaseInsensitive), "NetBSD_64" },
-- { QRegExp("Ne.*B", Qt::CaseInsensitive), "NetBSD" },
-- { QRegExp("QN", Qt::CaseInsensitive), "QNX" },
-- { QRegExp("((Mac)|(Tig)|(Leop)|(osx)).*64", Qt::CaseInsensitive), "MacOS_64" },
-- { QRegExp("(Mac)|(Tig)|(Leop)|(osx)", Qt::CaseInsensitive), "MacOS" },
-- { QRegExp("Net", Qt::CaseInsensitive), "Netware" },
-- { QRegExp("Rocki", Qt::CaseInsensitive), "JRockitVE" },
- { QRegExp("Ot", Qt::CaseInsensitive), "Other" },
- };
-
---- VirtualBox-4.1.18.orig/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.498764160 -0300
-+++ VirtualBox-4.1.18/src/VBox/Main/xml/Settings.cpp 2012-07-25 15:14:50.548761649 -0300
-@@ -3227,40 +3227,18 @@
- } aConvertOSTypes[] =
- {
- { "unknown", "Other" },
-- { "dos", "DOS" },
-- { "win31", "Windows31" },
-- { "win95", "Windows95" },
-- { "win98", "Windows98" },
-- { "winme", "WindowsMe" },
-- { "winnt4", "WindowsNT4" },
-- { "win2k", "Windows2000" },
-- { "winxp", "WindowsXP" },
-- { "win2k3", "Windows2003" },
-- { "winvista", "WindowsVista" },
-- { "win2k8", "Windows2008" },
-- { "os2warp3", "OS2Warp3" },
-- { "os2warp4", "OS2Warp4" },
-- { "os2warp45", "OS2Warp45" },
-- { "ecs", "OS2eCS" },
-- { "linux22", "Linux22" },
-- { "linux24", "Linux24" },
-- { "linux26", "Linux26" },
-- { "archlinux", "ArchLinux" },
-- { "debian", "Debian" },
-- { "opensuse", "OpenSUSE" },
-- { "fedoracore", "Fedora" },
-- { "gentoo", "Gentoo" },
-- { "mandriva", "Mandriva" },
-- { "redhat", "RedHat" },
-- { "ubuntu", "Ubuntu" },
-- { "xandros", "Xandros" },
-- { "freebsd", "FreeBSD" },
-- { "openbsd", "OpenBSD" },
-- { "netbsd", "NetBSD" },
-- { "netware", "Netware" },
-- { "solaris", "Solaris" },
-- { "opensolaris", "OpenSolaris" },
-- { "l4", "L4" }
-+ { "gnu", "GNU" },
-+ { "gnuhurd", "GNUHurd" },
-+ { "gnulinux", "GNULinux" },
-+ { "parabola", "Parabola" },
-+ { "gnewsense", "gNewSense" },
-+ { "blag", "Blag" },
-+ { "dragora", "Dragora" },
-+ { "ututo", "Ututo" },
-+ { "musix", "Musix" },
-+ { "trisquel", "Trisquel" },
-+ { "dynebolic", "Dynebolic" },
-+ { "venenux", "Venenux" },
- };
-
- void MachineConfigFile::convertOldOSType_pre1_5(Utf8Str &str)
---- VirtualBox-4.1.18.orig/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.553581275 -0300
-+++ VirtualBox-4.1.18/src/VBox/Main/xml/SettingsConverter.xsl 2012-07-25 15:21:04.593579427 -0300
-@@ -729,40 +729,18 @@
- <xsl:attribute name="OSType">
- <xsl:choose>
- <xsl:when test="@OSType='unknown'">Other</xsl:when>
-- <xsl:when test="@OSType='dos'">DOS</xsl:when>
-- <xsl:when test="@OSType='win31'">Windows31</xsl:when>
-- <xsl:when test="@OSType='win95'">Windows95</xsl:when>
-- <xsl:when test="@OSType='win98'">Windows98</xsl:when>
-- <xsl:when test="@OSType='winme'">WindowsMe</xsl:when>
-- <xsl:when test="@OSType='winnt4'">WindowsNT4</xsl:when>
-- <xsl:when test="@OSType='win2k'">Windows2000</xsl:when>
-- <xsl:when test="@OSType='winxp'">WindowsXP</xsl:when>
-- <xsl:when test="@OSType='win2k3'">Windows2003</xsl:when>
-- <xsl:when test="@OSType='winvista'">WindowsVista</xsl:when>
-- <xsl:when test="@OSType='win2k8'">Windows2008</xsl:when>
-- <xsl:when test="@OSType='os2warp3'">OS2Warp3</xsl:when>
-- <xsl:when test="@OSType='os2warp4'">OS2Warp4</xsl:when>
-- <xsl:when test="@OSType='os2warp45'">OS2Warp45</xsl:when>
-- <xsl:when test="@OSType='ecs'">OS2eCS</xsl:when>
-- <xsl:when test="@OSType='linux22'">Linux22</xsl:when>
-- <xsl:when test="@OSType='linux24'">Linux24</xsl:when>
-- <xsl:when test="@OSType='linux26'">Linux26</xsl:when>
-- <xsl:when test="@OSType='archlinux'">ArchLinux</xsl:when>
-- <xsl:when test="@OSType='debian'">Debian</xsl:when>
-- <xsl:when test="@OSType='opensuse'">OpenSUSE</xsl:when>
-- <xsl:when test="@OSType='fedoracore'">Fedora</xsl:when>
-- <xsl:when test="@OSType='gentoo'">Gentoo</xsl:when>
-- <xsl:when test="@OSType='mandriva'">Mandriva</xsl:when>
-- <xsl:when test="@OSType='redhat'">RedHat</xsl:when>
-- <xsl:when test="@OSType='ubuntu'">Ubuntu</xsl:when>
-- <xsl:when test="@OSType='xandros'">Xandros</xsl:when>
-- <xsl:when test="@OSType='freebsd'">FreeBSD</xsl:when>
-- <xsl:when test="@OSType='openbsd'">OpenBSD</xsl:when>
-- <xsl:when test="@OSType='netbsd'">NetBSD</xsl:when>
-- <xsl:when test="@OSType='netware'">Netware</xsl:when>
-- <xsl:when test="@OSType='solaris'">Solaris</xsl:when>
-- <xsl:when test="@OSType='opensolaris'">OpenSolaris</xsl:when>
-- <xsl:when test="@OSType='l4'">L4</xsl:when>
-+ <xsl:when test="@OSType='gnu'">GNU</xsl:when>
-+ <xsl:when test="@OSType='gnuhurd'">GNUHurd</xsl:when>
-+ <xsl:when test="@OSType='gnulinux'">GNULinux</xsl:when>
-+ <xsl:when test="@OSType='parabola'">Parabola</xsl:when>
-+ <xsl:when test="@OSType='gnewsense'">gNewSense</xsl:when>
-+ <xsl:when test="@OSType='blag'">Blag</xsl:when>
-+ <xsl:when test="@OSType='dragora'">Dragora</xsl:when>
-+ <xsl:when test="@OSType='ututo'">Ututo</xsl:when>
-+ <xsl:when test="@OSType='musix'">Musix</xsl:when>
-+ <xsl:when test="@OSType='trisquel'">Trisquel</xsl:when>
-+ <xsl:when test="@OSType='dynebolic'">Dynebolic</xsl:when>
-+ <xsl:when test="@OSType='venenux'">Venenux</xsl:when>
- </xsl:choose>
- </xsl:attribute>
- <xsl:apply-templates select="@*[name()!='OSType']" mode="v1.5"/>
---- VirtualBox-4.1.18.orig/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.856003691 -0300
-+++ VirtualBox-4.1.18/src/VBox/Main/xml/VirtualBox-settings-common.xsd 2012-07-25 15:04:37.892668156 -0300
-@@ -137,75 +137,27 @@
- <xsd:simpleType name="TGuestOSType">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="Other"/>
-- <xsd:enumeration value="DOS"/>
-- <xsd:enumeration value="Netware"/>
-- <xsd:enumeration value="L4"/>
-- <xsd:enumeration value="Windows31"/>
-- <xsd:enumeration value="Windows95"/>
-- <xsd:enumeration value="Windows98"/>
-- <xsd:enumeration value="WindowsMe"/>
-- <xsd:enumeration value="WindowsNT4"/>
-- <xsd:enumeration value="Windows2000"/>
-- <xsd:enumeration value="WindowsXP"/>
-- <xsd:enumeration value="WindowsXP_64"/>
-- <xsd:enumeration value="Windows2003"/>
-- <xsd:enumeration value="Windows2003_64"/>
-- <xsd:enumeration value="WindowsVista"/>
-- <xsd:enumeration value="WindowsVista_64"/>
-- <xsd:enumeration value="Windows2008"/>
-- <xsd:enumeration value="Windows2008_64"/>
-- <xsd:enumeration value="Windows7"/>
-- <xsd:enumeration value="Windows7_64"/>
-- <xsd:enumeration value="Windows8"/>
-- <xsd:enumeration value="Windows8_64"/>
-- <xsd:enumeration value="WindowsNT"/>
-- <xsd:enumeration value="OS2Warp3"/>
-- <xsd:enumeration value="OS2Warp4"/>
-- <xsd:enumeration value="OS2Warp45"/>
-- <xsd:enumeration value="OS2eCS"/>
-- <xsd:enumeration value="OS2"/>
-- <xsd:enumeration value="Linux22"/>
-- <xsd:enumeration value="Linux24"/>
-- <xsd:enumeration value="Linux24_64"/>
-- <xsd:enumeration value="Linux26"/>
-- <xsd:enumeration value="Linux26_64"/>
-- <xsd:enumeration value="ArchLinux"/>
-- <xsd:enumeration value="ArchLinux_64"/>
-- <xsd:enumeration value="Debian"/>
-- <xsd:enumeration value="Debian_64"/>
-- <xsd:enumeration value="OpenSUSE"/>
-- <xsd:enumeration value="OpenSUSE_64"/>
-- <xsd:enumeration value="Fedora"/>
-- <xsd:enumeration value="Fedora_64"/>
-- <xsd:enumeration value="Gentoo"/>
-- <xsd:enumeration value="Gentoo_64"/>
-- <xsd:enumeration value="Mandriva"/>
-- <xsd:enumeration value="Mandriva_64"/>
-- <xsd:enumeration value="RedHat"/>
-- <xsd:enumeration value="RedHat_64"/>
-- <xsd:enumeration value="Turbolinux"/>
-- <xsd:enumeration value="Turbolinux_64"/>
-- <xsd:enumeration value="Ubuntu"/>
-- <xsd:enumeration value="Ubuntu_64"/>
-- <xsd:enumeration value="Xandros"/>
-- <xsd:enumeration value="Xandros_64"/>
-- <xsd:enumeration value="Oracle"/>
-- <xsd:enumeration value="Oracle_64"/>
-- <xsd:enumeration value="Linux"/>
-- <xsd:enumeration value="FreeBSD"/>
-- <xsd:enumeration value="FreeBSD_64"/>
-- <xsd:enumeration value="OpenBSD"/>
-- <xsd:enumeration value="OpenBSD_64"/>
-- <xsd:enumeration value="NetBSD"/>
-- <xsd:enumeration value="NetBSD_64"/>
-- <xsd:enumeration value="Solaris"/>
-- <xsd:enumeration value="Solaris_64"/>
-- <xsd:enumeration value="OpenSolaris"/>
-- <xsd:enumeration value="OpenSolaris_64"/>
-- <xsd:enumeration value="QNX"/>
-- <xsd:enumeration value="MacOS"/>
-- <xsd:enumeration value="MacOS_64"/>
-- <xsd:enumeration value="JRockitVE"/>
-+ <xsd:enumeration value="GNU"/>
-+ <xsd:enumeration value="GNU_64"/>
-+ <xsd:enumeration value="GNUHurd"/>
-+ <xsd:enumeration value="GNULinux"/>
-+ <xsd:enumeration value="GNULinux_64"/>
-+ <xsd:enumeration value="Parabola"/>
-+ <xsd:enumeration value="Parabola_64"/>
-+ <xsd:enumeration value="gNewSense"/>
-+ <xsd:enumeration value="gNewSense_64"/>
-+ <xsd:enumeration value="Blag"/>
-+ <xsd:enumeration value="Blag_64"/>
-+ <xsd:enumeration value="Dragora"/>
-+ <xsd:enumeration value="Dragora_64"/>
-+ <xsd:enumeration value="Ututo"/>
-+ <xsd:enumeration value="Ututo_64"/>
-+ <xsd:enumeration value="Musix"/>
-+ <xsd:enumeration value="Musix_64"/>
-+ <xsd:enumeration value="Trisquel"/>
-+ <xsd:enumeration value="Trisquel_64"/>
-+ <xsd:enumeration value="Dynebolic"/>
-+ <xsd:enumeration value="Venenux"/>
- </xsd:restriction>
- </xsd:simpleType>
-
---- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.733096866 -0300
-+++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-25 15:40:56.796426519 -0300
-@@ -1,75 +1,27 @@
- <!DOCTYPE RCC><RCC version="1.0">
- <qresource prefix="/">
-- <file alias="os_archlinux.png">images/os_archlinux.png</file>
-- <file alias="os_archlinux_64.png">images/os_archlinux_64.png</file>
-- <file alias="os_debian.png">images/os_debian.png</file>
-- <file alias="os_debian_64.png">images/os_debian_64.png</file>
-- <file alias="os_dos.png">images/os_dos.png</file>
-- <file alias="os_fedora.png">images/os_fedora.png</file>
-- <file alias="os_fedora_64.png">images/os_fedora_64.png</file>
-- <file alias="os_freebsd.png">images/os_freebsd.png</file>
-- <file alias="os_freebsd_64.png">images/os_freebsd_64.png</file>
-- <file alias="os_gentoo.png">images/os_gentoo.png</file>
-- <file alias="os_gentoo_64.png">images/os_gentoo_64.png</file>
-- <file alias="os_jrockitve.png">images/os_jrockitve.png</file>
-- <file alias="os_l4.png">images/os_l4.png</file>
-- <file alias="os_linux_other.png">images/os_linux_other.png</file>
-- <file alias="os_linux22.png">images/os_linux22.png</file>
-- <file alias="os_linux24.png">images/os_linux24.png</file>
-- <file alias="os_linux24_64.png">images/os_linux24_64.png</file>
-- <file alias="os_linux26.png">images/os_linux26.png</file>
-- <file alias="os_linux26_64.png">images/os_linux26_64.png</file>
-- <file alias="os_mandriva.png">images/os_mandriva.png</file>
-- <file alias="os_mandriva_64.png">images/os_mandriva_64.png</file>
-- <file alias="os_netbsd.png">images/os_netbsd.png</file>
-- <file alias="os_netbsd_64.png">images/os_netbsd_64.png</file>
-- <file alias="os_netware.png">images/os_netware.png</file>
-- <file alias="os_openbsd.png">images/os_openbsd.png</file>
-- <file alias="os_openbsd_64.png">images/os_openbsd_64.png</file>
-- <file alias="os_oraclesolaris.png">images/os_oraclesolaris.png</file>
-- <file alias="os_oraclesolaris_64.png">images/os_oraclesolaris_64.png</file>
-- <file alias="os_opensuse.png">images/os_opensuse.png</file>
-- <file alias="os_opensuse_64.png">images/os_opensuse_64.png</file>
-- <file alias="os_os2_other.png">images/os_os2_other.png</file>
-- <file alias="os_os2ecs.png">images/os_os2ecs.png</file>
-- <file alias="os_os2warp3.png">images/os_os2warp3.png</file>
-- <file alias="os_os2warp4.png">images/os_os2warp4.png</file>
-- <file alias="os_os2warp45.png">images/os_os2warp45.png</file>
-+ <file alias="os_parabola.png">images/os_parabola.png</file>
-+ <file alias="os_parabola_64.png">images/os_parabola_64.png</file>
-+ <file alias="os_gnewsense.png">images/os_gnewsense.png</file>
-+ <file alias="os_gnewsense_64.png">images/os_gnewsense_64.png</file>
-+ <file alias="os_blag.png">images/os_blag.png</file>
-+ <file alias="os_blag_64.png">images/os_blag_64.png</file>
-+ <file alias="os_ututo.png">images/os_ututo.png</file>
-+ <file alias="os_ututo_64.png">images/os_ututo_64.png</file>
-+ <file alias="os_gnu.png">images/os_gnu.png</file>
-+ <file alias="os_gnu_64.png">images/os_gnu_64.png</file>
-+ <file alias="os_gnuhurd.png">images/os_gnuhurd.png</file>
-+ <file alias="os_gnulinux.png">images/os_gnulinux.png</file>
-+ <file alias="os_gnulinux_64.png">images/os_gnulinux_64.png</file>
-+ <file alias="os_musix.png">images/os_musix.png</file>
-+ <file alias="os_musix_64.png">images/os_musix_64.png</file>
-+ <file alias="os_dragora.png">images/os_dragora.png</file>
-+ <file alias="os_dragora_64.png">images/os_dragora_64.png</file>
- <file alias="os_other.png">images/os_other.png</file>
-- <file alias="os_qnx.png">images/os_qnx.png</file>
-- <file alias="os_redhat.png">images/os_redhat.png</file>
-- <file alias="os_redhat_64.png">images/os_redhat_64.png</file>
-- <file alias="os_turbolinux.png">images/os_turbolinux.png</file>
-- <file alias="os_turbolinux_64.png">images/os_turbolinux_64.png</file>
-- <file alias="os_solaris.png">images/os_solaris.png</file>
-- <file alias="os_solaris_64.png">images/os_solaris_64.png</file>
-- <file alias="os_ubuntu.png">images/os_ubuntu.png</file>
-- <file alias="os_ubuntu_64.png">images/os_ubuntu_64.png</file>
-- <file alias="os_win_other.png">images/os_win_other.png</file>
-- <file alias="os_win2k.png">images/os_win2k.png</file>
-- <file alias="os_win2k3.png">images/os_win2k3.png</file>
-- <file alias="os_win2k3_64.png">images/os_win2k3_64.png</file>
-- <file alias="os_win2k8.png">images/os_win2k8.png</file>
-- <file alias="os_win2k8_64.png">images/os_win2k8_64.png</file>
-- <file alias="os_win31.png">images/os_win31.png</file>
-- <file alias="os_win7.png">images/os_win7.png</file>
-- <file alias="os_win7_64.png">images/os_win7_64.png</file>
-- <file alias="os_win8.png">images/os_win8.png</file>
-- <file alias="os_win8_64.png">images/os_win8_64.png</file>
-- <file alias="os_win95.png">images/os_win95.png</file>
-- <file alias="os_win98.png">images/os_win98.png</file>
-- <file alias="os_winme.png">images/os_winme.png</file>
-- <file alias="os_winnt4.png">images/os_winnt4.png</file>
-- <file alias="os_winvista.png">images/os_winvista.png</file>
-- <file alias="os_winvista_64.png">images/os_winvista_64.png</file>
-- <file alias="os_winxp.png">images/os_winxp.png</file>
-- <file alias="os_winxp_64.png">images/os_winxp_64.png</file>
-- <file alias="os_xandros.png">images/os_xandros.png</file>
-- <file alias="os_xandros_64.png">images/os_xandros_64.png</file>
-- <file alias="os_oracle.png">images/os_oracle.png</file>
-- <file alias="os_oracle_64.png">images/os_oracle_64.png</file>
-- <file alias="os_macosx.png">images/os_macosx.png</file>
-- <file alias="os_macosx_64.png">images/os_macosx_64.png</file>
-+ <file alias="os_dynebolic.png">images/os_dynebolic.png</file>
-+ <file alias="os_venenux.png">images/os_venenux.png</file>
-+ <file alias="os_trisquel.png">images/os_trisquel.png</file>
-+ <file alias="os_trisquel_64.png">images/os_trisquel_64.png</file>
- <file alias="hd_16px.png">images/hd_16px.png</file>
- <file alias="hd_disabled_16px.png">images/hd_disabled_16px.png</file>
- <file alias="hd_32px.png">images/hd_32px.png</file>
---- VirtualBox-4.1.20.orig/src/VBox/Main/src-all/Global.cpp 2012-08-20 11:36:24.000000000 -0300
-+++ VirtualBox-4.1.20/src/VBox/Main/src-all/Global.cpp 2012-08-21 14:22:29.148190849 -0300
-@@ -35,284 +35,90 @@
- VBOXOSTYPE_Unknown, VBOXOSHINT_NONE,
- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows31, "Windows 3.1",
-- VBOXOSTYPE_Win31, VBOXOSHINT_NONE,
-- 32, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows95, "Windows 95",
-- VBOXOSTYPE_Win95, VBOXOSHINT_NONE,
-- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows98, "Windows 98",
-- VBOXOSTYPE_Win98, VBOXOSHINT_NONE,
-- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsMe, "Windows Me",
-- VBOXOSTYPE_WinMe, VBOXOSHINT_NONE,
-- 64, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT4, "Windows NT 4",
-- VBOXOSTYPE_WinNT4, VBOXOSHINT_NONE,
-- 128, 16, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2000, "Windows 2000",
-- VBOXOSTYPE_Win2k, VBOXOSHINT_USBTABLET,
-- 168, 16, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP, "Windows XP",
-- VBOXOSTYPE_WinXP, VBOXOSHINT_USBTABLET,
-- 192, 16, 10 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsXP_64, "Windows XP (64 bit)",
-- VBOXOSTYPE_WinXP_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
-- 192, 16, 10 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003, "Windows 2003",
-- VBOXOSTYPE_Win2k3, VBOXOSHINT_USBTABLET,
-- 256, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2003_64, "Windows 2003 (64 bit)",
-- VBOXOSTYPE_Win2k3_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
-- 256, 16, 20 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_HDA },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista, "Windows Vista",
-- VBOXOSTYPE_WinVista, VBOXOSHINT_USBTABLET,
-- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsVista_64, "Windows Vista (64 bit)",
-- VBOXOSTYPE_WinVista_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
-- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008, "Windows 2008",
-- VBOXOSTYPE_Win2k8, VBOXOSHINT_USBTABLET,
-- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows2008_64, "Windows 2008 (64 bit)",
-- VBOXOSTYPE_Win2k8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
-- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7, "Windows 7",
-- VBOXOSTYPE_Win7, VBOXOSHINT_USBTABLET,
-- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows7_64, "Windows 7 (64 bit)",
-- VBOXOSTYPE_Win7_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
-- 512, 16, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8, "Windows 8",
-- VBOXOSTYPE_Win8, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET | VBOXOSHINT_PAE,
-- 1024,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_Windows8_64, "Windows 8 (64 bit)",
-- VBOXOSTYPE_Win8_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
-- 1536,128, 25 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_HDA },
-- { "Windows", "Microsoft Windows", SchemaDefs_OSTypeId_WindowsNT, "Other Windows",
-- VBOXOSTYPE_WinNT, VBOXOSHINT_NONE,
-- 512, 16, 20 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux22, "Linux 2.2",
-- VBOXOSTYPE_Linux22, VBOXOSHINT_RTCUTC,
-- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24, "Linux 2.4",
-- VBOXOSTYPE_Linux24, VBOXOSHINT_RTCUTC,
-- 128, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux24_64, "Linux 2.4 (64 bit)",
-- VBOXOSTYPE_Linux24_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
-- 128, 4, 4 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-+ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU, "GNU",
-+ VBOXOSTYPE_GNU, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-+ { "GNU", "GNU", SchemaDefs_OSTypeId_GNU_64, "GNU (64 bit)",
-+ VBOXOSTYPE_GNU_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-+ { "GNU-Hurd", "GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd, "GNU-Hurd",
-+ VBOXOSTYPE_GNUHurd, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26, "Linux 2.6",
-- VBOXOSTYPE_Linux26, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux, "GNU/Linux",
-+ VBOXOSTYPE_GNULinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
- 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux26_64, "Linux 2.6 (64 bit)",
-- VBOXOSTYPE_Linux26_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64, "GNU/Linux (64 bit)",
-+ VBOXOSTYPE_GNULinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
- 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux, "Arch Linux",
-- VBOXOSTYPE_ArchLinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola, "Parabola GNU/Linux-libre",
-+ VBOXOSTYPE_Parabola, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_ArchLinux_64, "Arch Linux (64 bit)",
-- VBOXOSTYPE_ArchLinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Parabola_64, "Parabola GNU/Linux-libre (64 bit)",
-+ VBOXOSTYPE_Parabola_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian, "Debian",
-- VBOXOSTYPE_Debian, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense, "gNewSense",
-+ VBOXOSTYPE_gNewSense, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
- 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Debian_64, "Debian (64 bit)",
-- VBOXOSTYPE_Debian_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_gNewSense_64, "gNewSense (64 bit)",
-+ VBOXOSTYPE_gNewSense_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
- 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97},
-- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE, "openSUSE",
-- VBOXOSTYPE_OpenSUSE, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_OpenSUSE_64, "openSUSE (64 bit)",
-- VBOXOSTYPE_OpenSUSE_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora, "Fedora",
-- VBOXOSTYPE_FedoraCore, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag, "Blag Linux and GNU",
-+ VBOXOSTYPE_Blag, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
- 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Fedora_64, "Fedora (64 bit)",
-- VBOXOSTYPE_FedoraCore_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Blag_64, "Blag Linux and GNU (64 bit)",
-+ VBOXOSTYPE_Blag_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
- 768, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo, "Gentoo",
-- VBOXOSTYPE_Gentoo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora, "Dragora",
-+ VBOXOSTYPE_Dragora, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Gentoo_64, "Gentoo (64 bit)",
-- VBOXOSTYPE_Gentoo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dragora_64, "Dragora (64 bit)",
-+ VBOXOSTYPE_Dragora_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva, "Mandriva",
-- VBOXOSTYPE_Mandriva, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Mandriva_64, "Mandriva (64 bit)",
-- VBOXOSTYPE_Mandriva_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat, "Red Hat",
-- VBOXOSTYPE_RedHat, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE,
-- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo, "Ututo XS",
-+ VBOXOSTYPE_Ututo, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_RedHat_64, "Red Hat (64 bit)",
-- VBOXOSTYPE_RedHat_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
-- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Ututo_64, "Ututo XS (64 bit)",
-+ VBOXOSTYPE_Ututo_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux",
-- VBOXOSTYPE_Turbolinux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix, "Musix",
-+ VBOXOSTYPE_Musix, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
- 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Turbolinux, "Turbolinux (64 bit)",
-- VBOXOSTYPE_Turbolinux_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Musix_64, "Musix (64 bit)",
-+ VBOXOSTYPE_Musix_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
- 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu, "Ubuntu",
-- VBOXOSTYPE_Ubuntu, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET,
-+ StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97},
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel, "Trisquel",
-+ VBOXOSTYPE_Trisquel, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE | VBOXOSHINT_USBTABLET,
- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Ubuntu_64, "Ubuntu (64 bit)",
-- VBOXOSTYPE_Ubuntu_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Trisquel_64, "Trisquel (64 bit)",
-+ VBOXOSTYPE_Trisquel_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
- 512, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros, "Xandros",
-- VBOXOSTYPE_Xandros, VBOXOSHINT_RTCUTC,
-- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Dynebolic, "Dyne:bolic",
-+ VBOXOSTYPE_Dynebolic, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ 256, 4, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Xandros_64, "Xandros (64 bit)",
-- VBOXOSTYPE_Xandros_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
-- 256, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-+ { "GNU/Linux", "GNU/Linux", SchemaDefs_OSTypeId_Venenux, "Venenux",
-+ VBOXOSTYPE_Venenux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-+ 384, 12, 8 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle, "Oracle",
-- VBOXOSTYPE_Oracle, VBOXOSHINT_RTCUTC | VBOXOSHINT_PAE,
-- 512, 12, 12 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Oracle_64, "Oracle (64 bit)",
-- VBOXOSTYPE_Oracle_x64, VBOXOSHINT_64BIT | VBOXOSHINT_PAE | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_RTCUTC,
-- 512, 12, 12 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Linux", "Linux", SchemaDefs_OSTypeId_Linux, "Other Linux",
-- VBOXOSTYPE_Linux, VBOXOSHINT_RTCUTC | VBOXOSHINT_USBTABLET,
-- 256, 12, 8 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris, "Oracle Solaris 10 5/09 and earlier",
-- VBOXOSTYPE_Solaris, VBOXOSHINT_NONE,
-- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Solaris", "Solaris", SchemaDefs_OSTypeId_Solaris_64, "Oracle Solaris 10 5/09 and earlier (64 bit)",
-- VBOXOSTYPE_Solaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
-- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris, "Oracle Solaris 10 10/09 and later",
-- VBOXOSTYPE_OpenSolaris, VBOXOSHINT_USBTABLET,
-- 768, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Solaris", "Solaris", SchemaDefs_OSTypeId_OpenSolaris_64, "Oracle Solaris 10 10/09 and later (64 bit)",
-- VBOXOSTYPE_OpenSolaris_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_USBTABLET,
-- 1536, 12, 16 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_IntelAhci, StorageBus_SATA,
-- StorageControllerType_IntelAhci, StorageBus_SATA, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD, "FreeBSD",
-- VBOXOSTYPE_FreeBSD, VBOXOSHINT_NONE,
-- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "BSD", "BSD", SchemaDefs_OSTypeId_FreeBSD_64, "FreeBSD (64 bit)",
-- VBOXOSTYPE_FreeBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
-- 128, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD, "OpenBSD",
-- VBOXOSTYPE_OpenBSD, VBOXOSHINT_HWVIRTEX,
-- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "BSD", "BSD", SchemaDefs_OSTypeId_OpenBSD_64, "OpenBSD (64 bit)",
-- VBOXOSTYPE_OpenBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
-- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD, "NetBSD",
-- VBOXOSTYPE_NetBSD, VBOXOSHINT_NONE,
-- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "BSD", "BSD", SchemaDefs_OSTypeId_NetBSD_64, "NetBSD (64 bit)",
-- VBOXOSTYPE_NetBSD_x64, VBOXOSHINT_64BIT | VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC,
-- 64, 4, 2 * _1G64, NetworkAdapterType_I82540EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp3, "OS/2 Warp 3",
-- VBOXOSTYPE_OS2Warp3, VBOXOSHINT_HWVIRTEX,
-- 48, 4, 1 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp4, "OS/2 Warp 4",
-- VBOXOSTYPE_OS2Warp4, VBOXOSHINT_HWVIRTEX,
-- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2Warp45, "OS/2 Warp 4.5",
-- VBOXOSTYPE_OS2Warp45, VBOXOSHINT_HWVIRTEX,
-- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2eCS, "eComStation",
-- VBOXOSTYPE_ECS, VBOXOSHINT_HWVIRTEX,
-- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "OS2", "IBM OS/2", SchemaDefs_OSTypeId_OS2, "Other OS/2",
-- VBOXOSTYPE_OS2, VBOXOSHINT_HWVIRTEX,
-- 96, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 1, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS, "Mac OS X Server",
-- VBOXOSTYPE_MacOS, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET,
-- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0,
-- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA,
-- ChipsetType_ICH9, AudioControllerType_HDA },
-- { "MacOS", "Mac OS X", SchemaDefs_OSTypeId_MacOS_64, "Mac OS X Server (64 bit)",
-- VBOXOSTYPE_MacOS_x64, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_EFI | VBOXOSHINT_PAE | VBOXOSHINT_64BIT | VBOXOSHINT_USBHID | VBOXOSHINT_HPET | VBOXOSHINT_USBTABLET,
-- 1024, 4, 20 * _1G64, NetworkAdapterType_I82543GC, 0,
-- StorageControllerType_ICH6, StorageBus_IDE, StorageControllerType_IntelAhci, StorageBus_SATA,
-- ChipsetType_ICH9, AudioControllerType_HDA },
-- { "Other", "Other", SchemaDefs_OSTypeId_DOS, "DOS",
-- VBOXOSTYPE_DOS, VBOXOSHINT_NONE,
-- 32, 4, 500 * _1M, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_SB16 },
-- { "Other", "Other", SchemaDefs_OSTypeId_Netware, "Netware",
-- VBOXOSTYPE_Netware, VBOXOSHINT_HWVIRTEX,
-- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Other", "Other", SchemaDefs_OSTypeId_L4, "L4",
-- VBOXOSTYPE_L4, VBOXOSHINT_NONE,
-- 64, 4, 2 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Other", "Other", SchemaDefs_OSTypeId_QNX, "QNX",
-- VBOXOSTYPE_QNX, VBOXOSHINT_HWVIRTEX,
-- 512, 4, 4 * _1G64, NetworkAdapterType_Am79C973, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_PIIX4, StorageBus_IDE, ChipsetType_PIIX3, AudioControllerType_AC97 },
-- { "Other", "Other", SchemaDefs_OSTypeId_JRockitVE, "JRockitVE",
-- VBOXOSTYPE_JRockitVE, VBOXOSHINT_HWVIRTEX | VBOXOSHINT_IOAPIC | VBOXOSHINT_PAE,
-- 1024, 4, 8 * _1G64, NetworkAdapterType_I82545EM, 0, StorageControllerType_PIIX4, StorageBus_IDE,
-- StorageControllerType_BusLogic, StorageBus_SCSI, ChipsetType_PIIX3, AudioControllerType_AC97 },
- };
-
- /**
---- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 21:44:01.290876720 -0300
-+++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp 2012-07-25 22:00:57.819380802 -0300
-@@ -4875,75 +4875,27 @@
- static const char *kOSTypeIcons [][2] =
- {
- {"Other", ":/os_other.png"},
-- {"DOS", ":/os_dos.png"},
-- {"Netware", ":/os_netware.png"},
-- {"L4", ":/os_l4.png"},
-- {"Windows31", ":/os_win31.png"},
-- {"Windows95", ":/os_win95.png"},
-- {"Windows98", ":/os_win98.png"},
-- {"WindowsMe", ":/os_winme.png"},
-- {"WindowsNT4", ":/os_winnt4.png"},
-- {"Windows2000", ":/os_win2k.png"},
-- {"WindowsXP", ":/os_winxp.png"},
-- {"WindowsXP_64", ":/os_winxp_64.png"},
-- {"Windows2003", ":/os_win2k3.png"},
-- {"Windows2003_64", ":/os_win2k3_64.png"},
-- {"WindowsVista", ":/os_winvista.png"},
-- {"WindowsVista_64", ":/os_winvista_64.png"},
-- {"Windows2008", ":/os_win2k8.png"},
-- {"Windows2008_64", ":/os_win2k8_64.png"},
-- {"Windows7", ":/os_win7.png"},
-- {"Windows7_64", ":/os_win7_64.png"},
-- {"Windows8", ":/os_win8.png"},
-- {"Windows8_64", ":/os_win8_64.png"},
-- {"WindowsNT", ":/os_win_other.png"},
-- {"OS2Warp3", ":/os_os2warp3.png"},
-- {"OS2Warp4", ":/os_os2warp4.png"},
-- {"OS2Warp45", ":/os_os2warp45.png"},
-- {"OS2eCS", ":/os_os2ecs.png"},
-- {"OS2", ":/os_os2_other.png"},
-- {"Linux22", ":/os_linux22.png"},
-- {"Linux24", ":/os_linux24.png"},
-- {"Linux24_64", ":/os_linux24_64.png"},
-- {"Linux26", ":/os_linux26.png"},
-- {"Linux26_64", ":/os_linux26_64.png"},
-- {"ArchLinux", ":/os_archlinux.png"},
-- {"ArchLinux_64", ":/os_archlinux_64.png"},
-- {"Debian", ":/os_debian.png"},
-- {"Debian_64", ":/os_debian_64.png"},
-- {"OpenSUSE", ":/os_opensuse.png"},
-- {"OpenSUSE_64", ":/os_opensuse_64.png"},
-- {"Fedora", ":/os_fedora.png"},
-- {"Fedora_64", ":/os_fedora_64.png"},
-- {"Gentoo", ":/os_gentoo.png"},
-- {"Gentoo_64", ":/os_gentoo_64.png"},
-- {"Mandriva", ":/os_mandriva.png"},
-- {"Mandriva_64", ":/os_mandriva_64.png"},
-- {"RedHat", ":/os_redhat.png"},
-- {"RedHat_64", ":/os_redhat_64.png"},
-- {"Turbolinux", ":/os_turbolinux.png"},
-- {"Turbolinux_64", ":/os_turbolinux_64.png"},
-- {"Ubuntu", ":/os_ubuntu.png"},
-- {"Ubuntu_64", ":/os_ubuntu_64.png"},
-- {"Xandros", ":/os_xandros.png"},
-- {"Xandros_64", ":/os_xandros_64.png"},
-- {"Oracle", ":/os_oracle.png"},
-- {"Oracle_64", ":/os_oracle_64.png"},
-- {"Linux", ":/os_linux_other.png"},
-- {"FreeBSD", ":/os_freebsd.png"},
-- {"FreeBSD_64", ":/os_freebsd_64.png"},
-- {"OpenBSD", ":/os_openbsd.png"},
-- {"OpenBSD_64", ":/os_openbsd_64.png"},
-- {"NetBSD", ":/os_netbsd.png"},
-- {"NetBSD_64", ":/os_netbsd_64.png"},
-- {"Solaris", ":/os_solaris.png"},
-- {"Solaris_64", ":/os_solaris_64.png"},
-- {"OpenSolaris", ":/os_oraclesolaris.png"},
-- {"OpenSolaris_64", ":/os_oraclesolaris_64.png"},
-- {"QNX", ":/os_qnx.png"},
-- {"MacOS", ":/os_macosx.png"},
-- {"MacOS_64", ":/os_macosx_64.png"},
-- {"JRockitVE", ":/os_jrockitve.png"},
-+ {"GNU", ":/os_gnu.png"},
-+ {"GNU_64", ":/os_gnu_64.png"},
-+ {"GNUHurd", ":/os_gnuhurd.png"},
-+ {"GNULinux", ":/os_gnulinux.png"},
-+ {"GNULinux_64", ":/os_gnulinux_64.png"},
-+ {"Parabola", ":/os_parabola.png"},
-+ {"Parabola_64", ":/os_parabola_64.png"},
-+ {"gNewSense", ":/os_gnewsense.png"},
-+ {"gNewSense_64", ":/os_gnewsense_64.png"},
-+ {"Blag", ":/os_blag.png"},
-+ {"Blag_64", ":/os_blag_64.png"},
-+ {"Dragora", ":/os_dragora.png"},
-+ {"Dragora_64", ":/os_dragora_64.png"},
-+ {"Ututo", ":/os_ututo.png"},
-+ {"Ututo_64", ":/os_ututo_64.png"},
-+ {"Musix", ":/os_musix.png"},
-+ {"Musix_64", ":/os_musix_64.png"},
-+ {"Trisquel", ":/os_trisquel.png"},
-+ {"Trisquel_64", ":/os_trisquel_64.png"},
-+ {"Dynebolic", ":/os_dynebolic.png"},
-+ {"Venenux", ":/os_venenux.png"},
- };
- for (uint n = 0; n < SIZEOF_ARRAY (kOSTypeIcons); ++ n)
- {
---- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp.orig 2012-06-20 10:16:38.000000000 -0300
-+++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/src/widgets/VBoxOSTypeSelectorWidget.cpp 2012-07-25 22:07:51.232436783 -0300
-@@ -192,17 +192,10 @@
- if (typeIndex != -1)
- mCbType->setCurrentIndex (typeIndex);
- }
-- /* Or select WinXP item for Windows family as default */
-- else if (familyId == "Windows")
-+ /* Or select Parabola GNU/Linux-libre item for GNU/Linux family as default */
-+ else if (familyId == "GNU/Linux")
- {
-- int xpIndex = mCbType->findData ("WindowsXP", RoleTypeID);
-- if (xpIndex != -1)
-- mCbType->setCurrentIndex (xpIndex);
-- }
-- /* Or select Ubuntu item for Linux family as default */
-- else if (familyId == "Linux")
-- {
-- int ubIndex = mCbType->findData ("Ubuntu", RoleTypeID);
-+ int ubIndex = mCbType->findData ("Parabola", RoleTypeID);
- if (ubIndex != -1)
- mCbType->setCurrentIndex (ubIndex);
- }
---- VirtualBox-4.1.18.orig/include/VBox/ostypes.h 2012-06-20 10:07:51.000000000 -0300
-+++ VirtualBox-4.1.18/include/VBox/ostypes.h 2012-07-25 23:20:57.322757456 -0300
-@@ -43,77 +43,27 @@
- typedef enum VBOXOSTYPE
- {
- VBOXOSTYPE_Unknown = 0,
-- VBOXOSTYPE_DOS = 0x10000,
-- VBOXOSTYPE_Win31 = 0x15000,
-- VBOXOSTYPE_Win9x = 0x20000,
-- VBOXOSTYPE_Win95 = 0x21000,
-- VBOXOSTYPE_Win98 = 0x22000,
-- VBOXOSTYPE_WinMe = 0x23000,
-- VBOXOSTYPE_WinNT = 0x30000,
-- VBOXOSTYPE_WinNT4 = 0x31000,
-- VBOXOSTYPE_Win2k = 0x32000,
-- VBOXOSTYPE_WinXP = 0x33000,
-- VBOXOSTYPE_WinXP_x64 = 0x33100,
-- VBOXOSTYPE_Win2k3 = 0x34000,
-- VBOXOSTYPE_Win2k3_x64 = 0x34100,
-- VBOXOSTYPE_WinVista = 0x35000,
-- VBOXOSTYPE_WinVista_x64 = 0x35100,
-- VBOXOSTYPE_Win2k8 = 0x36000,
-- VBOXOSTYPE_Win2k8_x64 = 0x36100,
-- VBOXOSTYPE_Win7 = 0x37000,
-- VBOXOSTYPE_Win7_x64 = 0x37100,
-- VBOXOSTYPE_Win8 = 0x38000,
-- VBOXOSTYPE_Win8_x64 = 0x38100,
-- VBOXOSTYPE_OS2 = 0x40000,
-- VBOXOSTYPE_OS2Warp3 = 0x41000,
-- VBOXOSTYPE_OS2Warp4 = 0x42000,
-- VBOXOSTYPE_OS2Warp45 = 0x43000,
-- VBOXOSTYPE_ECS = 0x44000,
-- VBOXOSTYPE_Linux = 0x50000,
-- VBOXOSTYPE_Linux_x64 = 0x50100,
-- VBOXOSTYPE_Linux22 = 0x51000,
-- VBOXOSTYPE_Linux24 = 0x52000,
-- VBOXOSTYPE_Linux24_x64 = 0x52100,
-- VBOXOSTYPE_Linux26 = 0x53000,
-- VBOXOSTYPE_Linux26_x64 = 0x53100,
-- VBOXOSTYPE_ArchLinux = 0x54000,
-- VBOXOSTYPE_ArchLinux_x64 = 0x54100,
-- VBOXOSTYPE_Debian = 0x55000,
-- VBOXOSTYPE_Debian_x64 = 0x55100,
-- VBOXOSTYPE_OpenSUSE = 0x56000,
-- VBOXOSTYPE_OpenSUSE_x64 = 0x56100,
-- VBOXOSTYPE_FedoraCore = 0x57000,
-- VBOXOSTYPE_FedoraCore_x64 = 0x57100,
-- VBOXOSTYPE_Gentoo = 0x58000,
-- VBOXOSTYPE_Gentoo_x64 = 0x58100,
-- VBOXOSTYPE_Mandriva = 0x59000,
-- VBOXOSTYPE_Mandriva_x64 = 0x59100,
-- VBOXOSTYPE_RedHat = 0x5A000,
-- VBOXOSTYPE_RedHat_x64 = 0x5A100,
-- VBOXOSTYPE_Turbolinux = 0x5B000,
-- VBOXOSTYPE_Turbolinux_x64 = 0x5B100,
-- VBOXOSTYPE_Ubuntu = 0x5C000,
-- VBOXOSTYPE_Ubuntu_x64 = 0x5C100,
-- VBOXOSTYPE_Xandros = 0x5D000,
-- VBOXOSTYPE_Xandros_x64 = 0x5D100,
-- VBOXOSTYPE_Oracle = 0x5E000,
-- VBOXOSTYPE_Oracle_x64 = 0x5E100,
-- VBOXOSTYPE_FreeBSD = 0x60000,
-- VBOXOSTYPE_FreeBSD_x64 = 0x60100,
-- VBOXOSTYPE_OpenBSD = 0x61000,
-- VBOXOSTYPE_OpenBSD_x64 = 0x61100,
-- VBOXOSTYPE_NetBSD = 0x62000,
-- VBOXOSTYPE_NetBSD_x64 = 0x62100,
-- VBOXOSTYPE_Netware = 0x70000,
-- VBOXOSTYPE_Solaris = 0x80000,
-- VBOXOSTYPE_Solaris_x64 = 0x80100,
-- VBOXOSTYPE_OpenSolaris = 0x81000,
-- VBOXOSTYPE_OpenSolaris_x64 = 0x81100,
-- VBOXOSTYPE_L4 = 0x90000,
-- VBOXOSTYPE_QNX = 0xA0000,
-- VBOXOSTYPE_MacOS = 0xB0000,
-- VBOXOSTYPE_MacOS_x64 = 0xB0100,
-- VBOXOSTYPE_JRockitVE = 0xC0000,
-+ VBOXOSTYPE_GNU = 0x10000,
-+ VBOXOSTYPE_GNU_x64 = 0x10100,
-+ VBOXOSTYPE_GNUHurd = 0x20000,
-+ VBOXOSTYPE_GNULinux = 0x30000,
-+ VBOXOSTYPE_GNULinux_x64 = 0x30100,
-+ VBOXOSTYPE_Parabola = 0x31000,
-+ VBOXOSTYPE_Parabola_x64 = 0x31100,
-+ VBOXOSTYPE_gNewSense = 0x32000,
-+ VBOXOSTYPE_gNewSense_x64 = 0x32100,
-+ VBOXOSTYPE_Blag = 0x33000,
-+ VBOXOSTYPE_Blag_x64 = 0x33100,
-+ VBOXOSTYPE_Dragora = 0x34000,
-+ VBOXOSTYPE_Dragora_x64 = 0x34100,
-+ VBOXOSTYPE_Ututo = 0x35000,
-+ VBOXOSTYPE_Ututo_x64 = 0x35100,
-+ VBOXOSTYPE_Musix = 0x36000,
-+ VBOXOSTYPE_Musix_x64 = 0x36100,
-+ VBOXOSTYPE_Trisquel = 0x37000,
-+ VBOXOSTYPE_Trisquel_x64 = 0x37100,
-+ VBOXOSTYPE_Dynebolic = 0x38000,
-+ VBOXOSTYPE_Venenux = 0x39000,
- /** The bit number which indicates 64-bit or 32-bit. */
- #define VBOXOSTYPE_x64_BIT 8
- /** The mask which indicates 64-bit. */
-@@ -129,16 +79,11 @@
- typedef enum VBOXOSFAMILY
- {
- VBOXOSFAMILY_Unknown = 0,
-- VBOXOSFAMILY_Windows32 = 1,
-- VBOXOSFAMILY_Windows64 = 2,
-- VBOXOSFAMILY_Linux32 = 3,
-- VBOXOSFAMILY_Linux64 = 4,
-- VBOXOSFAMILY_FreeBSD32 = 5,
-- VBOXOSFAMILY_FreeBSD64 = 6,
-- VBOXOSFAMILY_Solaris32 = 7,
-- VBOXOSFAMILY_Solaris64 = 8,
-- VBOXOSFAMILY_MacOSX32 = 9,
-- VBOXOSFAMILY_MacOSX64 = 10,
-+ VBOXOSFAMILY_GNU32 = 1,
-+ VBOXOSFAMILY_GNU64 = 2,
-+ VBOXOSFAMILY_GNUHurd = 3,
-+ VBOXOSFAMILY_GNULinux32 = 4,
-+ VBOXOSFAMILY_GNULinux64 = 5,
- /** The usual 32-bit hack. */
- VBOXOSFAMILY_32BIT_HACK = 0x7fffffff
- } VBOXOSFAMILY;
---- VirtualBox-4.1.18.orig/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-06-20 10:17:35.000000000 -0300
-+++ VirtualBox-4.1.18/src/VBox/Main/src-server/ApplianceImpl.cpp 2012-07-26 01:28:50.033551279 -0300
-@@ -49,94 +49,33 @@
- g_osTypes[] =
- {
- { ovf::CIMOSType_CIMOS_Unknown, SchemaDefs_OSTypeId_Other },
-- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2 },
-- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp3 },
-- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp4 },
-- { ovf::CIMOSType_CIMOS_OS2, SchemaDefs_OSTypeId_OS2Warp45 },
-- { ovf::CIMOSType_CIMOS_MSDOS, SchemaDefs_OSTypeId_DOS },
-- { ovf::CIMOSType_CIMOS_WIN3x, SchemaDefs_OSTypeId_Windows31 },
-- { ovf::CIMOSType_CIMOS_WIN95, SchemaDefs_OSTypeId_Windows95 },
-- { ovf::CIMOSType_CIMOS_WIN98, SchemaDefs_OSTypeId_Windows98 },
-- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT },
-- { ovf::CIMOSType_CIMOS_WINNT, SchemaDefs_OSTypeId_WindowsNT4 },
-- { ovf::CIMOSType_CIMOS_NetWare, SchemaDefs_OSTypeId_Netware },
-- { ovf::CIMOSType_CIMOS_NovellOES, SchemaDefs_OSTypeId_Netware },
-- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_Solaris },
-- { ovf::CIMOSType_CIMOS_SunOS, SchemaDefs_OSTypeId_Solaris },
-- { ovf::CIMOSType_CIMOS_FreeBSD, SchemaDefs_OSTypeId_FreeBSD },
-- { ovf::CIMOSType_CIMOS_NetBSD, SchemaDefs_OSTypeId_NetBSD },
-- { ovf::CIMOSType_CIMOS_QNX, SchemaDefs_OSTypeId_QNX },
-- { ovf::CIMOSType_CIMOS_Windows2000, SchemaDefs_OSTypeId_Windows2000 },
-- { ovf::CIMOSType_CIMOS_WindowsMe, SchemaDefs_OSTypeId_WindowsMe },
-- { ovf::CIMOSType_CIMOS_OpenBSD, SchemaDefs_OSTypeId_OpenBSD },
-- { ovf::CIMOSType_CIMOS_WindowsXP, SchemaDefs_OSTypeId_WindowsXP },
-- { ovf::CIMOSType_CIMOS_WindowsXPEmbedded, SchemaDefs_OSTypeId_WindowsXP },
-- { ovf::CIMOSType_CIMOS_WindowsEmbeddedforPointofService, SchemaDefs_OSTypeId_WindowsXP },
-- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003, SchemaDefs_OSTypeId_Windows2003 },
-- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2003_64, SchemaDefs_OSTypeId_Windows2003_64 },
-- { ovf::CIMOSType_CIMOS_WindowsXP_64, SchemaDefs_OSTypeId_WindowsXP_64 },
-- { ovf::CIMOSType_CIMOS_WindowsVista, SchemaDefs_OSTypeId_WindowsVista },
-- { ovf::CIMOSType_CIMOS_WindowsVista_64, SchemaDefs_OSTypeId_WindowsVista_64 },
-- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008, SchemaDefs_OSTypeId_Windows2008 },
-- { ovf::CIMOSType_CIMOS_MicrosoftWindowsServer2008_64, SchemaDefs_OSTypeId_Windows2008_64 },
-- { ovf::CIMOSType_CIMOS_FreeBSD_64, SchemaDefs_OSTypeId_FreeBSD_64 },
-- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS },
-- { ovf::CIMOSType_CIMOS_MACOS, SchemaDefs_OSTypeId_MacOS_64 }, // there is no CIM 64-bit type for this
--
-- // Linuxes
-- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux, SchemaDefs_OSTypeId_RedHat },
-- { ovf::CIMOSType_CIMOS_RedHatEnterpriseLinux_64, SchemaDefs_OSTypeId_RedHat_64 },
-- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_Solaris_64 },
-- { ovf::CIMOSType_CIMOS_SUSE, SchemaDefs_OSTypeId_OpenSUSE },
-- { ovf::CIMOSType_CIMOS_SLES, SchemaDefs_OSTypeId_OpenSUSE },
-- { ovf::CIMOSType_CIMOS_NovellLinuxDesktop, SchemaDefs_OSTypeId_OpenSUSE },
-- { ovf::CIMOSType_CIMOS_SUSE_64, SchemaDefs_OSTypeId_OpenSUSE_64 },
-- { ovf::CIMOSType_CIMOS_SLES_64, SchemaDefs_OSTypeId_OpenSUSE_64 },
-- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux },
-- { ovf::CIMOSType_CIMOS_LINUX, SchemaDefs_OSTypeId_Linux22 },
-- { ovf::CIMOSType_CIMOS_SunJavaDesktopSystem, SchemaDefs_OSTypeId_Linux },
-- { ovf::CIMOSType_CIMOS_TurboLinux, SchemaDefs_OSTypeId_Turbolinux },
-- { ovf::CIMOSType_CIMOS_TurboLinux_64, SchemaDefs_OSTypeId_Turbolinux_64 },
-- { ovf::CIMOSType_CIMOS_Mandriva, SchemaDefs_OSTypeId_Mandriva },
-- { ovf::CIMOSType_CIMOS_Mandriva_64, SchemaDefs_OSTypeId_Mandriva_64 },
-- { ovf::CIMOSType_CIMOS_Ubuntu, SchemaDefs_OSTypeId_Ubuntu },
-- { ovf::CIMOSType_CIMOS_Ubuntu_64, SchemaDefs_OSTypeId_Ubuntu_64 },
-- { ovf::CIMOSType_CIMOS_Debian, SchemaDefs_OSTypeId_Debian },
-- { ovf::CIMOSType_CIMOS_Debian_64, SchemaDefs_OSTypeId_Debian_64 },
-- { ovf::CIMOSType_CIMOS_Linux_2_4_x, SchemaDefs_OSTypeId_Linux24 },
-- { ovf::CIMOSType_CIMOS_Linux_2_4_x_64, SchemaDefs_OSTypeId_Linux24_64 },
-- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Linux26 },
-- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Linux26_64 },
-- { ovf::CIMOSType_CIMOS_Linux_64, SchemaDefs_OSTypeId_Linux26_64 },
--
-- // types that we have support for but CIM doesn't
-- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_ArchLinux },
-- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_ArchLinux_64 },
-- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Fedora },
-- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Fedora_64 },
-- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Gentoo },
-- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Gentoo_64 },
-- { ovf::CIMOSType_CIMOS_Linux_2_6_x, SchemaDefs_OSTypeId_Xandros },
-- { ovf::CIMOSType_CIMOS_Linux_2_6_x_64, SchemaDefs_OSTypeId_Xandros_64 },
-- { ovf::CIMOSType_CIMOS_Solaris, SchemaDefs_OSTypeId_OpenSolaris },
-- { ovf::CIMOSType_CIMOS_Solaris_64, SchemaDefs_OSTypeId_OpenSolaris_64 },
--
-- // types added with CIM 2.25.0 follow:
-- { ovf::CIMOSType_CIMOS_WindowsServer2008R2, SchemaDefs_OSTypeId_Windows2008 }, // duplicate, see above
--// { ovf::CIMOSType_CIMOS_VMwareESXi = 104, // we can't run ESX in a VM
-- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7 },
-- { ovf::CIMOSType_CIMOS_Windows7, SchemaDefs_OSTypeId_Windows7_64 }, // there is no CIM 64-bit type for this
-- { ovf::CIMOSType_CIMOS_CentOS, SchemaDefs_OSTypeId_RedHat },
-- { ovf::CIMOSType_CIMOS_CentOS_64, SchemaDefs_OSTypeId_RedHat_64 },
-- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux, SchemaDefs_OSTypeId_Oracle },
-- { ovf::CIMOSType_CIMOS_OracleEnterpriseLinux_64, SchemaDefs_OSTypeId_Oracle_64 },
-- { ovf::CIMOSType_CIMOS_eComStation, SchemaDefs_OSTypeId_OS2eCS }
--
-- // there are no CIM types for these, so these turn to "other" on export:
-- // SchemaDefs_OSTypeId_OpenBSD
-- // SchemaDefs_OSTypeId_OpenBSD_64
-- // SchemaDefs_OSTypeId_NetBSD
-- // SchemaDefs_OSTypeId_NetBSD_64
-+
-+ // Custom OS
-+ { ovf::CIMOSType_CIMOS_GNU, SchemaDefs_OSTypeId_GNU },
-+ { ovf::CIMOSType_CIMOS_GNU_64, SchemaDefs_OSTypeId_GNU_64 },
-+ { ovf::CIMOSType_CIMOS_GNUHurd, SchemaDefs_OSTypeId_GNUHurd },
-+ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_GNULinux },
-+ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_GNULinux_64 },
-+
-+ // GNU/Linux free distros
-+ { ovf::CIMOSType_CIMOS_gNewSense, SchemaDefs_OSTypeId_gNewSense },
-+ { ovf::CIMOSType_CIMOS_gNewSense_64, SchemaDefs_OSTypeId_gNewSense_64 },
-+ { ovf::CIMOSType_CIMOS_Dragora, SchemaDefs_OSTypeId_Dragora },
-+ { ovf::CIMOSType_CIMOS_Dragora_64, SchemaDefs_OSTypeId_Dragora_64 },
-+ { ovf::CIMOSType_CIMOS_Musix, SchemaDefs_OSTypeId_Musix },
-+ { ovf::CIMOSType_CIMOS_Musix_64, SchemaDefs_OSTypeId_Musix_64 },
-+ { ovf::CIMOSType_CIMOS_Trisquel, SchemaDefs_OSTypeId_Trisquel },
-+ { ovf::CIMOSType_CIMOS_Trisquel_64, SchemaDefs_OSTypeId_Trisquel_64 },
-+ { ovf::CIMOSType_CIMOS_Dynebolic, SchemaDefs_OSTypeId_Dynebolic },
-+ { ovf::CIMOSType_CIMOS_Venenux, SchemaDefs_OSTypeId_Venenux },
-+
-+ // GNU/Linux free distros that we have support for but CIM doesn't
-+ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Parabola },
-+ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Parabola_64 },
-+ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Blag },
-+ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Blag_64 },
-+ { ovf::CIMOSType_CIMOS_GNULinux, SchemaDefs_OSTypeId_Ututo },
-+ { ovf::CIMOSType_CIMOS_GNULinux_64, SchemaDefs_OSTypeId_Ututo_64 },
-
- };
-
-@@ -150,53 +89,34 @@
- /* These are the 32-Bit ones. They are sorted by priority. */
- static const osTypePattern g_osTypesPattern[] =
- {
-- {"Windows NT", SchemaDefs_OSTypeId_WindowsNT4},
-- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP},
-- {"Windows 2000", SchemaDefs_OSTypeId_Windows2000},
-- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003},
-- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista},
-- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008},
-- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE},
-- {"Novell", SchemaDefs_OSTypeId_OpenSUSE},
-- {"Red Hat", SchemaDefs_OSTypeId_RedHat},
-- {"Mandriva", SchemaDefs_OSTypeId_Mandriva},
-- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu},
-- {"Debian", SchemaDefs_OSTypeId_Debian},
-- {"QNX", SchemaDefs_OSTypeId_QNX},
-- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24},
-- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26},
-- {"Linux", SchemaDefs_OSTypeId_Linux},
-- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris},
-- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris},
-- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD},
-- {"NetBSD", SchemaDefs_OSTypeId_NetBSD},
-- {"Windows 95", SchemaDefs_OSTypeId_Windows95},
-- {"Windows 98", SchemaDefs_OSTypeId_Windows98},
-- {"Windows Me", SchemaDefs_OSTypeId_WindowsMe},
-- {"Windows 3.", SchemaDefs_OSTypeId_Windows31},
-- {"DOS", SchemaDefs_OSTypeId_DOS},
-- {"OS2", SchemaDefs_OSTypeId_OS2}
-+
-+ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola},
-+ {"gNewSense", SchemaDefs_OSTypeId_gNewSense},
-+ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag},
-+ {"Dragora", SchemaDefs_OSTypeId_Dragora},
-+ {"Ututo XS", SchemaDefs_OSTypeId_Ututo},
-+ {"Musix", SchemaDefs_OSTypeId_Musix},
-+ {"Trisquel", SchemaDefs_OSTypeId_Trisquel},
-+ {"Dyne:bolic", SchemaDefs_OSTypeId_Dynebolic},
-+ {"Venenux", SchemaDefs_OSTypeId_Venenux},
-+ {"GNU", SchemaDefs_OSTypeId_GNU},
-+ {"GNU-Hurd", SchemaDefs_OSTypeId_GNUHurd},
-+ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux},
-+
- };
-
- /* These are the 64-Bit ones. They are sorted by priority. */
- static const osTypePattern g_osTypesPattern64[] =
- {
-- {"Windows XP", SchemaDefs_OSTypeId_WindowsXP_64},
-- {"Windows 2003", SchemaDefs_OSTypeId_Windows2003_64},
-- {"Windows Vista", SchemaDefs_OSTypeId_WindowsVista_64},
-- {"Windows 2008", SchemaDefs_OSTypeId_Windows2008_64},
-- {"SUSE", SchemaDefs_OSTypeId_OpenSUSE_64},
-- {"Novell", SchemaDefs_OSTypeId_OpenSUSE_64},
-- {"Red Hat", SchemaDefs_OSTypeId_RedHat_64},
-- {"Mandriva", SchemaDefs_OSTypeId_Mandriva_64},
-- {"Ubuntu", SchemaDefs_OSTypeId_Ubuntu_64},
-- {"Debian", SchemaDefs_OSTypeId_Debian_64},
-- {"Linux 2.4", SchemaDefs_OSTypeId_Linux24_64},
-- {"Linux 2.6", SchemaDefs_OSTypeId_Linux26_64},
-- {"Linux", SchemaDefs_OSTypeId_Linux26_64},
-- {"OpenSolaris", SchemaDefs_OSTypeId_OpenSolaris_64},
-- {"Solaris", SchemaDefs_OSTypeId_OpenSolaris_64},
-- {"FreeBSD", SchemaDefs_OSTypeId_FreeBSD_64},
-+ {"Parabola GNU/Linux-libre", SchemaDefs_OSTypeId_Parabola_64},
-+ {"gNewSense", SchemaDefs_OSTypeId_gNewSense_64},
-+ {"Blag Linux and GNU", SchemaDefs_OSTypeId_Blag_64},
-+ {"Dragora", SchemaDefs_OSTypeId_Dragora_64},
-+ {"Ututo XS", SchemaDefs_OSTypeId_Ututo_64},
-+ {"Musix", SchemaDefs_OSTypeId_Musix_64},
-+ {"Trisquel", SchemaDefs_OSTypeId_Trisquel_64},
-+ {"GNU", SchemaDefs_OSTypeId_GNU_64},
-+ {"GNU/Linux", SchemaDefs_OSTypeId_GNULinux_64},
- };
-
- /**
---- VirtualBox-4.1.18.orig/src/VBox/Main/include/ovfreader.h 2012-06-20 10:17:34.000000000 -0300
-+++ VirtualBox-4.1.18/src/VBox/Main/include/ovfreader.h 2012-07-26 03:51:21.807619186 -0300
-@@ -34,119 +34,24 @@
-
- enum CIMOSType_T
- {
-- CIMOSType_CIMOS_Unknown = 0,
-- CIMOSType_CIMOS_Other = 1,
-- CIMOSType_CIMOS_MACOS = 2,
-- CIMOSType_CIMOS_ATTUNIX = 3,
-- CIMOSType_CIMOS_DGUX = 4,
-- CIMOSType_CIMOS_DECNT = 5,
-- CIMOSType_CIMOS_Tru64UNIX = 6,
-- CIMOSType_CIMOS_OpenVMS = 7,
-- CIMOSType_CIMOS_HPUX = 8,
-- CIMOSType_CIMOS_AIX = 9,
-- CIMOSType_CIMOS_MVS = 10,
-- CIMOSType_CIMOS_OS400 = 11,
-- CIMOSType_CIMOS_OS2 = 12,
-- CIMOSType_CIMOS_JavaVM = 13,
-- CIMOSType_CIMOS_MSDOS = 14,
-- CIMOSType_CIMOS_WIN3x = 15,
-- CIMOSType_CIMOS_WIN95 = 16,
-- CIMOSType_CIMOS_WIN98 = 17,
-- CIMOSType_CIMOS_WINNT = 18,
-- CIMOSType_CIMOS_WINCE = 19,
-- CIMOSType_CIMOS_NCR3000 = 20,
-- CIMOSType_CIMOS_NetWare = 21,
-- CIMOSType_CIMOS_OSF = 22,
-- CIMOSType_CIMOS_DCOS = 23,
-- CIMOSType_CIMOS_ReliantUNIX = 24,
-- CIMOSType_CIMOS_SCOUnixWare = 25,
-- CIMOSType_CIMOS_SCOOpenServer = 26,
-- CIMOSType_CIMOS_Sequent = 27,
-- CIMOSType_CIMOS_IRIX = 28,
-- CIMOSType_CIMOS_Solaris = 29,
-- CIMOSType_CIMOS_SunOS = 30,
-- CIMOSType_CIMOS_U6000 = 31,
-- CIMOSType_CIMOS_ASERIES = 32,
-- CIMOSType_CIMOS_HPNonStopOS = 33,
-- CIMOSType_CIMOS_HPNonStopOSS = 34,
-- CIMOSType_CIMOS_BS2000 = 35,
-- CIMOSType_CIMOS_LINUX = 36,
-- CIMOSType_CIMOS_Lynx = 37,
-- CIMOSType_CIMOS_XENIX = 38,
-- CIMOSType_CIMOS_VM = 39,
-- CIMOSType_CIMOS_InteractiveUNIX = 40,
-- CIMOSType_CIMOS_BSDUNIX = 41,
-- CIMOSType_CIMOS_FreeBSD = 42,
-- CIMOSType_CIMOS_NetBSD = 43,
-- CIMOSType_CIMOS_GNUHurd = 44,
-- CIMOSType_CIMOS_OS9 = 45,
-- CIMOSType_CIMOS_MACHKernel = 46,
-- CIMOSType_CIMOS_Inferno = 47,
-- CIMOSType_CIMOS_QNX = 48,
-- CIMOSType_CIMOS_EPOC = 49,
-- CIMOSType_CIMOS_IxWorks = 50,
-- CIMOSType_CIMOS_VxWorks = 51,
-- CIMOSType_CIMOS_MiNT = 52,
-- CIMOSType_CIMOS_BeOS = 53,
-- CIMOSType_CIMOS_HPMPE = 54,
-- CIMOSType_CIMOS_NextStep = 55,
-- CIMOSType_CIMOS_PalmPilot = 56,
-- CIMOSType_CIMOS_Rhapsody = 57,
-- CIMOSType_CIMOS_Windows2000 = 58,
-- CIMOSType_CIMOS_Dedicated = 59,
-- CIMOSType_CIMOS_OS390 = 60,
-- CIMOSType_CIMOS_VSE = 61,
-- CIMOSType_CIMOS_TPF = 62,
-- CIMOSType_CIMOS_WindowsMe = 63,
-- CIMOSType_CIMOS_CalderaOpenUNIX = 64,
-- CIMOSType_CIMOS_OpenBSD = 65,
-- CIMOSType_CIMOS_NotApplicable = 66,
-- CIMOSType_CIMOS_WindowsXP = 67,
-- CIMOSType_CIMOS_zOS = 68,
-- CIMOSType_CIMOS_MicrosoftWindowsServer2003 = 69,
-- CIMOSType_CIMOS_MicrosoftWindowsServer2003_64 = 70,
-- CIMOSType_CIMOS_WindowsXP_64 = 71,
-- CIMOSType_CIMOS_WindowsXPEmbedded = 72,
-- CIMOSType_CIMOS_WindowsVista = 73,
-- CIMOSType_CIMOS_WindowsVista_64 = 74,
-- CIMOSType_CIMOS_WindowsEmbeddedforPointofService = 75,
-- CIMOSType_CIMOS_MicrosoftWindowsServer2008 = 76,
-- CIMOSType_CIMOS_MicrosoftWindowsServer2008_64 = 77,
-- CIMOSType_CIMOS_FreeBSD_64 = 78,
-- CIMOSType_CIMOS_RedHatEnterpriseLinux = 79,
-- CIMOSType_CIMOS_RedHatEnterpriseLinux_64 = 80,
-- CIMOSType_CIMOS_Solaris_64 = 81,
-- CIMOSType_CIMOS_SUSE = 82,
-- CIMOSType_CIMOS_SUSE_64 = 83,
-- CIMOSType_CIMOS_SLES = 84,
-- CIMOSType_CIMOS_SLES_64 = 85,
-- CIMOSType_CIMOS_NovellOES = 86,
-- CIMOSType_CIMOS_NovellLinuxDesktop = 87,
-- CIMOSType_CIMOS_SunJavaDesktopSystem = 88,
-- CIMOSType_CIMOS_Mandriva = 89,
-- CIMOSType_CIMOS_Mandriva_64 = 90,
-- CIMOSType_CIMOS_TurboLinux = 91,
-- CIMOSType_CIMOS_TurboLinux_64 = 92,
-- CIMOSType_CIMOS_Ubuntu = 93,
-- CIMOSType_CIMOS_Ubuntu_64 = 94,
-- CIMOSType_CIMOS_Debian = 95,
-- CIMOSType_CIMOS_Debian_64 = 96,
-- CIMOSType_CIMOS_Linux_2_4_x = 97,
-- CIMOSType_CIMOS_Linux_2_4_x_64 = 98,
-- CIMOSType_CIMOS_Linux_2_6_x = 99,
-- CIMOSType_CIMOS_Linux_2_6_x_64 = 100,
-- CIMOSType_CIMOS_Linux_64 = 101,
-- CIMOSType_CIMOS_Other_64 = 102,
-- // types added with CIM 2.25.0 follow:
-- CIMOSType_CIMOS_WindowsServer2008R2 = 103,
-- CIMOSType_CIMOS_VMwareESXi = 104,
-- CIMOSType_CIMOS_Windows7 = 105,
-- CIMOSType_CIMOS_CentOS = 106,
-- CIMOSType_CIMOS_CentOS_64 = 107,
-- CIMOSType_CIMOS_OracleEnterpriseLinux = 108,
-- CIMOSType_CIMOS_OracleEnterpriseLinux_64 = 109,
-- CIMOSType_CIMOS_eComStation = 110
-- // no new types added with CIM 2.26.0
-+ CIMOSType_CIMOS_Unknown = 0,
-+ CIMOSType_CIMOS_Other = 1,
-+ CIMOSType_CIMOS_Other_64 = 2,
-+ CIMOSType_CIMOS_gNewSense = 3,
-+ CIMOSType_CIMOS_gNewSense_64 = 4,
-+ CIMOSType_CIMOS_Dragora = 5,
-+ CIMOSType_CIMOS_Dragora_64 = 6,
-+ CIMOSType_CIMOS_Musix = 7,
-+ CIMOSType_CIMOS_Musix_64 = 8,
-+ CIMOSType_CIMOS_Trisquel = 9,
-+ CIMOSType_CIMOS_Trisquel_64 = 10,
-+ CIMOSType_CIMOS_Dynebolic = 11,
-+ CIMOSType_CIMOS_Venenux = 12,
-+ CIMOSType_CIMOS_GNU = 13,
-+ CIMOSType_CIMOS_GNU_64 = 14,
-+ CIMOSType_CIMOS_GNUHurd = 15,
-+ CIMOSType_CIMOS_GNULinux = 16,
-+ CIMOSType_CIMOS_GNULinux_64 = 17
- };
-
-
---- VirtualBox-4.1.18.orig/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-06-20 10:09:01.000000000 -0300
-+++ VirtualBox-4.1.18/src/VBox/Additions/common/VBoxGuest/VBoxGuest-linux.c 2012-07-26 15:32:55.309812685 -0300
-@@ -622,16 +622,16 @@
- * Call the common device extension initializer.
- */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_X86)
-- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26;
-+ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux;
- #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) && defined(RT_ARCH_AMD64)
-- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux26_x64;
-+ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64;
- #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_X86)
-- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24;
-+ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux;
- #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0) && defined(RT_ARCH_AMD64)
-- VBOXOSTYPE enmOSType = VBOXOSTYPE_Linux24_x64;
-+ VBOXOSTYPE enmOSType = VBOXOSTYPE_GNULinux_x64;
- #else
- # warning "huh? which arch + version is this?"
-- VBOXOSTYPE enmOsType = VBOXOSTYPE_Linux;
-+ VBOXOSTYPE enmOsType = VBOXOSTYPE_GNULinux;
- #endif
- rc = VBoxGuestInitDevExt(&g_DevExt,
- g_IOPortBase,
diff --git a/libre/virtualbox-libre-modules-lts/libre.patch b/libre/virtualbox-libre-modules-lts/libre.patch
deleted file mode 100755
index e51d0c0a7..000000000
--- a/libre/virtualbox-libre-modules-lts/libre.patch
+++ /dev/null
@@ -1,5765 +0,0 @@
---- VirtualBox-4.1.18.orig/Config.kmk 2012-07-24 16:38:43.981310996 -0300
-+++ VirtualBox-4.1.18/Config.kmk 2012-07-24 16:38:44.001309865 -0300
-@@ -56,9 +56,6 @@
- PROPS_SYSMODS_ACCUMULATE_L += INTERMEDIATES
- PROPS_MISCBINS_ACCUMULATE_L += INTERMEDIATES
-
--# Misc names used bye the install paths below.
--VBOX_PUEL_MANGLED_NAME := Oracle_VM_VirtualBox_Extension_Pack
--
- # Install paths
- ## @todo This will change after 4.1 is branched off!
- # What is now 'bin' and 'lib' will be moved down under 'staged/', except on
-@@ -125,9 +122,6 @@
- endif
-
- INST_DOC = doc/
--INST_EXTPACK = $(INST_BIN)ExtensionPacks/
--INST_EXTPACK_CERTS = $(INST_BIN)ExtPackCertificates/
--INST_EXTPACK_PUEL = $(INST_EXTPACK)$(VBOX_PUEL_MANGLED_NAME)/
- INST_PACKAGES = packages/
-
- VBOX_PATH_SDK = $(patsubst %/,%,$(PATH_STAGE)/$(INST_SDK))
-@@ -136,7 +130,6 @@
- VBOX_PATH_ADDITIONS = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS))
- VBOX_PATH_ADDITIONS_ISO = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_ISO))
- VBOX_PATH_ADDITIONS_LIB = $(patsubst %/,%,$(PATH_STAGE)/$(INST_ADDITIONS_LIB))
--VBOX_PATH_EXTPACK_PUEL= $(patsubst %/,%,$(PATH_STAGE)/$(INST_EXTPACK_PUEL))
- VBOX_PATH_PACKAGES = $(patsubst %/,%,$(PATH_STAGE)/$(INST_PACKAGES))
-
-
-@@ -208,7 +201,6 @@
- export VBOX_ADDITIONS_SH_MODE = release
- export VBOX_DOCUMENTATION_SH_MODE = release
- export VBOX_EFI_SH_MODE = release
-- export VBOX_EXTPACKS_SH_MODE = release
- endif
-
- # Some info on the vendor
-@@ -361,8 +353,6 @@
- VBOX_WITH_USB = 1
- # Enable the USB 1.1 controller plus virtual USB HID devices.
- VBOX_WITH_VUSB = 1
--# Enable the USB 2.0 controller.
--VBOX_WITH_EHCI = 1
- # Enable the ISCSI feature.
- VBOX_WITH_ISCSI = 1
- # Enable INIP support in the ISCSI feature.
-@@ -430,9 +420,6 @@
- ifdef VBOX_WITH_USB
- VBOX_WITH_VUSB = 1
- endif
--ifdef VBOX_WITH_EHCI
-- VBOX_WITH_EHCI_IMPL = 1
--endif
- ifdef VBOX_WITH_PCI_PASSTHROUGH
- VBOX_WITH_PCI_PASSTHROUGH_IMPL = 1
- endif
-@@ -591,15 +578,6 @@
- ## @}
-
-
--## @name Extension pack
--## @{
--# Enables the extension pack feature.
--VBOX_WITH_EXTPACK = 1
--# Enables separating code into the Oracle VM VirtualBox Extension Pack, dubbed PUEL.
--VBOX_WITH_EXTPACK_PUEL = 1
--# Enables building+packing the Oracle VM VirtualBox Extension Pack, includes VBOX_WITH_EXTPACK_PUEL
--VBOX_WITH_EXTPACK_PUEL_BUILD = 1
--## @}
-
- ## @name Misc
- ## @{
-@@ -777,14 +755,6 @@
- # Skip stuff.
- #
-
--ifdef VBOX_ONLY_EXTPACKS
-- # Clear some VBOX_WITH_XXX variables instead of adding ifdefs all over the place.
-- VBOX_WITH_DEBUGGER =
-- VBOX_WITH_ADDITIONS =
-- VBOX_WITH_VBOXDRV =
-- VBOX_WITH_TESTCASES =
--endif
--
- # VBOX_QUICK can be used by core developers to speed to the build
- ifdef VBOX_QUICK
- # undefine variables by assigning blank.
-@@ -848,7 +818,6 @@
- VBOX_WITH_TESTSUITE=
- VBOX_WITH_QTGUI=
- VBOX_WITH_USB=
-- VBOX_WITH_EHCI=
- VBOX_WITH_DOCS=
- VBOX_WITH_PDM_ASYNC_COMPLETION=
- VBOX_WITH_KCHMVIEWER=
-@@ -870,7 +839,6 @@
- VBOX_WITH_CROGL=
- VBOX_WITH_DEBUGGER=
- VBOX_WITH_DOCS=
-- VBOX_WITH_EHCI=
- VBOX_WITH_HARDENING=
- VBOX_WITH_HEADLESS=
- VBOX_WITH_HGCM=
-@@ -952,9 +920,6 @@
- #
- ifdef VBOX_OSE
- VBOX_WITH_VRDP=
-- VBOX_WITH_EHCI_IMPL=
-- VBOX_WITH_EXTPACK_PUEL=
-- VBOX_WITH_EXTPACK_PUEL_BUILD=
- VBOX_WITH_PCI_PASSTHROUGH_IMPL=
- VBOX_WITH_OS2_ADDITIONS_BIN=
- VBOX_WITH_SECURELABEL=
-@@ -1082,10 +1047,6 @@
- VBOX_WITH_KCHMVIEWER=
- endif
-
--ifdef VBOX_WITH_EXTPACK_PUEL_BUILD
-- VBOX_WITH_EXTPACK_PUEL = 1
--endif
--
- #
- # Mark OSE builds clearly, helps figuring out limitations more easily.
- #
-@@ -1679,9 +1640,6 @@
- # biossums (set BIOS checksums)
- VBOX_BIOSSUMS ?= $(PATH_OBJ)/biossums/biossums$(HOSTSUFF_EXE)
-
--# RTManifest (extension pack manifest utility)
--VBOX_RTMANIFEST ?= $(PATH_OBJ)/bldRTManifest/bldRTManifest$(HOSTSUFF_EXE)
--
- # filesplitter (splits java files)
- VBOX_FILESPLIT ?= $(PATH_OBJ)/filesplitter/filesplitter$(HOSTSUFF_EXE)
-
-@@ -2461,13 +2419,6 @@
- SDK_VBOX_OPENSSL2_LIBS = $(NO_SUCH_VARIABLE)
- endif
-
--SDK_VBoxOpenSslExtPack = Internal use only.
--SDK_VBoxOpenSslExtPack_INCS = $(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)
--SDK_VBoxOpenSslExtPack_ORDERDEPS = $(crypto-headers_1_TARGET)
--SDK_VBoxOpenSslExtPack_LIBS = \
-- $(PATH_STAGE_LIB)/VBoxExtPack-libssl$(VBOX_SUFF_LIB) \
-- $(PATH_STAGE_LIB)/VBoxExtPack-libcrypto$(VBOX_SUFF_LIB)
--
- SDK_VBOX_BLD_OPENSSL = .
- SDK_VBOX_BLD_OPENSSL_EXTENDS = VBOX_OPENSSL
- SDK_VBOX_BLD_OPENSSL_LIBS ?= \
-@@ -3817,100 +3768,6 @@
- endif
- TEMPLATE_VBOXMAINCLIENTDLL_LDFLAGS.darwin = $(filter-out -bind_at_load,$(TEMPLATE_VBOXMAINCLIENTEXE_LDFLAGS.darwin))
-
--
--
--#
--# Templates used for building the extension packs.
--#
--ifdef VBOX_WITH_EXTPACK
-- # Base templates (native or portable).
-- TEMPLATE_VBoxR3ExtPack = For the ring-3 context extension pack modules.
-- if 1 # Native for now.
-- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXR3DLLNOXCPT
-- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXR3DLLNOXCPT_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3
-- else
-- TEMPLATE_VBoxR3ExtPack_EXTENDS = VBOXNOCRTGCC
-- TEMPLATE_VBoxR3ExtPack_DEFS = $(TEMPLATE_VBOXNOCRTGCC_DEFS) VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R3 IPRT_NO_CRT IN_RING3
-- TEMPLATE_VBoxR3ExtPack_INCS = $(PATH_ROOT)/include/iprt/nocrt $(TEMPLATE_VBOXR3DLLNOXCPT_INCS)
-- endif
-- ifneq ($(KBUILD_TARGET),win)
-- TEMPLATE_VBoxR3ExtPack_CXXFLAGS = $(TEMPLATE_VBOXR3DLLNOXCPT_CXXFLAGS) -fno-rtti
-- endif
-- TEMPLATE_VBoxR3ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
-- ifeq ($(KBUILD_TARGET),linux)
-- TEMPLATE_VBoxR3ExtPack_LDFLAGS = $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RUNPATH)' '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
-- else
-- if !defined(VBOX_WITH_RUNPATH) && defined(VBOX_WITH_RELATIVE_RUNPATH)
-- TEMPLATE_VBoxR3ExtPack_LDFLAGS = '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)/../../..' $(filter-out '$(VBOX_GCC_RPATH_OPT)$(VBOX_WITH_RELATIVE_RUNPATH)', $(TEMPLATE_VBOXR3DLLNOXCPT_LDFLAGS))
-- endif
-- endif
-- ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
-- if1of ($(KBUILD_TARGET), win os2)
-- TEMPLATE_VBoxR3ExtPack_LIBS = \
-- $(TEMPLATE_LIBS_VBOXR3) \
-- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_LIB) \
-- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_LIB)
-- else
-- TEMPLATE_VBoxR3ExtPack_LIBS = \
-- $(TEMPLATE_LIBS_VBOXR3) \
-- $(PATH_STAGE_LIB)/VMMR3Imp$(VBOX_SUFF_DLL) \
-- $(PATH_STAGE_LIB)/VBoxRTImp$(VBOX_SUFF_DLL)
-- endif
-- else
-- TEMPLATE_VBoxR3ExtPack_LIBS = \
-- $(TEMPLATE_LIBS_VBOXR3) \
-- $(LIB_RUNTIME) \
-- $(LIB_VMM)
-- endif
--
-- TEMPLATE_VBoxR0ExtPack = For the ring-0 context extension pack modules.
-- TEMPLATE_VBoxR0ExtPack_EXTENDS = VBoxR0
-- TEMPLATE_VBoxR0ExtPack_EXTENDS_BY = appending
-- TEMPLATE_VBoxR0ExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
-- TEMPLATE_VBoxR0ExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_R0
-- if1of ($(VBOX_LDR_FMT), pe lx)
-- TEMPLATE_VBoxR0ExtPack_LIBS = \
-- $(PATH_STAGE_LIB)/VMMR0Imp$(VBOX_SUFF_LIB) \
-- $(PATH_STAGE_LIB)/SUPR0$(VBOX_SUFF_LIB)
-- endif
--
-- TEMPLATE_VBoxRcExtPack = For the raw-mode context extension pack modules.
-- TEMPLATE_VBoxRcExtPack_EXTENDS = VBoxRc
-- TEMPLATE_VBoxRcExtPack_EXTENDS_BY = appending
-- TEMPLATE_VBoxRcExtPack_SYSSUFF = .rc
-- TEMPLATE_VBoxRcExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
-- TEMPLATE_VBoxRcExtPack_DEFS = VBOX_IN_EXTPACK VBOX_IN_EXTPACK_RC
-- if1of ($(VBOX_LDR_FMT32), pe lx)
-- TEMPLATE_VBoxRcExtPack_LIBS = \
-- $(PATH_STAGE_LIB)/VMMRCBuiltin$(VBOX_SUFF_LIB) \
-- $(PATH_STAGE_LIB)/VMMRCImp$(VBOX_SUFF_LIB)
-- endif
--
-- TEMPLATE_VBoxInsExtPack = For the install targets of an extension pack.
-- TEMPLATE_VBoxInsExtPack_MODE = 0644
-- TEMPLATE_VBoxInsExtPack_INST = $(INST_EXTPACK)YouShallOverrideThis/
--
-- # For each individual extension pack
-- ifdef VBOX_WITH_EXTPACK_PUEL
-- TEMPLATE_VBoxR3ExtPackPuel = For the ring-3 context modules in the PUEL extension pack.
-- TEMPLATE_VBoxR3ExtPackPuel_EXTENDS = VBoxR3ExtPack
-- TEMPLATE_VBoxR3ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
--
-- TEMPLATE_VBoxR0ExtPackPuel = For the ring-0 context modules in the PUEL extension pack.
-- TEMPLATE_VBoxR0ExtPackPuel_EXTENDS = VBoxR0ExtPack
-- TEMPLATE_VBoxR0ExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
--
-- TEMPLATE_VBoxRcExtPackPuel = For the raw-mode context modules in the PUEL extension pack.
-- TEMPLATE_VBoxRcExtPackPuel_EXTENDS = VBoxRcExtPack
-- TEMPLATE_VBoxRcExtPackPuel_INST = $(INST_EXTPACK_PUEL)$(KBUILD_TARGET).$(KBUILD_TARGET_ARCH)/
--
-- TEMPLATE_VBoxInsExtPackPuel = For the install targets of an extension pack.
-- TEMPLATE_VBoxInsExtPackPuel_EXTENDS = VBoxR0ExtPack
-- TEMPLATE_VBoxInsExtPackPuel_INST = $(INST_EXTPACK_PUEL)
--endif
--endif # VBOX_WITH_EXTPACK
--
--
- #
- # Qt 4
- # Qt 4
---- VirtualBox-4.1.18.orig/Makefile.kmk 2012-07-24 17:16:47.078929150 -0300
-+++ VirtualBox-4.1.18/Makefile.kmk 2012-07-24 17:16:47.125592981 -0300
-@@ -446,7 +446,6 @@
- include/VBox \
- include/VBox/vmm \
- include/VBox/com \
-- include/VBox/ExtPack \
- include/VBox/HostServices \
- include/VBox/GuestHost \
- include/VBox/HGSMI \
-@@ -862,191 +861,6 @@
- additions-build-linux.x86.combined \
- additions-packing
-
--
--#
--# Build the extension packs, all of them.
--#
--# This is tailored (hardcoded) for the extension pack build box.
--#
--# The fetching must be done in serial fashion, while the building should be
--# more flexible wrt to -jN.
--#
--extpacks-fetch:
-- + $(KMK) -C tools fetch VBOX_ONLY_EXTPACKS=1
-- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=amd64 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1
-- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=darwin BUILD_TARGET_ARCH=x86 BUILD_TARGET=darwin VBOX_ONLY_EXTPACKS=1
--# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=amd64 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1
--# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=freebsd BUILD_TARGET_ARCH=x86 BUILD_TARGET=freebsd VBOX_ONLY_EXTPACKS=1
-- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=linux BUILD_TARGET_ARCH=amd64 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1
-- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=linux BUILD_TARGET_ARCH=x86 BUILD_TARGET=linux VBOX_ONLY_EXTPACKS=1
--# + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=os2 BUILD_TARGET_ARCH=x86 BUILD_TARGET=os2 VBOX_ONLY_EXTPACKS=1
-- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=amd64 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1
-- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=solaris BUILD_TARGET_ARCH=x86 BUILD_TARGET=solaris VBOX_ONLY_EXTPACKS=1
-- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=amd64 KBUILD_TARGET=win BUILD_TARGET_ARCH=amd64 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1
-- + $(KMK) -C tools fetch KBUILD_TARGET_ARCH=x86 KBUILD_TARGET=win BUILD_TARGET_ARCH=x86 BUILD_TARGET=win VBOX_ONLY_EXTPACKS=1
--
--
--extpacks-build: \
-- extpacks-build-win.amd64 \
-- extpacks-build-win.x86 \
-- extpacks-build-solaris.amd64 \
-- extpacks-build-solaris.x86 \
-- extpacks-build-os2.x86 \
-- extpacks-build-linux.amd64 \
-- extpacks-build-linux.x86 \
-- extpacks-build-darwin.amd64 \
-- extpacks-build-darwin.x86 \
-- extpacks-build-freebsd.amd64 \
-- extpacks-build-freebsd.x86
--
--VBOX_EXTPACKS_BUILD.amd64 = VBOX_ONLY_EXTPACKS=1 \
-- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \
-- KBUILD_TARGET_ARCH=amd64 BUILD_TARGET_ARCH=amd64 \
-- VBOX_SVN_REV=$(VBOX_SVN_REV)
--
--VBOX_EXTPACKS_BUILD.x86 = VBOX_ONLY_EXTPACKS=1 \
-- KBUILD_TYPE=$(KBUILD_TYPE) BUILD_TYPE=$(KBUILD_TYPE) \
-- KBUILD_TARGET_ARCH=x86 BUILD_TARGET_ARCH=x86 \
-- VBOX_SVN_REV=$(VBOX_SVN_REV)
--
--# Automatically determine the extpack build subdir name. Used for figuring out
--# directory names inside the extension pack building VMs.
--VBOX_EXTPACKS_BUILD_SUBDIRNAME := $(lastword $(subst /, ,$(PATH_ROOT)))
--
--# When building in parallel on a Windows host, make sure we finish the host
--# bit before kicking off any UNIX guest or we'll run into file sharing issues.
--ifeq ($(KBUILD_TARGET),win)
--VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST = extpacks-build-win.x86 extpacks-build-win.amd64
--else
--VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST =
--endif
--
--extpacks-build-win.amd64:
--ifeq ($(KBUILD_TARGET),win)
-- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
--else
-- $(call MSG_L1,Building Windows/amd64 extension packs)
-- $(VBOX_KMK_TIME) ssh vbox@192.168.27.6 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
--endif
--
--extpacks-build-win.x86:
--ifeq ($(KBUILD_TARGET),win)
-- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
--else
-- $(call MSG_L1,Building Windows/x86 extension packs)
-- $(VBOX_KMK_TIME) ssh vbox@192.168.27.16 " echo $@ && cd e:/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh kmk $(VBOX_EXTPACKS_BUILD.x86) all"
--endif
--
--ifeq ($(KBUILD_TARGET),solaris)
--extpacks-build-solaris.amd64:
-- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
--
--extpacks-build-solaris.x86: extpacks-build-solaris.amd64
-- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) VBOX_WITH_COMBINED_SOLARIS_GUEST_PACKAGE=1 all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
--
--else
--# Serialize 32-bit and 64-bit ASSUMING the same VM builds both.
--extpacks-build-solaris.rsync-into-vm: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
-- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,solaris,*) . 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)
--
--extpacks-build-solaris.build-it: extpacks-build-solaris.rsync-into-vm
-- $(call MSG_L1,Building Solaris/amd64 extension packs)
-- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/amd64 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
-- $(call MSG_L1,Building Solaris/x86 extension packs)
-- $(VBOX_KMK_TIME) ssh vbox@192.168.27.4 " echo $@/x86 && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
--
--extpacks-build-solaris.rsync-out-of-vm: extpacks-build-solaris.build-it
-- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.x86 out/
-- $(VBOX_KMK_TIME) rsync -a --delete 192.168.27.4:/mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/solaris.amd64 out/
--
--.NOTPARALLEL: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm
--.PHONY: extpacks-build-solaris.rsync-out-of-vm extpacks-build-solaris.rsync-into-vm extpacks-build-solaris.build-it
--
--extpacks-build-solaris.amd64: extpacks-build-solaris.rsync-out-of-vm
--extpacks-build-solaris.x86: extpacks-build-solaris.rsync-out-of-vm
--endif
--
--extpacks-build-os2.x86:
--#ifeq ($(KBUILD_TARGET),os2)
--# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
--#else
--# $(VBOX_KMK_TIME) ssh vbox@192.168.27.3 " cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) "
--#endif
--
--extpacks-build-linux.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
--ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.amd64)
-- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
--else
-- $(call MSG_L1,Building Linux/amd64 extension packs)
-- $(VBOX_KMK_TIME) ssh vbox@192.168.27.12 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
--endif
--
--extpacks-build-linux.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
--ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),linux.x86)
-- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
--else
-- $(call MSG_L1,Building Linux/x86 extension packs)
-- $(VBOX_KMK_TIME) ssh vbox@192.168.27.11 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
--endif
--
--extpacks-build-freebsd.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
--#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.amd64)
--# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
--#else
--# $(call MSG_L1,Building FreeBSD/amd64 extension packs)
--# $(VBOX_KMK_TIME) ssh vbox@192.168.27.17 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
--#endif
--
--extpacks-build-freebsd.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
--#ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),freebsd.x86)
--# + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
--#else
--# $(call MSG_L1,Building FreeBSD/x86 extension packs)
--# $(VBOX_KMK_TIME) ssh vbox@192.168.27.7 " echo $@ && cd /mnt/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
--#endif
--
--extpacks-build-darwin.amd64: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
--ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.amd64)
-- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.amd64) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
--else
-- $(call MSG_L1,Building Darwin/amd64 extension packs)
-- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,amd64) . 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)
-- $(VBOX_KMK_TIME) ssh vbox@192.168.27.15 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.amd64) all"
-- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.15:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.amd64 out/
--endif
--
--extpacks-build-darwin.x86: $(VBOX_EXTPACKS_BUILD_WIN_HOST_FIRST)
--ifeq ($(KBUILD_TARGET).$(KBUILD_TARGET_ARCH),darwin.x86)
-- + $(VBOX_KMK_TIME) $(KMK) $(VBOX_EXTPACKS_BUILD.x86) all $(VBOX_EXTPACKS_HOST_BUILD_TWEAK)
--else
-- $(call MSG_L1,Building Darwin/x86 extension packs)
-- $(VBOX_KMK_TIME) $(call VBOX_RSYNC_IN_FN,darwin,x86) . 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)
-- $(VBOX_KMK_TIME) ssh vbox@192.168.27.5 " echo $@ && cd /Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME) && tools/env.sh --no-wine kmk $(VBOX_EXTPACKS_BUILD.x86) all"
-- $(VBOX_KMK_TIME) rsync -am -v --delete 192.168.27.5:/Users/vbox/tinderbox/$(VBOX_EXTPACKS_BUILD_SUBDIRNAME)/out/darwin.x86 out/
--endif
--
--
--extpacks-packing:
-- + $(KMK) VBOX_ONLY_EXTPACKS=1 \
-- VBOX_WITH_EXTPACK_OS_ARCHS="darwin.amd64 darwin.x86 linux.amd64 linux.x86 solaris.amd64 solaris.x86 win.amd64 win.x86" \
-- packing
--# +++ freebsd.amd64 freebsd.x86 os2.x86 ^^^
--
--.PHONY: \
-- extpacks-build-win.x86 \
-- extpacks-build-win.amd64 \
-- extpacks-build-solaris.amd64 \
-- extpacks-build-solaris.x86 \
-- extpacks-build-os2.x86 \
-- extpacks-build-linux.amd64 \
-- extpacks-build-linux.x86 \
-- extpacks-build-freebsd.amd64 \
-- extpacks-build-freebsd.x86 \
-- extpacks-build-darwin.amd64 \
-- extpacks-build-darwin.x86 \
-- extpacks-packing
--
--
- #
- # Build the test suite, all of it.
- #
---- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.cpp 2012-06-20 10:15:51.000000000 -0300
-+++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.cpp 2012-07-24 16:18:03.964493454 -0300
-@@ -132,11 +132,6 @@
- if (RT_FAILURE(rc))
- return rc;
- #endif
--#ifdef VBOX_WITH_EHCI_IMPL
-- rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceEHCI);
-- if (RT_FAILURE(rc))
-- return rc;
--#endif
- #ifdef VBOX_ACPI
- rc = pCallbacks->pfnRegister(pCallbacks, &g_DeviceACPI);
- if (RT_FAILURE(rc))
---- VirtualBox-4.1.18.orig/src/VBox/Devices/build/VBoxDD.h 2012-06-20 10:15:51.000000000 -0300
-+++ VirtualBox-4.1.18/src/VBox/Devices/build/VBoxDD.h 2012-07-24 16:20:35.939205389 -0300
-@@ -62,7 +62,6 @@
- extern const PDMDEVREG g_DeviceICH6_HDA;
- extern const PDMDEVREG g_DeviceAudioSniffer;
- extern const PDMDEVREG g_DeviceOHCI;
--extern const PDMDEVREG g_DeviceEHCI;
- extern const PDMDEVREG g_DeviceACPI;
- extern const PDMDEVREG g_DeviceDMA;
- extern const PDMDEVREG g_DeviceFloppyController;
---- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackManagerImpl.h 2012-06-20 10:17:33.000000000 -0300
-+++ /dev/null 2012-07-24 14:48:18.638572110 -0300
-@@ -1,245 +0,0 @@
--/* $Id: ExtPackManagerImpl.h $ */
--/** @file
-- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC.
-- */
--
--/*
-- * Copyright (C) 2010 Oracle Corporation
-- *
-- * This file is part of VirtualBox Open Source Edition (OSE), as
-- * available from http://www.virtualbox.org. This file is free software;
-- * you can redistribute it and/or modify it under the terms of the GNU
-- * General Public License (GPL) as published by the Free Software
-- * Foundation, in version 2 as it comes in the "COPYING" file of the
-- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-- */
--
--#ifndef ____H_EXTPACKMANAGERIMPL
--#define ____H_EXTPACKMANAGERIMPL
--
--#include "VirtualBoxBase.h"
--#include <VBox/ExtPack/ExtPack.h>
--#include <iprt/fs.h>
--
--/**
-- * An extension pack file.
-- */
--class ATL_NO_VTABLE ExtPackFile :
-- public VirtualBoxBase,
-- VBOX_SCRIPTABLE_IMPL(IExtPackFile)
--{
--public:
-- /** @name COM and internal init/term/mapping cruft.
-- * @{ */
-- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackFile, IExtPackFile)
-- DECLARE_NOT_AGGREGATABLE(ExtPackFile)
-- DECLARE_PROTECT_FINAL_CONSTRUCT()
-- BEGIN_COM_MAP(ExtPackFile)
-- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackFile)
-- COM_INTERFACE_ENTRY(IExtPackBase)
-- END_COM_MAP()
-- DECLARE_EMPTY_CTOR_DTOR(ExtPackFile)
--
-- HRESULT FinalConstruct();
-- void FinalRelease();
-- HRESULT initWithFile(const char *a_pszFile, const char *a_pszDigest, class ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox);
-- void uninit();
-- RTMEMEF_NEW_AND_DELETE_OPERATORS();
-- /** @} */
--
-- /** @name IExtPackBase interfaces
-- * @{ */
-- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName);
-- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription);
-- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion);
-- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision);
-- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule);
-- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns));
-- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable);
-- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy);
-- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt);
-- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense);
-- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage,
-- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense);
-- /** @} */
--
-- /** @name IExtPackFile interfaces
-- * @{ */
-- STDMETHOD(COMGETTER(FilePath))(BSTR *a_pbstrPath);
-- STDMETHOD(Install)(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress);
-- /** @} */
--
--private:
-- /** @name Misc init helpers
-- * @{ */
-- HRESULT initFailed(const char *a_pszWhyFmt, ...);
-- /** @} */
--
--private:
-- struct Data;
-- /** Pointer to the private instance. */
-- Data *m;
--
-- friend class ExtPackManager;
--};
--
--
--/**
-- * An installed extension pack.
-- */
--class ATL_NO_VTABLE ExtPack :
-- public VirtualBoxBase,
-- VBOX_SCRIPTABLE_IMPL(IExtPack)
--{
--public:
-- /** @name COM and internal init/term/mapping cruft.
-- * @{ */
-- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPack, IExtPack)
-- DECLARE_NOT_AGGREGATABLE(ExtPack)
-- DECLARE_PROTECT_FINAL_CONSTRUCT()
-- BEGIN_COM_MAP(ExtPack)
-- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPack)
-- COM_INTERFACE_ENTRY(IExtPackBase)
-- END_COM_MAP()
-- DECLARE_EMPTY_CTOR_DTOR(ExtPack)
--
-- HRESULT FinalConstruct();
-- void FinalRelease();
-- HRESULT initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir);
-- void uninit();
-- RTMEMEF_NEW_AND_DELETE_OPERATORS();
-- /** @} */
--
-- /** @name IExtPackBase interfaces
-- * @{ */
-- STDMETHOD(COMGETTER(Name))(BSTR *a_pbstrName);
-- STDMETHOD(COMGETTER(Description))(BSTR *a_pbstrDescription);
-- STDMETHOD(COMGETTER(Version))(BSTR *a_pbstrVersion);
-- STDMETHOD(COMGETTER(Revision))(ULONG *a_puRevision);
-- STDMETHOD(COMGETTER(VRDEModule))(BSTR *a_pbstrVrdeModule);
-- STDMETHOD(COMGETTER(PlugIns))(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns));
-- STDMETHOD(COMGETTER(Usable))(BOOL *a_pfUsable);
-- STDMETHOD(COMGETTER(WhyUnusable))(BSTR *a_pbstrWhy);
-- STDMETHOD(COMGETTER(ShowLicense))(BOOL *a_pfShowIt);
-- STDMETHOD(COMGETTER(License))(BSTR *a_pbstrHtmlLicense);
-- STDMETHOD(QueryLicense)(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage,
-- IN_BSTR a_bstrFormat, BSTR *a_pbstrLicense);
-- /** @} */
--
-- /** @name IExtPack interfaces
-- * @{ */
-- STDMETHOD(QueryObject)(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown);
-- /** @} */
--
-- /** @name Internal interfaces used by ExtPackManager.
-- * @{ */
-- bool callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo);
-- HRESULT callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval);
-- bool callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock);
-- bool callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock);
-- bool callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock);
-- bool callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc);
-- bool callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc);
-- bool callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock);
-- HRESULT checkVrde(void);
-- HRESULT getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary);
-- bool wantsToBeDefaultVrde(void) const;
-- HRESULT refresh(bool *pfCanDelete);
-- /** @} */
--
--protected:
-- /** @name Internal helper methods.
-- * @{ */
-- void probeAndLoad(void);
-- bool findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind,
-- Utf8Str *a_ppStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const;
-- static bool objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2);
-- /** @} */
--
-- /** @name Extension Pack Helpers
-- * @{ */
-- static DECLCALLBACK(int) hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt,
-- VBOXEXTPACKMODKIND enmKind, char *pszFound, size_t cbFound, bool *pfNative);
-- static DECLCALLBACK(int) hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath);
-- static DECLCALLBACK(VBOXEXTPACKCTX) hlpGetContext(PCVBOXEXTPACKHLP pHlp);
-- static DECLCALLBACK(int) hlpReservedN(PCVBOXEXTPACKHLP pHlp);
-- /** @} */
--
--private:
-- struct Data;
-- /** Pointer to the private instance. */
-- Data *m;
--
-- friend class ExtPackManager;
--};
--
--
--/**
-- * Extension pack manager.
-- */
--class ATL_NO_VTABLE ExtPackManager :
-- public VirtualBoxBase,
-- VBOX_SCRIPTABLE_IMPL(IExtPackManager)
--{
-- /** @name COM and internal init/term/mapping cruft.
-- * @{ */
-- VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT(ExtPackManager, IExtPackManager)
-- DECLARE_NOT_AGGREGATABLE(ExtPackManager)
-- DECLARE_PROTECT_FINAL_CONSTRUCT()
-- BEGIN_COM_MAP(ExtPackManager)
-- VBOX_DEFAULT_INTERFACE_ENTRIES(IExtPackManager)
-- END_COM_MAP()
-- DECLARE_EMPTY_CTOR_DTOR(ExtPackManager)
--
-- HRESULT FinalConstruct();
-- void FinalRelease();
-- HRESULT initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext);
-- void uninit();
-- RTMEMEF_NEW_AND_DELETE_OPERATORS();
-- /** @} */
--
-- /** @name IExtPack interfaces
-- * @{ */
-- STDMETHOD(COMGETTER(InstalledExtPacks))(ComSafeArrayOut(IExtPack *, a_paExtPacks));
-- STDMETHOD(Find)(IN_BSTR a_bstrName, IExtPack **a_pExtPack);
-- STDMETHOD(OpenExtPackFile)(IN_BSTR a_bstrTarball, IExtPackFile **a_ppExtPackFile);
-- STDMETHOD(Uninstall)(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress);
-- STDMETHOD(Cleanup)(void);
-- STDMETHOD(QueryAllPlugInsForFrontend)(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules));
-- STDMETHOD(IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable));
-- /** @} */
--
-- /** @name Internal interfaces used by other Main classes.
-- * @{ */
-- static DECLCALLBACK(int) doInstallThreadProc(RTTHREAD hThread, void *pvJob);
-- HRESULT doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo);
-- static DECLCALLBACK(int) doUninstallThreadProc(RTTHREAD hThread, void *pvJob);
-- HRESULT doUninstall(const Utf8Str *a_pstrName, bool a_fForcedRemoval, const Utf8Str *a_pstrDisplayInfo);
-- void callAllVirtualBoxReadyHooks(void);
-- void callAllConsoleReadyHooks(IConsole *a_pConsole);
-- void callAllVmCreatedHooks(IMachine *a_pMachine);
-- int callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM);
-- int callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM);
-- void callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM);
-- HRESULT checkVrdeExtPack(Utf8Str const *a_pstrExtPack);
-- int getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary);
-- HRESULT getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack);
-- bool isExtPackUsable(const char *a_pszExtPack);
-- void dumpAllToReleaseLog(void);
-- /** @} */
--
--private:
-- HRESULT runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...);
-- ExtPack *findExtPack(const char *a_pszName);
-- void removeExtPack(const char *a_pszName);
-- HRESULT refreshExtPack(const char *a_pszName, bool a_fUnsuableIsError, ExtPack **a_ppExtPack);
--
--private:
-- struct Data;
-- /** Pointer to the private instance. */
-- Data *m;
--};
--
--#endif
--/* vi: set tabstop=4 shiftwidth=4 expandtab: */
---- VirtualBox-4.1.18.orig/src/VBox/Main/include/ExtPackUtil.h 2012-06-20 10:17:33.000000000 -0300
-+++ /dev/null 2012-07-24 14:48:18.638572110 -0300
-@@ -1,137 +0,0 @@
--/* $Id: ExtPackUtil.h $ */
--/** @file
-- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++.
-- */
--
--/*
-- * Copyright (C) 2010 Oracle Corporation
-- *
-- * This file is part of VirtualBox Open Source Edition (OSE), as
-- * available from http://www.virtualbox.org. This file is free software;
-- * you can redistribute it and/or modify it under the terms of the GNU
-- * General Public License (GPL) as published by the Free Software
-- * Foundation, in version 2 as it comes in the "COPYING" file of the
-- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-- */
--
--#ifndef ____H_EXTPACKUTIL
--#define ____H_EXTPACKUTIL
--
--#include <iprt/cpp/ministring.h>
--#include <iprt/fs.h>
--#include <iprt/vfs.h>
--
--
--/** @name VBOX_EXTPACK_DESCRIPTION_NAME
-- * The name of the description file in an extension pack. */
--#define VBOX_EXTPACK_DESCRIPTION_NAME "ExtPack.xml"
--/** @name VBOX_EXTPACK_DESCRIPTION_NAME
-- * The name of the manifest file in an extension pack. */
--#define VBOX_EXTPACK_MANIFEST_NAME "ExtPack.manifest"
--/** @name VBOX_EXTPACK_SIGNATURE_NAME
-- * The name of the signature file in an extension pack. */
--#define VBOX_EXTPACK_SIGNATURE_NAME "ExtPack.signature"
--/** @name VBOX_EXTPACK_LICENSE_NAME_PREFIX
-- * The name prefix of a license file in an extension pack. There can be
-- * several license files in a pack, the variations being on locale, language
-- * and format (HTML, RTF, plain text). All extension packages shall include
-- * a */
--#define VBOX_EXTPACK_LICENSE_NAME_PREFIX "ExtPack-license"
--/** @name VBOX_EXTPACK_SUFFIX
-- * The suffix of a extension pack tarball. */
--#define VBOX_EXTPACK_SUFFIX ".vbox-extpack"
--
--/** The minimum length (strlen) of a extension pack name. */
--#define VBOX_EXTPACK_NAME_MIN_LEN 3
--/** The max length (strlen) of a extension pack name. */
--#define VBOX_EXTPACK_NAME_MAX_LEN 64
--
--/** The architecture-dependent application data subdirectory where the
-- * extension packs are installed. Relative to RTPathAppPrivateArch. */
--#define VBOX_EXTPACK_INSTALL_DIR "ExtensionPacks"
--/** The architecture-independent application data subdirectory where the
-- * certificates are installed. Relative to RTPathAppPrivateNoArch. */
--#define VBOX_EXTPACK_CERT_DIR "ExtPackCertificates"
--
--/** The maximum entry name length.
-- * Play short and safe. */
--#define VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH 128
--
--
--/**
-- * Plug-in descriptor.
-- */
--typedef struct VBOXEXTPACKPLUGINDESC
--{
-- /** The name. */
-- RTCString strName;
-- /** The module name. */
-- RTCString strModule;
-- /** The description. */
-- RTCString strDescription;
-- /** The frontend or component which it plugs into. */
-- RTCString strFrontend;
--} VBOXEXTPACKPLUGINDESC;
--/** Pointer to a plug-in descriptor. */
--typedef VBOXEXTPACKPLUGINDESC *PVBOXEXTPACKPLUGINDESC;
--
--/**
-- * Extension pack descriptor
-- *
-- * This is the internal representation of the ExtPack.xml.
-- */
--typedef struct VBOXEXTPACKDESC
--{
-- /** The name. */
-- RTCString strName;
-- /** The description. */
-- RTCString strDescription;
-- /** The version string. */
-- RTCString strVersion;
-- /** The edition string. */
-- RTCString strEdition;
-- /** The internal revision number. */
-- uint32_t uRevision;
-- /** The name of the main module. */
-- RTCString strMainModule;
-- /** The name of the VRDE module, empty if none. */
-- RTCString strVrdeModule;
-- /** The number of plug-in descriptors. */
-- uint32_t cPlugIns;
-- /** Pointer to an array of plug-in descriptors. */
-- PVBOXEXTPACKPLUGINDESC paPlugIns;
-- /** Whether to show the license prior to installation. */
-- bool fShowLicense;
--} VBOXEXTPACKDESC;
--
--/** Pointer to a extension pack descriptor. */
--typedef VBOXEXTPACKDESC *PVBOXEXTPACKDESC;
--/** Pointer to a const extension pack descriptor. */
--typedef VBOXEXTPACKDESC const *PCVBOXEXTPACKDESC;
--
--
--void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc);
--RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo);
--RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo);
--RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball);
--void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc);
--bool VBoxExtPackIsValidName(const char *pszName);
--bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax = RTSTR_MAX);
--RTCString *VBoxExtPackMangleName(const char *pszName);
--RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cbMax);
--int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName);
--bool VBoxExtPackIsValidVersionString(const char *pszVersion);
--bool VBoxExtPackIsValidEditionString(const char *pszEdition);
--bool VBoxExtPackIsValidModuleString(const char *pszModule);
--
--int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError);
--int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest);
--int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName,
-- const char *pszTarball, const char *pszTarballDigest,
-- char *pszError, size_t cbError,
-- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest);
--
--
--#endif
--
---- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackManagerImpl.cpp 2012-06-20 10:17:34.000000000 -0300
-+++ /dev/null 2012-07-24 14:48:18.638572110 -0300
-@@ -1,3126 +0,0 @@
--/* $Id: ExtPackManagerImpl.cpp $ */
--/** @file
-- * VirtualBox Main - interface for Extension Packs, VBoxSVC & VBoxC.
-- */
--
--/*
-- * Copyright (C) 2010 Oracle Corporation
-- *
-- * This file is part of VirtualBox Open Source Edition (OSE), as
-- * available from http://www.virtualbox.org. This file is free software;
-- * you can redistribute it and/or modify it under the terms of the GNU
-- * General Public License (GPL) as published by the Free Software
-- * Foundation, in version 2 as it comes in the "COPYING" file of the
-- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-- */
--
--
--/*******************************************************************************
--* Header Files *
--*******************************************************************************/
--#include "ExtPackManagerImpl.h"
--#include "ExtPackUtil.h"
--
--#include <iprt/buildconfig.h>
--#include <iprt/ctype.h>
--#include <iprt/dir.h>
--#include <iprt/env.h>
--#include <iprt/file.h>
--#include <iprt/ldr.h>
--#include <iprt/manifest.h>
--#include <iprt/param.h>
--#include <iprt/path.h>
--#include <iprt/pipe.h>
--#include <iprt/process.h>
--#include <iprt/string.h>
--
--#include <VBox/com/array.h>
--#include <VBox/com/ErrorInfo.h>
--#include <VBox/err.h>
--#include <VBox/log.h>
--#include <VBox/sup.h>
--#include <VBox/version.h>
--#include "AutoCaller.h"
--#include "Global.h"
--#include "ProgressImpl.h"
--#include "SystemPropertiesImpl.h"
--#include "VirtualBoxImpl.h"
--
--
--/*******************************************************************************
--* Defined Constants And Macros *
--*******************************************************************************/
--/** @name VBOX_EXTPACK_HELPER_NAME
-- * The name of the utility application we employ to install and uninstall the
-- * extension packs. This is a set-uid-to-root binary on unixy platforms, which
-- * is why it has to be a separate application.
-- */
--#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
--# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp.exe"
--#else
--# define VBOX_EXTPACK_HELPER_NAME "VBoxExtPackHelperApp"
--#endif
--
--
--/*******************************************************************************
--* Structures and Typedefs *
--*******************************************************************************/
--struct ExtPackBaseData
--{
--public:
-- /** The extension pack descriptor (loaded from the XML, mostly). */
-- VBOXEXTPACKDESC Desc;
-- /** The file system object info of the XML file.
-- * This is for detecting changes and save time in refresh(). */
-- RTFSOBJINFO ObjInfoDesc;
-- /** Whether it's usable or not. */
-- bool fUsable;
-- /** Why it is unusable. */
-- Utf8Str strWhyUnusable;
--};
--
--/**
-- * Private extension pack data.
-- */
--struct ExtPackFile::Data : public ExtPackBaseData
--{
--public:
-- /** The path to the tarball. */
-- Utf8Str strExtPackFile;
-- /** The SHA-256 hash of the file (as string). */
-- Utf8Str strDigest;
-- /** The file handle of the extension pack file. */
-- RTFILE hExtPackFile;
-- /** Our manifest for the tarball. */
-- RTMANIFEST hOurManifest;
-- /** Pointer to the extension pack manager. */
-- ComObjPtr<ExtPackManager> ptrExtPackMgr;
-- /** Pointer to the VirtualBox object so we can create a progress object. */
-- VirtualBox *pVirtualBox;
--
-- RTMEMEF_NEW_AND_DELETE_OPERATORS();
--};
--
--/**
-- * Private extension pack data.
-- */
--struct ExtPack::Data : public ExtPackBaseData
--{
--public:
-- /** Where the extension pack is located. */
-- Utf8Str strExtPackPath;
-- /** The file system object info of the extension pack directory.
-- * This is for detecting changes and save time in refresh(). */
-- RTFSOBJINFO ObjInfoExtPack;
-- /** The full path to the main module. */
-- Utf8Str strMainModPath;
-- /** The file system object info of the main module.
-- * This is used to determin whether to bother try reload it. */
-- RTFSOBJINFO ObjInfoMainMod;
-- /** The module handle of the main extension pack module. */
-- RTLDRMOD hMainMod;
--
-- /** The helper callbacks for the extension pack. */
-- VBOXEXTPACKHLP Hlp;
-- /** Pointer back to the extension pack object (for Hlp methods). */
-- ExtPack *pThis;
-- /** The extension pack registration structure. */
-- PCVBOXEXTPACKREG pReg;
-- /** The current context. */
-- VBOXEXTPACKCTX enmContext;
-- /** Set if we've made the pfnVirtualBoxReady or pfnConsoleReady call. */
-- bool fMadeReadyCall;
--
-- RTMEMEF_NEW_AND_DELETE_OPERATORS();
--};
--
--/** List of extension packs. */
--typedef std::list< ComObjPtr<ExtPack> > ExtPackList;
--
--/**
-- * Private extension pack manager data.
-- */
--struct ExtPackManager::Data
--{
-- /** The directory where the extension packs are installed. */
-- Utf8Str strBaseDir;
-- /** The directory where the certificates this installation recognizes are
-- * stored. */
-- Utf8Str strCertificatDirPath;
-- /** The list of installed extension packs. */
-- ExtPackList llInstalledExtPacks;
-- /** Pointer to the VirtualBox object, our parent. */
-- VirtualBox *pVirtualBox;
-- /** The current context. */
-- VBOXEXTPACKCTX enmContext;
--#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN)
-- /** File handle for the VBoxVMM libary which we slurp because ExtPacks depend on it. */
-- RTLDRMOD hVBoxVMM;
--#endif
--
-- RTMEMEF_NEW_AND_DELETE_OPERATORS();
--};
--
--/**
-- * Extension pack installation job.
-- */
--typedef struct EXTPACKINSTALLJOB
--{
-- /** Smart pointer to the extension pack file. */
-- ComPtr<ExtPackFile> ptrExtPackFile;
-- /** The replace argument. */
-- bool fReplace;
-- /** The display info argument. */
-- Utf8Str strDisplayInfo;
-- /** Smart pointer to the extension manager. */
-- ComPtr<ExtPackManager> ptrExtPackMgr;
-- /** Smart pointer to the progress object for this job. */
-- ComObjPtr<Progress> ptrProgress;
--} EXTPACKINSTALLJOB;
--/** Pointer to an extension pack installation job. */
--typedef EXTPACKINSTALLJOB *PEXTPACKINSTALLJOB;
--
--/**
-- * Extension pack uninstallation job.
-- */
--typedef struct EXTPACKUNINSTALLJOB
--{
-- /** Smart pointer to the extension manager. */
-- ComPtr<ExtPackManager> ptrExtPackMgr;
-- /** The name of the extension pack. */
-- Utf8Str strName;
-- /** The replace argument. */
-- bool fForcedRemoval;
-- /** The display info argument. */
-- Utf8Str strDisplayInfo;
-- /** Smart pointer to the progress object for this job. */
-- ComObjPtr<Progress> ptrProgress;
--} EXTPACKUNINSTALLJOB;
--/** Pointer to an extension pack uninstallation job. */
--typedef EXTPACKUNINSTALLJOB *PEXTPACKUNINSTALLJOB;
--
--
--DEFINE_EMPTY_CTOR_DTOR(ExtPackFile)
--
--/**
-- * Called by ComObjPtr::createObject when creating the object.
-- *
-- * Just initialize the basic object state, do the rest in initWithDir().
-- *
-- * @returns S_OK.
-- */
--HRESULT ExtPackFile::FinalConstruct()
--{
-- m = NULL;
-- return BaseFinalConstruct();
--}
--
--/**
-- * Initializes the extension pack by reading its file.
-- *
-- * @returns COM status code.
-- * @param a_pszFile The path to the extension pack file.
-- * @param a_pszDigest The SHA-256 digest of the file. Or an empty string.
-- * @param a_pExtPackMgr Pointer to the extension pack manager.
-- * @param a_pVirtualBox Pointer to the VirtualBox object.
-- */
--HRESULT ExtPackFile::initWithFile(const char *a_pszFile, const char *a_pszDigest, ExtPackManager *a_pExtPackMgr, VirtualBox *a_pVirtualBox)
--{
-- AutoInitSpan autoInitSpan(this);
-- AssertReturn(autoInitSpan.isOk(), E_FAIL);
--
-- /*
-- * Allocate + initialize our private data.
-- */
-- m = new ExtPackFile::Data;
-- VBoxExtPackInitDesc(&m->Desc);
-- RT_ZERO(m->ObjInfoDesc);
-- m->fUsable = false;
-- m->strWhyUnusable = tr("ExtPack::init failed");
-- m->strExtPackFile = a_pszFile;
-- m->strDigest = a_pszDigest;
-- m->hExtPackFile = NIL_RTFILE;
-- m->hOurManifest = NIL_RTMANIFEST;
-- m->ptrExtPackMgr = a_pExtPackMgr;
-- m->pVirtualBox = a_pVirtualBox;
--
-- RTCString *pstrTarName = VBoxExtPackExtractNameFromTarballPath(a_pszFile);
-- if (pstrTarName)
-- {
-- m->Desc.strName = *pstrTarName;
-- delete pstrTarName;
-- pstrTarName = NULL;
-- }
--
-- autoInitSpan.setSucceeded();
--
-- /*
-- * Try open the extension pack and check that it is a regular file.
-- */
-- int vrc = RTFileOpen(&m->hExtPackFile, a_pszFile,
-- RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN);
-- if (RT_FAILURE(vrc))
-- {
-- if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND)
-- return initFailed(tr("'%s' file not found"), a_pszFile);
-- return initFailed(tr("RTFileOpen('%s',,) failed with %Rrc"), a_pszFile, vrc);
-- }
--
-- RTFSOBJINFO ObjInfo;
-- vrc = RTFileQueryInfo(m->hExtPackFile, &ObjInfo, RTFSOBJATTRADD_UNIX);
-- if (RT_FAILURE(vrc))
-- return initFailed(tr("RTFileQueryInfo failed with %Rrc on '%s'"), vrc, a_pszFile);
-- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
-- return initFailed(tr("Not a regular file: %s"), a_pszFile);
--
-- /*
-- * Validate the tarball and extract the XML file.
-- */
-- char szError[8192];
-- RTVFSFILE hXmlFile;
-- vrc = VBoxExtPackValidateTarball(m->hExtPackFile, NULL /*pszExtPackName*/, a_pszFile, a_pszDigest,
-- szError, sizeof(szError), &m->hOurManifest, &hXmlFile, &m->strDigest);
-- if (RT_FAILURE(vrc))
-- return initFailed(tr("%s"), szError);
--
-- /*
-- * Parse the XML.
-- */
-- RTCString strSavedName(m->Desc.strName);
-- RTCString *pStrLoadErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &m->Desc, &m->ObjInfoDesc);
-- RTVfsFileRelease(hXmlFile);
-- if (pStrLoadErr != NULL)
-- {
-- m->strWhyUnusable.printf(tr("Failed to the xml file: %s"), pStrLoadErr->c_str());
-- m->Desc.strName = strSavedName;
-- delete pStrLoadErr;
-- return S_OK;
-- }
--
-- /*
-- * Match the tarball name with the name from the XML.
-- */
-- /** @todo drop this restriction after the old install interface is
-- * dropped. */
-- if (!strSavedName.equalsIgnoreCase(m->Desc.strName))
-- return initFailed(tr("Extension pack name mismatch between the downloaded file and the XML inside it (xml='%s' file='%s')"),
-- m->Desc.strName.c_str(), strSavedName.c_str());
--
-- m->fUsable = true;
-- m->strWhyUnusable.setNull();
-- return S_OK;
--}
--
--/**
-- * Protected helper that formats the strWhyUnusable value.
-- *
-- * @returns S_OK
-- * @param a_pszWhyFmt Why it failed, format string.
-- * @param ... The format arguments.
-- */
--HRESULT ExtPackFile::initFailed(const char *a_pszWhyFmt, ...)
--{
-- va_list va;
-- va_start(va, a_pszWhyFmt);
-- m->strWhyUnusable.printfV(a_pszWhyFmt, va);
-- va_end(va);
-- return S_OK;
--}
--
--/**
-- * COM cruft.
-- */
--void ExtPackFile::FinalRelease()
--{
-- uninit();
-- BaseFinalRelease();
--}
--
--/**
-- * Do the actual cleanup.
-- */
--void ExtPackFile::uninit()
--{
-- /* Enclose the state transition Ready->InUninit->NotReady */
-- AutoUninitSpan autoUninitSpan(this);
-- if (!autoUninitSpan.uninitDone() && m != NULL)
-- {
-- VBoxExtPackFreeDesc(&m->Desc);
-- RTFileClose(m->hExtPackFile);
-- m->hExtPackFile = NIL_RTFILE;
-- RTManifestRelease(m->hOurManifest);
-- m->hOurManifest = NIL_RTMANIFEST;
--
-- delete m;
-- m = NULL;
-- }
--}
--
--STDMETHODIMP ExtPackFile::COMGETTER(Name)(BSTR *a_pbstrName)
--{
-- CheckComArgOutPointerValid(a_pbstrName);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- Bstr str(m->Desc.strName);
-- str.cloneTo(a_pbstrName);
-- }
-- return hrc;
--}
--
--STDMETHODIMP ExtPackFile::COMGETTER(Description)(BSTR *a_pbstrDescription)
--{
-- CheckComArgOutPointerValid(a_pbstrDescription);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- Bstr str(m->Desc.strDescription);
-- str.cloneTo(a_pbstrDescription);
-- }
-- return hrc;
--}
--
--STDMETHODIMP ExtPackFile::COMGETTER(Version)(BSTR *a_pbstrVersion)
--{
-- CheckComArgOutPointerValid(a_pbstrVersion);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff
-- will be changed into a separate */
-- if (m->Desc.strEdition.isEmpty())
-- {
-- Bstr str(m->Desc.strVersion);
-- str.cloneTo(a_pbstrVersion);
-- }
-- else
-- {
-- RTCString strHack(m->Desc.strVersion);
-- strHack.append('-');
-- strHack.append(m->Desc.strEdition);
--
-- Bstr str(strHack);
-- str.cloneTo(a_pbstrVersion);
-- }
-- }
-- return hrc;
--}
--
--STDMETHODIMP ExtPackFile::COMGETTER(Revision)(ULONG *a_puRevision)
--{
-- CheckComArgOutPointerValid(a_puRevision);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- *a_puRevision = m->Desc.uRevision;
-- return hrc;
--}
--
--STDMETHODIMP ExtPackFile::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule)
--{
-- CheckComArgOutPointerValid(a_pbstrVrdeModule);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- Bstr str(m->Desc.strVrdeModule);
-- str.cloneTo(a_pbstrVrdeModule);
-- }
-- return hrc;
--}
--
--STDMETHODIMP ExtPackFile::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns))
--{
-- /** @todo implement plug-ins. */
--#ifdef VBOX_WITH_XPCOM
-- NOREF(a_paPlugIns);
-- NOREF(a_paPlugInsSize);
--#endif
-- ReturnComNotImplemented();
--}
--
--STDMETHODIMP ExtPackFile::COMGETTER(Usable)(BOOL *a_pfUsable)
--{
-- CheckComArgOutPointerValid(a_pfUsable);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- *a_pfUsable = m->fUsable;
-- return hrc;
--}
--
--STDMETHODIMP ExtPackFile::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy)
--{
-- CheckComArgOutPointerValid(a_pbstrWhy);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- m->strWhyUnusable.cloneTo(a_pbstrWhy);
-- return hrc;
--}
--
--STDMETHODIMP ExtPackFile::COMGETTER(ShowLicense)(BOOL *a_pfShowIt)
--{
-- CheckComArgOutPointerValid(a_pfShowIt);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- *a_pfShowIt = m->Desc.fShowLicense;
-- return hrc;
--}
--
--STDMETHODIMP ExtPackFile::COMGETTER(License)(BSTR *a_pbstrHtmlLicense)
--{
-- Bstr bstrHtml("html");
-- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense);
--}
--
--/* Same as ExtPack::QueryLicense, should really explore the subject of base classes here... */
--STDMETHODIMP ExtPackFile::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat,
-- BSTR *a_pbstrLicense)
--{
-- /*
-- * Validate input.
-- */
-- CheckComArgOutPointerValid(a_pbstrLicense);
-- CheckComArgNotNull(a_bstrPreferredLocale);
-- CheckComArgNotNull(a_bstrPreferredLanguage);
-- CheckComArgNotNull(a_bstrFormat);
--
-- Utf8Str strPreferredLocale(a_bstrPreferredLocale);
-- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0)
-- return setError(E_FAIL, tr("The preferred locale is a two character string or empty."));
--
-- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage);
-- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0)
-- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty."));
--
-- Utf8Str strFormat(a_bstrFormat);
-- if ( !strFormat.equals("html")
-- && !strFormat.equals("rtf")
-- && !strFormat.equals("txt"))
-- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'."));
--
-- /*
-- * Combine the options to form a file name before locking down anything.
-- */
-- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2];
-- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty())
-- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s",
-- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str());
-- else if (strPreferredLocale.isNotEmpty())
-- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
-- else if (strPreferredLanguage.isNotEmpty())
-- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
-- else
-- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str());
--
-- /*
-- * Lock the extension pack. We need a write lock here as there must not be
-- * concurrent accesses to the tar file handle.
-- */
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
--
-- /*
-- * Do not permit this query on a pack that isn't considered usable (could
-- * be marked so because of bad license files).
-- */
-- if (!m->fUsable)
-- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str());
-- else
-- {
-- /*
-- * Look it up in the manifest before scanning the tarball for it
-- */
-- if (RTManifestEntryExists(m->hOurManifest, szName))
-- {
-- RTVFSFSSTREAM hTarFss;
-- char szError[8192];
-- int vrc = VBoxExtPackOpenTarFss(m->hExtPackFile, szError, sizeof(szError), &hTarFss, NULL);
-- if (RT_SUCCESS(vrc))
-- {
-- for (;;)
-- {
-- /* Get the first/next. */
-- char *pszName;
-- RTVFSOBJ hVfsObj;
-- RTVFSOBJTYPE enmType;
-- vrc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj);
-- if (RT_FAILURE(vrc))
-- {
-- if (vrc != VERR_EOF)
-- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsFsStrmNext failed: %Rrc"), vrc);
-- else
-- hrc = setError(E_UNEXPECTED, tr("'%s' was found in the manifest but not in the tarball"), szName);
-- break;
-- }
--
-- /* Is this it? */
-- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName;
-- if ( !strcmp(pszAdjName, szName)
-- && ( enmType == RTVFSOBJTYPE_IO_STREAM
-- || enmType == RTVFSOBJTYPE_FILE))
-- {
-- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj);
-- RTVfsObjRelease(hVfsObj);
-- RTStrFree(pszName);
--
-- /* Load the file into memory. */
-- RTFSOBJINFO ObjInfo;
-- vrc = RTVfsIoStrmQueryInfo(hVfsIos, &ObjInfo, RTFSOBJATTRADD_NOTHING);
-- if (RT_SUCCESS(vrc))
-- {
-- size_t cbFile = (size_t)ObjInfo.cbObject;
-- void *pvFile = RTMemAllocZ(cbFile + 1);
-- if (pvFile)
-- {
-- vrc = RTVfsIoStrmRead(hVfsIos, pvFile, cbFile, true /*fBlocking*/, NULL);
-- if (RT_SUCCESS(vrc))
-- {
-- /* try translate it into a string we can return. */
-- Bstr bstrLicense((const char *)pvFile, cbFile);
-- if (bstrLicense.isNotEmpty())
-- {
-- bstrLicense.detachTo(a_pbstrLicense);
-- hrc = S_OK;
-- }
-- else
-- hrc = setError(VBOX_E_IPRT_ERROR,
-- tr("The license file '%s' is empty or contains invalid UTF-8 encoding"),
-- szName);
-- }
-- else
-- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to read '%s': %Rrc"), szName, vrc);
-- RTMemFree(pvFile);
-- }
-- else
-- hrc = setError(E_OUTOFMEMORY, tr("Failed to allocate %zu bytes for '%s'"), cbFile, szName);
-- }
-- else
-- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTVfsIoStrmQueryInfo on '%s': %Rrc"), szName, vrc);
-- RTVfsIoStrmRelease(hVfsIos);
-- break;
-- }
--
-- /* Release current. */
-- RTVfsObjRelease(hVfsObj);
-- RTStrFree(pszName);
-- }
-- RTVfsFsStrmRelease(hTarFss);
-- }
-- else
-- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("%s"), szError);
-- }
-- else
-- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in '%s'"),
-- szName, m->strExtPackFile.c_str());
-- }
-- }
-- return hrc;
--}
--
--STDMETHODIMP ExtPackFile::COMGETTER(FilePath)(BSTR *a_pbstrPath)
--{
-- CheckComArgOutPointerValid(a_pbstrPath);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- m->strExtPackFile.cloneTo(a_pbstrPath);
-- return hrc;
--}
--
--STDMETHODIMP ExtPackFile::Install(BOOL a_fReplace, IN_BSTR a_bstrDisplayInfo, IProgress **a_ppProgress)
--{
-- if (a_ppProgress)
-- *a_ppProgress = NULL;
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- if (m->fUsable)
-- {
-- PEXTPACKINSTALLJOB pJob = NULL;
-- try
-- {
-- pJob = new EXTPACKINSTALLJOB;
-- pJob->ptrExtPackFile = this;
-- pJob->fReplace = a_fReplace != FALSE;
-- pJob->strDisplayInfo = a_bstrDisplayInfo;
-- pJob->ptrExtPackMgr = m->ptrExtPackMgr;
-- hrc = pJob->ptrProgress.createObject();
-- if (SUCCEEDED(hrc))
-- {
-- Bstr bstrDescription = tr("Installing extension pack");
-- hrc = pJob->ptrProgress->init(
--#ifndef VBOX_COM_INPROC
-- m->pVirtualBox,
--#endif
-- static_cast<IExtPackFile *>(this),
-- bstrDescription.raw(),
-- FALSE /*aCancelable*/,
-- NULL /*aId*/);
-- }
-- if (SUCCEEDED(hrc))
-- {
-- ComPtr<Progress> ptrProgress = pJob->ptrProgress;
-- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doInstallThreadProc, pJob, 0,
-- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackInst");
-- if (RT_SUCCESS(vrc))
-- {
-- pJob = NULL; /* the thread deletes it */
-- ptrProgress.queryInterfaceTo(a_ppProgress);
-- }
-- else
-- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc);
-- }
-- }
-- catch (std::bad_alloc)
-- {
-- hrc = E_OUTOFMEMORY;
-- }
-- if (pJob)
-- delete pJob;
-- }
-- else
-- hrc = setError(E_FAIL, "%s", m->strWhyUnusable.c_str());
-- }
-- return hrc;
--}
--
--
--
--
--
--DEFINE_EMPTY_CTOR_DTOR(ExtPack)
--
--/**
-- * Called by ComObjPtr::createObject when creating the object.
-- *
-- * Just initialize the basic object state, do the rest in initWithDir().
-- *
-- * @returns S_OK.
-- */
--HRESULT ExtPack::FinalConstruct()
--{
-- m = NULL;
-- return S_OK;
--}
--
--/**
-- * Initializes the extension pack by reading its file.
-- *
-- * @returns COM status code.
-- * @param a_enmContext The context we're in.
-- * @param a_pszName The name of the extension pack. This is also the
-- * name of the subdirector under @a a_pszParentDir
-- * where the extension pack is installed.
-- * @param a_pszDir The extension pack directory name.
-- */
--HRESULT ExtPack::initWithDir(VBOXEXTPACKCTX a_enmContext, const char *a_pszName, const char *a_pszDir)
--{
-- AutoInitSpan autoInitSpan(this);
-- AssertReturn(autoInitSpan.isOk(), E_FAIL);
--
-- static const VBOXEXTPACKHLP s_HlpTmpl =
-- {
-- /* u32Version = */ VBOXEXTPACKHLP_VERSION,
-- /* uVBoxFullVersion = */ VBOX_FULL_VERSION,
-- /* uVBoxVersionRevision = */ 0,
-- /* u32Padding = */ 0,
-- /* pszVBoxVersion = */ "",
-- /* pfnFindModule = */ ExtPack::hlpFindModule,
-- /* pfnGetFilePath = */ ExtPack::hlpGetFilePath,
-- /* pfnGetContext = */ ExtPack::hlpGetContext,
-- /* pfnReserved1 = */ ExtPack::hlpReservedN,
-- /* pfnReserved2 = */ ExtPack::hlpReservedN,
-- /* pfnReserved3 = */ ExtPack::hlpReservedN,
-- /* pfnReserved4 = */ ExtPack::hlpReservedN,
-- /* pfnReserved5 = */ ExtPack::hlpReservedN,
-- /* pfnReserved6 = */ ExtPack::hlpReservedN,
-- /* pfnReserved7 = */ ExtPack::hlpReservedN,
-- /* pfnReserved8 = */ ExtPack::hlpReservedN,
-- /* pfnReserved9 = */ ExtPack::hlpReservedN,
-- /* u32EndMarker = */ VBOXEXTPACKHLP_VERSION
-- };
--
-- /*
-- * Allocate + initialize our private data.
-- */
-- m = new Data;
-- VBoxExtPackInitDesc(&m->Desc);
-- m->Desc.strName = a_pszName;
-- RT_ZERO(m->ObjInfoDesc);
-- m->fUsable = false;
-- m->strWhyUnusable = tr("ExtPack::init failed");
-- m->strExtPackPath = a_pszDir;
-- RT_ZERO(m->ObjInfoExtPack);
-- m->strMainModPath.setNull();
-- RT_ZERO(m->ObjInfoMainMod);
-- m->hMainMod = NIL_RTLDRMOD;
-- m->Hlp = s_HlpTmpl;
-- m->Hlp.pszVBoxVersion = RTBldCfgVersion();
-- m->Hlp.uVBoxInternalRevision = RTBldCfgRevision();
-- m->pThis = this;
-- m->pReg = NULL;
-- m->enmContext = a_enmContext;
-- m->fMadeReadyCall = false;
--
-- /*
-- * Probe the extension pack (this code is shared with refresh()).
-- */
-- probeAndLoad();
--
-- autoInitSpan.setSucceeded();
-- return S_OK;
--}
--
--/**
-- * COM cruft.
-- */
--void ExtPack::FinalRelease()
--{
-- uninit();
--}
--
--/**
-- * Do the actual cleanup.
-- */
--void ExtPack::uninit()
--{
-- /* Enclose the state transition Ready->InUninit->NotReady */
-- AutoUninitSpan autoUninitSpan(this);
-- if (!autoUninitSpan.uninitDone() && m != NULL)
-- {
-- if (m->hMainMod != NIL_RTLDRMOD)
-- {
-- AssertPtr(m->pReg);
-- if (m->pReg->pfnUnload != NULL)
-- m->pReg->pfnUnload(m->pReg);
--
-- RTLdrClose(m->hMainMod);
-- m->hMainMod = NIL_RTLDRMOD;
-- m->pReg = NULL;
-- }
--
-- VBoxExtPackFreeDesc(&m->Desc);
--
-- delete m;
-- m = NULL;
-- }
--}
--
--
--/**
-- * Calls the installed hook.
-- *
-- * @returns true if we left the lock, false if we didn't.
-- * @param a_pVirtualBox The VirtualBox interface.
-- * @param a_pLock The write lock held by the caller.
-- * @param pErrInfo Where to return error information.
-- */
--bool ExtPack::callInstalledHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock, PRTERRINFO pErrInfo)
--{
-- if ( m != NULL
-- && m->hMainMod != NIL_RTLDRMOD)
-- {
-- if (m->pReg->pfnInstalled)
-- {
-- ComPtr<ExtPack> ptrSelfRef = this;
-- a_pLock->release();
-- pErrInfo->rc = m->pReg->pfnInstalled(m->pReg, a_pVirtualBox, pErrInfo);
-- a_pLock->acquire();
-- return true;
-- }
-- }
-- pErrInfo->rc = VINF_SUCCESS;
-- return false;
--}
--
--/**
-- * Calls the uninstall hook and closes the module.
-- *
-- * @returns S_OK or COM error status with error information.
-- * @param a_pVirtualBox The VirtualBox interface.
-- * @param a_fForcedRemoval When set, we'll ignore complaints from the
-- * uninstall hook.
-- * @remarks The caller holds the manager's write lock, not released.
-- */
--HRESULT ExtPack::callUninstallHookAndClose(IVirtualBox *a_pVirtualBox, bool a_fForcedRemoval)
--{
-- HRESULT hrc = S_OK;
--
-- if ( m != NULL
-- && m->hMainMod != NIL_RTLDRMOD)
-- {
-- if (m->pReg->pfnUninstall && !a_fForcedRemoval)
-- {
-- int vrc = m->pReg->pfnUninstall(m->pReg, a_pVirtualBox);
-- if (RT_FAILURE(vrc))
-- {
-- LogRel(("ExtPack pfnUninstall returned %Rrc for %s\n", vrc, m->Desc.strName.c_str()));
-- if (!a_fForcedRemoval)
-- hrc = setError(E_FAIL, tr("pfnUninstall returned %Rrc"), vrc);
-- }
-- }
-- if (SUCCEEDED(hrc))
-- {
-- RTLdrClose(m->hMainMod);
-- m->hMainMod = NIL_RTLDRMOD;
-- m->pReg = NULL;
-- }
-- }
--
-- return hrc;
--}
--
--/**
-- * Calls the pfnVirtualBoxReady hook.
-- *
-- * @returns true if we left the lock, false if we didn't.
-- * @param a_pVirtualBox The VirtualBox interface.
-- * @param a_pLock The write lock held by the caller.
-- */
--bool ExtPack::callVirtualBoxReadyHook(IVirtualBox *a_pVirtualBox, AutoWriteLock *a_pLock)
--{
-- if ( m != NULL
-- && m->fUsable
-- && !m->fMadeReadyCall)
-- {
-- m->fMadeReadyCall = true;
-- if (m->pReg->pfnVirtualBoxReady)
-- {
-- ComPtr<ExtPack> ptrSelfRef = this;
-- a_pLock->release();
-- m->pReg->pfnVirtualBoxReady(m->pReg, a_pVirtualBox);
-- a_pLock->acquire();
-- return true;
-- }
-- }
-- return false;
--}
--
--/**
-- * Calls the pfnConsoleReady hook.
-- *
-- * @returns true if we left the lock, false if we didn't.
-- * @param a_pConsole The Console interface.
-- * @param a_pLock The write lock held by the caller.
-- */
--bool ExtPack::callConsoleReadyHook(IConsole *a_pConsole, AutoWriteLock *a_pLock)
--{
-- if ( m != NULL
-- && m->fUsable
-- && !m->fMadeReadyCall)
-- {
-- m->fMadeReadyCall = true;
-- if (m->pReg->pfnConsoleReady)
-- {
-- ComPtr<ExtPack> ptrSelfRef = this;
-- a_pLock->release();
-- m->pReg->pfnConsoleReady(m->pReg, a_pConsole);
-- a_pLock->acquire();
-- return true;
-- }
-- }
-- return false;
--}
--
--/**
-- * Calls the pfnVMCreate hook.
-- *
-- * @returns true if we left the lock, false if we didn't.
-- * @param a_pVirtualBox The VirtualBox interface.
-- * @param a_pMachine The machine interface of the new VM.
-- * @param a_pLock The write lock held by the caller.
-- */
--bool ExtPack::callVmCreatedHook(IVirtualBox *a_pVirtualBox, IMachine *a_pMachine, AutoWriteLock *a_pLock)
--{
-- if ( m != NULL
-- && m->fUsable)
-- {
-- if (m->pReg->pfnVMCreated)
-- {
-- ComPtr<ExtPack> ptrSelfRef = this;
-- a_pLock->release();
-- m->pReg->pfnVMCreated(m->pReg, a_pVirtualBox, a_pMachine);
-- a_pLock->acquire();
-- return true;
-- }
-- }
-- return false;
--}
--
--/**
-- * Calls the pfnVMConfigureVMM hook.
-- *
-- * @returns true if we left the lock, false if we didn't.
-- * @param a_pConsole The console interface.
-- * @param a_pVM The VM handle.
-- * @param a_pLock The write lock held by the caller.
-- * @param a_pvrc Where to return the status code of the
-- * callback. This is always set. LogRel is
-- * called on if a failure status is returned.
-- */
--bool ExtPack::callVmConfigureVmmHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc)
--{
-- *a_pvrc = VINF_SUCCESS;
-- if ( m != NULL
-- && m->fUsable)
-- {
-- if (m->pReg->pfnVMConfigureVMM)
-- {
-- ComPtr<ExtPack> ptrSelfRef = this;
-- a_pLock->release();
-- int vrc = m->pReg->pfnVMConfigureVMM(m->pReg, a_pConsole, a_pVM);
-- *a_pvrc = vrc;
-- a_pLock->acquire();
-- if (RT_FAILURE(vrc))
-- LogRel(("ExtPack pfnVMConfigureVMM returned %Rrc for %s\n", vrc, m->Desc.strName.c_str()));
-- return true;
-- }
-- }
-- return false;
--}
--
--/**
-- * Calls the pfnVMPowerOn hook.
-- *
-- * @returns true if we left the lock, false if we didn't.
-- * @param a_pConsole The console interface.
-- * @param a_pVM The VM handle.
-- * @param a_pLock The write lock held by the caller.
-- * @param a_pvrc Where to return the status code of the
-- * callback. This is always set. LogRel is
-- * called on if a failure status is returned.
-- */
--bool ExtPack::callVmPowerOnHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock, int *a_pvrc)
--{
-- *a_pvrc = VINF_SUCCESS;
-- if ( m != NULL
-- && m->fUsable)
-- {
-- if (m->pReg->pfnVMPowerOn)
-- {
-- ComPtr<ExtPack> ptrSelfRef = this;
-- a_pLock->release();
-- int vrc = m->pReg->pfnVMPowerOn(m->pReg, a_pConsole, a_pVM);
-- *a_pvrc = vrc;
-- a_pLock->acquire();
-- if (RT_FAILURE(vrc))
-- LogRel(("ExtPack pfnVMPowerOn returned %Rrc for %s\n", vrc, m->Desc.strName.c_str()));
-- return true;
-- }
-- }
-- return false;
--}
--
--/**
-- * Calls the pfnVMPowerOff hook.
-- *
-- * @returns true if we left the lock, false if we didn't.
-- * @param a_pConsole The console interface.
-- * @param a_pVM The VM handle.
-- * @param a_pLock The write lock held by the caller.
-- */
--bool ExtPack::callVmPowerOffHook(IConsole *a_pConsole, PVM a_pVM, AutoWriteLock *a_pLock)
--{
-- if ( m != NULL
-- && m->fUsable)
-- {
-- if (m->pReg->pfnVMPowerOff)
-- {
-- ComPtr<ExtPack> ptrSelfRef = this;
-- a_pLock->release();
-- m->pReg->pfnVMPowerOff(m->pReg, a_pConsole, a_pVM);
-- a_pLock->acquire();
-- return true;
-- }
-- }
-- return false;
--}
--
--/**
-- * Check if the extension pack is usable and has an VRDE module.
-- *
-- * @returns S_OK or COM error status with error information.
-- *
-- * @remarks Caller holds the extension manager lock for reading, no locking
-- * necessary.
-- */
--HRESULT ExtPack::checkVrde(void)
--{
-- HRESULT hrc;
-- if ( m != NULL
-- && m->fUsable)
-- {
-- if (m->Desc.strVrdeModule.isNotEmpty())
-- hrc = S_OK;
-- else
-- hrc = setError(E_FAIL, tr("The extension pack '%s' does not include a VRDE module"), m->Desc.strName.c_str());
-- }
-- else
-- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str());
-- return hrc;
--}
--
--/**
-- * Same as checkVrde(), except that it also resolves the path to the module.
-- *
-- * @returns S_OK or COM error status with error information.
-- * @param a_pstrVrdeLibrary Where to return the path on success.
-- *
-- * @remarks Caller holds the extension manager lock for reading, no locking
-- * necessary.
-- */
--HRESULT ExtPack::getVrdpLibraryName(Utf8Str *a_pstrVrdeLibrary)
--{
-- HRESULT hrc = checkVrde();
-- if (SUCCEEDED(hrc))
-- {
-- if (findModule(m->Desc.strVrdeModule.c_str(), NULL, VBOXEXTPACKMODKIND_R3,
-- a_pstrVrdeLibrary, NULL /*a_pfNative*/, NULL /*a_pObjInfo*/))
-- hrc = S_OK;
-- else
-- hrc = setError(E_FAIL, tr("Failed to locate the VRDE module '%s' in extension pack '%s'"),
-- m->Desc.strVrdeModule.c_str(), m->Desc.strName.c_str());
-- }
-- return hrc;
--}
--
--/**
-- * Check if this extension pack wishes to be the default VRDE provider.
-- *
-- * @returns @c true if it wants to and it is in a usable state, otherwise
-- * @c false.
-- *
-- * @remarks Caller holds the extension manager lock for reading, no locking
-- * necessary.
-- */
--bool ExtPack::wantsToBeDefaultVrde(void) const
--{
-- return m->fUsable
-- && m->Desc.strVrdeModule.isNotEmpty();
--}
--
--/**
-- * Refreshes the extension pack state.
-- *
-- * This is called by the manager so that the on disk changes are picked up.
-- *
-- * @returns S_OK or COM error status with error information.
-- *
-- * @param a_pfCanDelete Optional can-delete-this-object output indicator.
-- *
-- * @remarks Caller holds the extension manager lock for writing.
-- * @remarks Only called in VBoxSVC.
-- */
--HRESULT ExtPack::refresh(bool *a_pfCanDelete)
--{
-- if (a_pfCanDelete)
-- *a_pfCanDelete = false;
--
-- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* for the COMGETTERs */
--
-- /*
-- * Has the module been deleted?
-- */
-- RTFSOBJINFO ObjInfoExtPack;
-- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
-- if ( RT_FAILURE(vrc)
-- || !RTFS_IS_DIRECTORY(ObjInfoExtPack.Attr.fMode))
-- {
-- if (a_pfCanDelete)
-- *a_pfCanDelete = true;
-- return S_OK;
-- }
--
-- /*
-- * We've got a directory, so try query file system object info for the
-- * files we are interested in as well.
-- */
-- RTFSOBJINFO ObjInfoDesc;
-- char szDescFilePath[RTPATH_MAX];
-- vrc = RTPathJoin(szDescFilePath, sizeof(szDescFilePath), m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME);
-- if (RT_SUCCESS(vrc))
-- vrc = RTPathQueryInfoEx(szDescFilePath, &ObjInfoDesc, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
-- if (RT_FAILURE(vrc))
-- RT_ZERO(ObjInfoDesc);
--
-- RTFSOBJINFO ObjInfoMainMod;
-- if (m->strMainModPath.isNotEmpty())
-- vrc = RTPathQueryInfoEx(m->strMainModPath.c_str(), &ObjInfoMainMod, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
-- if (m->strMainModPath.isEmpty() || RT_FAILURE(vrc))
-- RT_ZERO(ObjInfoMainMod);
--
-- /*
-- * If we have a usable module already, just verify that things haven't
-- * changed since we loaded it.
-- */
-- if (m->fUsable)
-- {
-- if (m->hMainMod == NIL_RTLDRMOD)
-- probeAndLoad();
-- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc)
-- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod)
-- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) )
-- {
-- /** @todo not important, so it can wait. */
-- }
-- }
-- /*
-- * Ok, it is currently not usable. If anything has changed since last time
-- * reprobe the extension pack.
-- */
-- else if ( !objinfoIsEqual(&ObjInfoDesc, &m->ObjInfoDesc)
-- || !objinfoIsEqual(&ObjInfoMainMod, &m->ObjInfoMainMod)
-- || !objinfoIsEqual(&ObjInfoExtPack, &m->ObjInfoExtPack) )
-- probeAndLoad();
--
-- return S_OK;
--}
--
--/**
-- * Probes the extension pack, loading the main dll and calling its registration
-- * entry point.
-- *
-- * This updates the state accordingly, the strWhyUnusable and fUnusable members
-- * being the most important ones.
-- */
--void ExtPack::probeAndLoad(void)
--{
-- m->fUsable = false;
-- m->fMadeReadyCall = false;
--
-- /*
-- * Query the file system info for the extension pack directory. This and
-- * all other file system info we save is for the benefit of refresh().
-- */
-- int vrc = RTPathQueryInfoEx(m->strExtPackPath.c_str(), &m->ObjInfoExtPack, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
-- if (RT_FAILURE(vrc))
-- {
-- m->strWhyUnusable.printf(tr("RTPathQueryInfoEx on '%s' failed: %Rrc"), m->strExtPackPath.c_str(), vrc);
-- return;
-- }
-- if (!RTFS_IS_DIRECTORY(m->ObjInfoExtPack.Attr.fMode))
-- {
-- if (RTFS_IS_SYMLINK(m->ObjInfoExtPack.Attr.fMode))
-- m->strWhyUnusable.printf(tr("'%s' is a symbolic link, this is not allowed"), m->strExtPackPath.c_str(), vrc);
-- else if (RTFS_IS_FILE(m->ObjInfoExtPack.Attr.fMode))
-- m->strWhyUnusable.printf(tr("'%s' is a symbolic file, not a directory"), m->strExtPackPath.c_str(), vrc);
-- else
-- m->strWhyUnusable.printf(tr("'%s' is not a directory (fMode=%#x)"), m->strExtPackPath.c_str(), m->ObjInfoExtPack.Attr.fMode);
-- return;
-- }
--
-- RTERRINFOSTATIC ErrInfo;
-- RTErrInfoInitStatic(&ErrInfo);
-- vrc = SUPR3HardenedVerifyDir(m->strExtPackPath.c_str(), true /*fRecursive*/, true /*fCheckFiles*/, &ErrInfo.Core);
-- if (RT_FAILURE(vrc))
-- {
-- m->strWhyUnusable.printf(tr("%s (rc=%Rrc)"), ErrInfo.Core.pszMsg, vrc);
-- return;
-- }
--
-- /*
-- * Read the description file.
-- */
-- RTCString strSavedName(m->Desc.strName);
-- RTCString *pStrLoadErr = VBoxExtPackLoadDesc(m->strExtPackPath.c_str(), &m->Desc, &m->ObjInfoDesc);
-- if (pStrLoadErr != NULL)
-- {
-- m->strWhyUnusable.printf(tr("Failed to load '%s/%s': %s"),
-- m->strExtPackPath.c_str(), VBOX_EXTPACK_DESCRIPTION_NAME, pStrLoadErr->c_str());
-- m->Desc.strName = strSavedName;
-- delete pStrLoadErr;
-- return;
-- }
--
-- /*
-- * Make sure the XML name and directory matches.
-- */
-- if (!m->Desc.strName.equalsIgnoreCase(strSavedName))
-- {
-- m->strWhyUnusable.printf(tr("The description name ('%s') and directory name ('%s') does not match"),
-- m->Desc.strName.c_str(), strSavedName.c_str());
-- m->Desc.strName = strSavedName;
-- return;
-- }
--
-- /*
-- * Load the main DLL and call the predefined entry point.
-- */
-- bool fIsNative;
-- if (!findModule(m->Desc.strMainModule.c_str(), NULL /* default extension */, VBOXEXTPACKMODKIND_R3,
-- &m->strMainModPath, &fIsNative, &m->ObjInfoMainMod))
-- {
-- m->strWhyUnusable.printf(tr("Failed to locate the main module ('%s')"), m->Desc.strMainModule.c_str());
-- return;
-- }
--
-- vrc = SUPR3HardenedVerifyPlugIn(m->strMainModPath.c_str(), &ErrInfo.Core);
-- if (RT_FAILURE(vrc))
-- {
-- m->strWhyUnusable.printf(tr("%s"), ErrInfo.Core.pszMsg);
-- return;
-- }
--
-- if (fIsNative)
-- {
-- vrc = SUPR3HardenedLdrLoadPlugIn(m->strMainModPath.c_str(), &m->hMainMod, &ErrInfo.Core);
-- if (RT_FAILURE(vrc))
-- {
-- m->hMainMod = NIL_RTLDRMOD;
-- m->strWhyUnusable.printf(tr("Failed to load the main module ('%s'): %Rrc - %s"),
-- m->strMainModPath.c_str(), vrc, ErrInfo.Core.pszMsg);
-- return;
-- }
-- }
-- else
-- {
-- m->strWhyUnusable.printf(tr("Only native main modules are currently supported"));
-- return;
-- }
--
-- /*
-- * Resolve the predefined entry point.
-- */
-- PFNVBOXEXTPACKREGISTER pfnRegistration;
-- vrc = RTLdrGetSymbol(m->hMainMod, VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, (void **)&pfnRegistration);
-- if (RT_SUCCESS(vrc))
-- {
-- RTErrInfoClear(&ErrInfo.Core);
-- vrc = pfnRegistration(&m->Hlp, &m->pReg, &ErrInfo.Core);
-- if ( RT_SUCCESS(vrc)
-- && !RTErrInfoIsSet(&ErrInfo.Core)
-- && VALID_PTR(m->pReg))
-- {
-- if ( VBOXEXTPACK_IS_MAJOR_VER_EQUAL(m->pReg->u32Version, VBOXEXTPACKREG_VERSION)
-- && m->pReg->u32EndMarker == m->pReg->u32Version)
-- {
-- if ( (!m->pReg->pfnInstalled || RT_VALID_PTR(m->pReg->pfnInstalled))
-- && (!m->pReg->pfnUninstall || RT_VALID_PTR(m->pReg->pfnUninstall))
-- && (!m->pReg->pfnVirtualBoxReady || RT_VALID_PTR(m->pReg->pfnVirtualBoxReady))
-- && (!m->pReg->pfnConsoleReady || RT_VALID_PTR(m->pReg->pfnConsoleReady))
-- && (!m->pReg->pfnUnload || RT_VALID_PTR(m->pReg->pfnUnload))
-- && (!m->pReg->pfnVMCreated || RT_VALID_PTR(m->pReg->pfnVMCreated))
-- && (!m->pReg->pfnVMConfigureVMM || RT_VALID_PTR(m->pReg->pfnVMConfigureVMM))
-- && (!m->pReg->pfnVMPowerOn || RT_VALID_PTR(m->pReg->pfnVMPowerOn))
-- && (!m->pReg->pfnVMPowerOff || RT_VALID_PTR(m->pReg->pfnVMPowerOff))
-- && (!m->pReg->pfnQueryObject || RT_VALID_PTR(m->pReg->pfnQueryObject))
-- )
-- {
-- /*
-- * We're good!
-- */
-- m->fUsable = true;
-- m->strWhyUnusable.setNull();
-- return;
-- }
--
-- m->strWhyUnusable = tr("The registration structure contains on or more invalid function pointers");
-- }
-- else
-- m->strWhyUnusable.printf(tr("Unsupported registration structure version %u.%u"),
-- RT_HIWORD(m->pReg->u32Version), RT_LOWORD(m->pReg->u32Version));
-- }
-- else
-- m->strWhyUnusable.printf(tr("%s returned %Rrc, pReg=%p ErrInfo='%s'"),
-- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc, m->pReg, ErrInfo.Core.pszMsg);
-- m->pReg = NULL;
-- }
-- else
-- m->strWhyUnusable.printf(tr("Failed to resolve exported symbol '%s' in the main module: %Rrc"),
-- VBOX_EXTPACK_MAIN_MOD_ENTRY_POINT, vrc);
--
-- RTLdrClose(m->hMainMod);
-- m->hMainMod = NIL_RTLDRMOD;
--}
--
--/**
-- * Finds a module.
-- *
-- * @returns true if found, false if not.
-- * @param a_pszName The module base name (no extension).
-- * @param a_pszExt The extension. If NULL we use default
-- * extensions.
-- * @param a_enmKind The kind of module to locate.
-- * @param a_pStrFound Where to return the path to the module we've
-- * found.
-- * @param a_pfNative Where to return whether this is a native module
-- * or an agnostic one. Optional.
-- * @param a_pObjInfo Where to return the file system object info for
-- * the module. Optional.
-- */
--bool ExtPack::findModule(const char *a_pszName, const char *a_pszExt, VBOXEXTPACKMODKIND a_enmKind,
-- Utf8Str *a_pStrFound, bool *a_pfNative, PRTFSOBJINFO a_pObjInfo) const
--{
-- /*
-- * Try the native path first.
-- */
-- char szPath[RTPATH_MAX];
-- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetDotArch());
-- AssertLogRelRCReturn(vrc, false);
-- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName);
-- AssertLogRelRCReturn(vrc, false);
-- if (!a_pszExt)
-- {
-- const char *pszDefExt;
-- switch (a_enmKind)
-- {
-- case VBOXEXTPACKMODKIND_RC: pszDefExt = ".rc"; break;
-- case VBOXEXTPACKMODKIND_R0: pszDefExt = ".r0"; break;
-- case VBOXEXTPACKMODKIND_R3: pszDefExt = RTLdrGetSuff(); break;
-- default:
-- AssertFailedReturn(false);
-- }
-- vrc = RTStrCat(szPath, sizeof(szPath), pszDefExt);
-- AssertLogRelRCReturn(vrc, false);
-- }
--
-- RTFSOBJINFO ObjInfo;
-- if (!a_pObjInfo)
-- a_pObjInfo = &ObjInfo;
-- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX);
-- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode))
-- {
-- if (a_pfNative)
-- *a_pfNative = true;
-- *a_pStrFound = szPath;
-- return true;
-- }
--
-- /*
-- * Try the platform agnostic modules.
-- */
-- /* gcc.x86/module.rel */
-- char szSubDir[32];
-- RTStrPrintf(szSubDir, sizeof(szSubDir), "%s.%s", RTBldCfgCompiler(), RTBldCfgTargetArch());
-- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szSubDir);
-- AssertLogRelRCReturn(vrc, false);
-- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName);
-- AssertLogRelRCReturn(vrc, false);
-- if (!a_pszExt)
-- {
-- vrc = RTStrCat(szPath, sizeof(szPath), ".rel");
-- AssertLogRelRCReturn(vrc, false);
-- }
-- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX);
-- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode))
-- {
-- if (a_pfNative)
-- *a_pfNative = false;
-- *a_pStrFound = szPath;
-- return true;
-- }
--
-- /* x86/module.rel */
-- vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), RTBldCfgTargetArch());
-- AssertLogRelRCReturn(vrc, false);
-- vrc = RTPathAppend(szPath, sizeof(szPath), a_pszName);
-- AssertLogRelRCReturn(vrc, false);
-- if (!a_pszExt)
-- {
-- vrc = RTStrCat(szPath, sizeof(szPath), ".rel");
-- AssertLogRelRCReturn(vrc, false);
-- }
-- vrc = RTPathQueryInfo(szPath, a_pObjInfo, RTFSOBJATTRADD_UNIX);
-- if (RT_SUCCESS(vrc) && RTFS_IS_FILE(a_pObjInfo->Attr.fMode))
-- {
-- if (a_pfNative)
-- *a_pfNative = false;
-- *a_pStrFound = szPath;
-- return true;
-- }
--
-- return false;
--}
--
--/**
-- * Compares two file system object info structures.
-- *
-- * @returns true if equal, false if not.
-- * @param pObjInfo1 The first.
-- * @param pObjInfo2 The second.
-- * @todo IPRT should do this, really.
-- */
--/* static */ bool ExtPack::objinfoIsEqual(PCRTFSOBJINFO pObjInfo1, PCRTFSOBJINFO pObjInfo2)
--{
-- if (!RTTimeSpecIsEqual(&pObjInfo1->ModificationTime, &pObjInfo2->ModificationTime))
-- return false;
-- if (!RTTimeSpecIsEqual(&pObjInfo1->ChangeTime, &pObjInfo2->ChangeTime))
-- return false;
-- if (!RTTimeSpecIsEqual(&pObjInfo1->BirthTime, &pObjInfo2->BirthTime))
-- return false;
-- if (pObjInfo1->cbObject != pObjInfo2->cbObject)
-- return false;
-- if (pObjInfo1->Attr.fMode != pObjInfo2->Attr.fMode)
-- return false;
-- if (pObjInfo1->Attr.enmAdditional == pObjInfo2->Attr.enmAdditional)
-- {
-- switch (pObjInfo1->Attr.enmAdditional)
-- {
-- case RTFSOBJATTRADD_UNIX:
-- if (pObjInfo1->Attr.u.Unix.uid != pObjInfo2->Attr.u.Unix.uid)
-- return false;
-- if (pObjInfo1->Attr.u.Unix.gid != pObjInfo2->Attr.u.Unix.gid)
-- return false;
-- if (pObjInfo1->Attr.u.Unix.INodeIdDevice != pObjInfo2->Attr.u.Unix.INodeIdDevice)
-- return false;
-- if (pObjInfo1->Attr.u.Unix.INodeId != pObjInfo2->Attr.u.Unix.INodeId)
-- return false;
-- if (pObjInfo1->Attr.u.Unix.GenerationId != pObjInfo2->Attr.u.Unix.GenerationId)
-- return false;
-- break;
-- default:
-- break;
-- }
-- }
-- return true;
--}
--
--
--/**
-- * @interface_method_impl{VBOXEXTPACKHLP,pfnFindModule}
-- */
--/*static*/ DECLCALLBACK(int)
--ExtPack::hlpFindModule(PCVBOXEXTPACKHLP pHlp, const char *pszName, const char *pszExt, VBOXEXTPACKMODKIND enmKind,
-- char *pszFound, size_t cbFound, bool *pfNative)
--{
-- /*
-- * Validate the input and get our bearings.
-- */
-- AssertPtrReturn(pszName, VERR_INVALID_POINTER);
-- AssertPtrNullReturn(pszExt, VERR_INVALID_POINTER);
-- AssertPtrReturn(pszFound, VERR_INVALID_POINTER);
-- AssertPtrNullReturn(pfNative, VERR_INVALID_POINTER);
-- AssertReturn(enmKind > VBOXEXTPACKMODKIND_INVALID && enmKind < VBOXEXTPACKMODKIND_END, VERR_INVALID_PARAMETER);
--
-- AssertPtrReturn(pHlp, VERR_INVALID_POINTER);
-- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER);
-- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
-- AssertPtrReturn(m, VERR_INVALID_POINTER);
-- ExtPack *pThis = m->pThis;
-- AssertPtrReturn(pThis, VERR_INVALID_POINTER);
--
-- /*
-- * This is just a wrapper around findModule.
-- */
-- Utf8Str strFound;
-- if (pThis->findModule(pszName, pszExt, enmKind, &strFound, pfNative, NULL))
-- return RTStrCopy(pszFound, cbFound, strFound.c_str());
-- return VERR_FILE_NOT_FOUND;
--}
--
--/*static*/ DECLCALLBACK(int)
--ExtPack::hlpGetFilePath(PCVBOXEXTPACKHLP pHlp, const char *pszFilename, char *pszPath, size_t cbPath)
--{
-- /*
-- * Validate the input and get our bearings.
-- */
-- AssertPtrReturn(pszFilename, VERR_INVALID_POINTER);
-- AssertPtrReturn(pszPath, VERR_INVALID_POINTER);
-- AssertReturn(cbPath > 0, VERR_BUFFER_OVERFLOW);
--
-- AssertPtrReturn(pHlp, VERR_INVALID_POINTER);
-- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER);
-- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
-- AssertPtrReturn(m, VERR_INVALID_POINTER);
-- ExtPack *pThis = m->pThis;
-- AssertPtrReturn(pThis, VERR_INVALID_POINTER);
--
-- /*
-- * This is a simple RTPathJoin, no checking if things exists or anything.
-- */
-- int vrc = RTPathJoin(pszPath, cbPath, pThis->m->strExtPackPath.c_str(), pszFilename);
-- if (RT_FAILURE(vrc))
-- RT_BZERO(pszPath, cbPath);
-- return vrc;
--}
--
--/*static*/ DECLCALLBACK(VBOXEXTPACKCTX)
--ExtPack::hlpGetContext(PCVBOXEXTPACKHLP pHlp)
--{
-- /*
-- * Validate the input and get our bearings.
-- */
-- AssertPtrReturn(pHlp, VBOXEXTPACKCTX_INVALID);
-- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VBOXEXTPACKCTX_INVALID);
-- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
-- AssertPtrReturn(m, VBOXEXTPACKCTX_INVALID);
-- ExtPack *pThis = m->pThis;
-- AssertPtrReturn(pThis, VBOXEXTPACKCTX_INVALID);
--
-- return pThis->m->enmContext;
--}
--
--/*static*/ DECLCALLBACK(int)
--ExtPack::hlpReservedN(PCVBOXEXTPACKHLP pHlp)
--{
-- /*
-- * Validate the input and get our bearings.
-- */
-- AssertPtrReturn(pHlp, VERR_INVALID_POINTER);
-- AssertReturn(pHlp->u32Version == VBOXEXTPACKHLP_VERSION, VERR_INVALID_POINTER);
-- ExtPack::Data *m = RT_FROM_CPP_MEMBER(pHlp, Data, Hlp);
-- AssertPtrReturn(m, VERR_INVALID_POINTER);
-- ExtPack *pThis = m->pThis;
-- AssertPtrReturn(pThis, VERR_INVALID_POINTER);
--
-- return VERR_NOT_IMPLEMENTED;
--}
--
--
--
--
--
--STDMETHODIMP ExtPack::COMGETTER(Name)(BSTR *a_pbstrName)
--{
-- CheckComArgOutPointerValid(a_pbstrName);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- Bstr str(m->Desc.strName);
-- str.cloneTo(a_pbstrName);
-- }
-- return hrc;
--}
--
--STDMETHODIMP ExtPack::COMGETTER(Description)(BSTR *a_pbstrDescription)
--{
-- CheckComArgOutPointerValid(a_pbstrDescription);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- Bstr str(m->Desc.strDescription);
-- str.cloneTo(a_pbstrDescription);
-- }
-- return hrc;
--}
--
--STDMETHODIMP ExtPack::COMGETTER(Version)(BSTR *a_pbstrVersion)
--{
-- CheckComArgOutPointerValid(a_pbstrVersion);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- /* HACK ALERT: This is for easing backporting to 4.1. The edition stuff
-- will be changed into a separate */
-- if (m->Desc.strEdition.isEmpty())
-- {
-- Bstr str(m->Desc.strVersion);
-- str.cloneTo(a_pbstrVersion);
-- }
-- else
-- {
-- RTCString strHack(m->Desc.strVersion);
-- strHack.append('-');
-- strHack.append(m->Desc.strEdition);
--
-- Bstr str(strHack);
-- str.cloneTo(a_pbstrVersion);
-- }
-- }
-- return hrc;
--}
--
--STDMETHODIMP ExtPack::COMGETTER(Revision)(ULONG *a_puRevision)
--{
-- CheckComArgOutPointerValid(a_puRevision);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- *a_puRevision = m->Desc.uRevision;
-- return hrc;
--}
--
--STDMETHODIMP ExtPack::COMGETTER(VRDEModule)(BSTR *a_pbstrVrdeModule)
--{
-- CheckComArgOutPointerValid(a_pbstrVrdeModule);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- Bstr str(m->Desc.strVrdeModule);
-- str.cloneTo(a_pbstrVrdeModule);
-- }
-- return hrc;
--}
--
--STDMETHODIMP ExtPack::COMGETTER(PlugIns)(ComSafeArrayOut(IExtPackPlugIn *, a_paPlugIns))
--{
-- /** @todo implement plug-ins. */
--#ifdef VBOX_WITH_XPCOM
-- NOREF(a_paPlugIns);
-- NOREF(a_paPlugInsSize);
--#endif
-- ReturnComNotImplemented();
--}
--
--STDMETHODIMP ExtPack::COMGETTER(Usable)(BOOL *a_pfUsable)
--{
-- CheckComArgOutPointerValid(a_pfUsable);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- *a_pfUsable = m->fUsable;
-- return hrc;
--}
--
--STDMETHODIMP ExtPack::COMGETTER(WhyUnusable)(BSTR *a_pbstrWhy)
--{
-- CheckComArgOutPointerValid(a_pbstrWhy);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- m->strWhyUnusable.cloneTo(a_pbstrWhy);
-- return hrc;
--}
--
--STDMETHODIMP ExtPack::COMGETTER(ShowLicense)(BOOL *a_pfShowIt)
--{
-- CheckComArgOutPointerValid(a_pfShowIt);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- *a_pfShowIt = m->Desc.fShowLicense;
-- return hrc;
--}
--
--STDMETHODIMP ExtPack::COMGETTER(License)(BSTR *a_pbstrHtmlLicense)
--{
-- Bstr bstrHtml("html");
-- return QueryLicense(Bstr::Empty.raw(), Bstr::Empty.raw(), bstrHtml.raw(), a_pbstrHtmlLicense);
--}
--
--STDMETHODIMP ExtPack::QueryLicense(IN_BSTR a_bstrPreferredLocale, IN_BSTR a_bstrPreferredLanguage, IN_BSTR a_bstrFormat,
-- BSTR *a_pbstrLicense)
--{
-- /*
-- * Validate input.
-- */
-- CheckComArgOutPointerValid(a_pbstrLicense);
-- CheckComArgNotNull(a_bstrPreferredLocale);
-- CheckComArgNotNull(a_bstrPreferredLanguage);
-- CheckComArgNotNull(a_bstrFormat);
--
-- Utf8Str strPreferredLocale(a_bstrPreferredLocale);
-- if (strPreferredLocale.length() != 2 && strPreferredLocale.length() != 0)
-- return setError(E_FAIL, tr("The preferred locale is a two character string or empty."));
--
-- Utf8Str strPreferredLanguage(a_bstrPreferredLanguage);
-- if (strPreferredLanguage.length() != 2 && strPreferredLanguage.length() != 0)
-- return setError(E_FAIL, tr("The preferred lanuage is a two character string or empty."));
--
-- Utf8Str strFormat(a_bstrFormat);
-- if ( !strFormat.equals("html")
-- && !strFormat.equals("rtf")
-- && !strFormat.equals("txt"))
-- return setError(E_FAIL, tr("The license format can only have the values 'html', 'rtf' and 'txt'."));
--
-- /*
-- * Combine the options to form a file name before locking down anything.
-- */
-- char szName[sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX "-de_DE.html") + 2];
-- if (strPreferredLocale.isNotEmpty() && strPreferredLanguage.isNotEmpty())
-- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s_%s.%s",
-- strPreferredLocale.c_str(), strPreferredLanguage.c_str(), strFormat.c_str());
-- else if (strPreferredLocale.isNotEmpty())
-- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
-- else if (strPreferredLanguage.isNotEmpty())
-- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX "-_%s.%s", strPreferredLocale.c_str(), strFormat.c_str());
-- else
-- RTStrPrintf(szName, sizeof(szName), VBOX_EXTPACK_LICENSE_NAME_PREFIX ".%s", strFormat.c_str());
--
-- /*
-- * Effectuate the query.
-- */
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS); /* paranoia */
--
-- if (!m->fUsable)
-- hrc = setError(E_FAIL, tr("%s"), m->strWhyUnusable.c_str());
-- else
-- {
-- char szPath[RTPATH_MAX];
-- int vrc = RTPathJoin(szPath, sizeof(szPath), m->strExtPackPath.c_str(), szName);
-- if (RT_SUCCESS(vrc))
-- {
-- void *pvFile;
-- size_t cbFile;
-- vrc = RTFileReadAllEx(szPath, 0, RTFOFF_MAX, RTFILE_RDALL_O_DENY_READ, &pvFile, &cbFile);
-- if (RT_SUCCESS(vrc))
-- {
-- Bstr bstrLicense((const char *)pvFile, cbFile);
-- if (bstrLicense.isNotEmpty())
-- {
-- bstrLicense.detachTo(a_pbstrLicense);
-- hrc = S_OK;
-- }
-- else
-- hrc = setError(VBOX_E_IPRT_ERROR, tr("The license file '%s' is empty or contains invalid UTF-8 encoding"),
-- szPath);
-- RTFileReadAllFree(pvFile, cbFile);
-- }
-- else if (vrc == VERR_FILE_NOT_FOUND || vrc == VERR_PATH_NOT_FOUND)
-- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("The license file '%s' was not found in extension pack '%s'"),
-- szName, m->Desc.strName.c_str());
-- else
-- hrc = setError(VBOX_E_FILE_ERROR, tr("Failed to open the license file '%s': %Rrc"), szPath, vrc);
-- }
-- else
-- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTPathJoin failed: %Rrc"), vrc);
-- }
-- }
-- return hrc;
--}
--
--
--STDMETHODIMP ExtPack::QueryObject(IN_BSTR a_bstrObjectId, IUnknown **a_ppUnknown)
--{
-- com::Guid ObjectId;
-- CheckComArgGuid(a_bstrObjectId, ObjectId);
-- CheckComArgOutPointerValid(a_ppUnknown);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- if ( m->pReg
-- && m->pReg->pfnQueryObject)
-- {
-- void *pvUnknown = m->pReg->pfnQueryObject(m->pReg, ObjectId.raw());
-- if (pvUnknown)
-- *a_ppUnknown = (IUnknown *)pvUnknown;
-- else
-- hrc = E_NOINTERFACE;
-- }
-- else
-- hrc = E_NOINTERFACE;
-- }
-- return hrc;
--}
--
--
--
--
--DEFINE_EMPTY_CTOR_DTOR(ExtPackManager)
--
--/**
-- * Called by ComObjPtr::createObject when creating the object.
-- *
-- * Just initialize the basic object state, do the rest in init().
-- *
-- * @returns S_OK.
-- */
--HRESULT ExtPackManager::FinalConstruct()
--{
-- m = NULL;
-- return S_OK;
--}
--
--/**
-- * Initializes the extension pack manager.
-- *
-- * @returns COM status code.
-- * @param a_pVirtualBox Pointer to the VirtualBox object.
-- * @param a_enmContext The context we're in.
-- */
--HRESULT ExtPackManager::initExtPackManager(VirtualBox *a_pVirtualBox, VBOXEXTPACKCTX a_enmContext)
--{
-- AutoInitSpan autoInitSpan(this);
-- AssertReturn(autoInitSpan.isOk(), E_FAIL);
--
-- /*
-- * Figure some stuff out before creating the instance data.
-- */
-- char szBaseDir[RTPATH_MAX];
-- int rc = RTPathAppPrivateArchTop(szBaseDir, sizeof(szBaseDir));
-- AssertLogRelRCReturn(rc, E_FAIL);
-- rc = RTPathAppend(szBaseDir, sizeof(szBaseDir), VBOX_EXTPACK_INSTALL_DIR);
-- AssertLogRelRCReturn(rc, E_FAIL);
--
-- char szCertificatDir[RTPATH_MAX];
-- rc = RTPathAppPrivateNoArch(szCertificatDir, sizeof(szCertificatDir));
-- AssertLogRelRCReturn(rc, E_FAIL);
-- rc = RTPathAppend(szCertificatDir, sizeof(szCertificatDir), VBOX_EXTPACK_CERT_DIR);
-- AssertLogRelRCReturn(rc, E_FAIL);
--
-- /*
-- * Allocate and initialize the instance data.
-- */
-- m = new Data;
-- m->strBaseDir = szBaseDir;
-- m->strCertificatDirPath = szCertificatDir;
-- m->pVirtualBox = a_pVirtualBox;
-- m->enmContext = a_enmContext;
--
-- /*
-- * Slurp in VBoxVMM which is used by VBoxPuelMain.
-- */
--#if !defined(RT_OS_WINDOWS) && !defined(RT_OS_DARWIN)
-- if (a_enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON)
-- {
-- int vrc = SUPR3HardenedLdrLoadAppPriv("VBoxVMM", &m->hVBoxVMM, RTLDRLOAD_FLAGS_GLOBAL, NULL);
-- if (RT_FAILURE(vrc))
-- m->hVBoxVMM = NIL_RTLDRMOD;
-- /* cleanup in ::uninit()? */
-- }
--#endif
--
-- /*
-- * Go looking for extensions. The RTDirOpen may fail if nothing has been
-- * installed yet, or if root is paranoid and has revoked our access to them.
-- *
-- * We ASSUME that there are no files, directories or stuff in the directory
-- * that exceed the max name length in RTDIRENTRYEX.
-- */
-- HRESULT hrc = S_OK;
-- PRTDIR pDir;
-- int vrc = RTDirOpen(&pDir, szBaseDir);
-- if (RT_SUCCESS(vrc))
-- {
-- for (;;)
-- {
-- RTDIRENTRYEX Entry;
-- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
-- if (RT_FAILURE(vrc))
-- {
-- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc));
-- break;
-- }
-- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode)
-- && strcmp(Entry.szName, ".") != 0
-- && strcmp(Entry.szName, "..") != 0
-- && VBoxExtPackIsValidMangledName(Entry.szName) )
-- {
-- /*
-- * All directories are extensions, the shall be nothing but
-- * extensions in this subdirectory.
-- */
-- char szExtPackDir[RTPATH_MAX];
-- vrc = RTPathJoin(szExtPackDir, sizeof(szExtPackDir), m->strBaseDir.c_str(), Entry.szName);
-- AssertLogRelRC(vrc);
-- if (RT_SUCCESS(vrc))
-- {
-- RTCString *pstrName = VBoxExtPackUnmangleName(Entry.szName, RTSTR_MAX);
-- AssertLogRel(pstrName);
-- if (pstrName)
-- {
-- ComObjPtr<ExtPack> NewExtPack;
-- HRESULT hrc2 = NewExtPack.createObject();
-- if (SUCCEEDED(hrc2))
-- hrc2 = NewExtPack->initWithDir(a_enmContext, pstrName->c_str(), szExtPackDir);
-- delete pstrName;
-- if (SUCCEEDED(hrc2))
-- m->llInstalledExtPacks.push_back(NewExtPack);
-- else if (SUCCEEDED(rc))
-- hrc = hrc2;
-- }
-- else
-- hrc = E_UNEXPECTED;
-- }
-- else
-- hrc = E_UNEXPECTED;
-- }
-- }
-- RTDirClose(pDir);
-- }
-- /* else: ignore, the directory probably does not exist or something. */
--
-- if (SUCCEEDED(hrc))
-- autoInitSpan.setSucceeded();
-- return hrc;
--}
--
--/**
-- * COM cruft.
-- */
--void ExtPackManager::FinalRelease()
--{
-- uninit();
--}
--
--/**
-- * Do the actual cleanup.
-- */
--void ExtPackManager::uninit()
--{
-- /* Enclose the state transition Ready->InUninit->NotReady */
-- AutoUninitSpan autoUninitSpan(this);
-- if (!autoUninitSpan.uninitDone() && m != NULL)
-- {
-- delete m;
-- m = NULL;
-- }
--}
--
--
--STDMETHODIMP ExtPackManager::COMGETTER(InstalledExtPacks)(ComSafeArrayOut(IExtPack *, a_paExtPacks))
--{
-- CheckComArgOutSafeArrayPointerValid(a_paExtPacks);
-- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
--
-- SafeIfaceArray<IExtPack> SaExtPacks(m->llInstalledExtPacks);
-- SaExtPacks.detachTo(ComSafeArrayOutArg(a_paExtPacks));
-- }
--
-- return hrc;
--}
--
--STDMETHODIMP ExtPackManager::Find(IN_BSTR a_bstrName, IExtPack **a_pExtPack)
--{
-- CheckComArgNotNull(a_bstrName);
-- CheckComArgOutPointerValid(a_pExtPack);
-- Utf8Str strName(a_bstrName);
-- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
--
-- ComPtr<ExtPack> ptrExtPack = findExtPack(strName.c_str());
-- if (!ptrExtPack.isNull())
-- ptrExtPack.queryInterfaceTo(a_pExtPack);
-- else
-- hrc = VBOX_E_OBJECT_NOT_FOUND;
-- }
--
-- return hrc;
--}
--
--STDMETHODIMP ExtPackManager::OpenExtPackFile(IN_BSTR a_bstrTarballAndDigest, IExtPackFile **a_ppExtPackFile)
--{
-- CheckComArgNotNull(a_bstrTarballAndDigest);
-- CheckComArgOutPointerValid(a_ppExtPackFile);
-- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED);
--
-- /* The API can optionally take a ::SHA-256=<hex-digest> attribute at the
-- end of the file name. This is just a temporary measure for
-- backporting, in 4.2 we'll add another parameter to the method. */
-- Utf8Str strTarball;
-- Utf8Str strDigest;
-- Utf8Str strTarballAndDigest(a_bstrTarballAndDigest);
-- size_t offSha256 = strTarballAndDigest.find("::SHA-256=");
-- if (offSha256 == Utf8Str::npos)
-- strTarball = strTarballAndDigest;
-- else
-- {
-- strTarball = strTarballAndDigest.substr(0, offSha256);
-- strDigest = strTarballAndDigest.substr(offSha256 + sizeof("::SHA-256=") - 1);
-- }
--
-- ComObjPtr<ExtPackFile> NewExtPackFile;
-- HRESULT hrc = NewExtPackFile.createObject();
-- if (SUCCEEDED(hrc))
-- hrc = NewExtPackFile->initWithFile(strTarball.c_str(), strDigest.c_str(), this, m->pVirtualBox);
-- if (SUCCEEDED(hrc))
-- NewExtPackFile.queryInterfaceTo(a_ppExtPackFile);
--
-- return hrc;
--}
--
--STDMETHODIMP ExtPackManager::Uninstall(IN_BSTR a_bstrName, BOOL a_fForcedRemoval, IN_BSTR a_bstrDisplayInfo,
-- IProgress **a_ppProgress)
--{
-- CheckComArgNotNull(a_bstrName);
-- if (a_ppProgress)
-- *a_ppProgress = NULL;
-- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- PEXTPACKUNINSTALLJOB pJob = NULL;
-- try
-- {
-- pJob = new EXTPACKUNINSTALLJOB;
-- pJob->ptrExtPackMgr = this;
-- pJob->strName = a_bstrName;
-- pJob->fForcedRemoval = a_fForcedRemoval != FALSE;
-- pJob->strDisplayInfo = a_bstrDisplayInfo;
-- hrc = pJob->ptrProgress.createObject();
-- if (SUCCEEDED(hrc))
-- {
-- Bstr bstrDescription = tr("Uninstalling extension pack");
-- hrc = pJob->ptrProgress->init(
--#ifndef VBOX_COM_INPROC
-- m->pVirtualBox,
--#endif
-- static_cast<IExtPackManager *>(this),
-- bstrDescription.raw(),
-- FALSE /*aCancelable*/,
-- NULL /*aId*/);
-- }
-- if (SUCCEEDED(hrc))
-- {
-- ComPtr<Progress> ptrProgress = pJob->ptrProgress;
-- int vrc = RTThreadCreate(NULL /*phThread*/, ExtPackManager::doUninstallThreadProc, pJob, 0,
-- RTTHREADTYPE_DEFAULT, 0 /*fFlags*/, "ExtPackUninst");
-- if (RT_SUCCESS(vrc))
-- {
-- pJob = NULL; /* the thread deletes it */
-- ptrProgress.queryInterfaceTo(a_ppProgress);
-- }
-- else
-- hrc = setError(VBOX_E_IPRT_ERROR, tr("RTThreadCreate failed with %Rrc"), vrc);
-- }
-- }
-- catch (std::bad_alloc)
-- {
-- hrc = E_OUTOFMEMORY;
-- }
-- if (pJob)
-- delete pJob;
-- }
--
-- return hrc;
--}
--
--STDMETHODIMP ExtPackManager::Cleanup(void)
--{
-- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- /*
-- * Run the set-uid-to-root binary that performs the cleanup.
-- *
-- * Take the write lock to prevent conflicts with other calls to this
-- * VBoxSVC instance.
-- */
-- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
-- hrc = runSetUidToRootHelper(NULL,
-- "cleanup",
-- "--base-dir", m->strBaseDir.c_str(),
-- (const char *)NULL);
-- }
--
-- return hrc;
--}
--
--STDMETHODIMP ExtPackManager::QueryAllPlugInsForFrontend(IN_BSTR a_bstrFrontend, ComSafeArrayOut(BSTR, a_pabstrPlugInModules))
--{
-- CheckComArgNotNull(a_bstrFrontend);
-- Utf8Str strName(a_bstrFrontend);
-- CheckComArgOutSafeArrayPointerValid(a_pabstrPlugInModules);
-- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- com::SafeArray<BSTR> saPaths((size_t)0);
-- /** @todo implement plug-ins */
-- saPaths.detachTo(ComSafeArrayOutArg(a_pabstrPlugInModules));
-- }
-- return hrc;
--}
--
--STDMETHODIMP ExtPackManager::IsExtPackUsable(IN_BSTR a_bstrExtPack, BOOL *aUsable)
--{
-- CheckComArgNotNull(a_bstrExtPack);
-- Utf8Str strExtPack(a_bstrExtPack);
-- *aUsable = isExtPackUsable(strExtPack.c_str());
-- return S_OK;
--}
--
--/**
-- * Finds the success indicator string in the stderr output ofr hte helper app.
-- *
-- * @returns Pointer to the indicator.
-- * @param psz The stderr output string. Can be NULL.
-- * @param cch The size of the string.
-- */
--static char *findSuccessIndicator(char *psz, size_t cch)
--{
-- static const char s_szSuccessInd[] = "rcExit=RTEXITCODE_SUCCESS";
-- Assert(!cch || strlen(psz) == cch);
-- if (cch < sizeof(s_szSuccessInd) - 1)
-- return NULL;
-- char *pszInd = &psz[cch - sizeof(s_szSuccessInd) + 1];
-- if (strcmp(s_szSuccessInd, pszInd))
-- return NULL;
-- return pszInd;
--}
--
--/**
-- * Runs the helper application that does the privileged operations.
-- *
-- * @returns S_OK or a failure status with error information set.
-- * @param a_pstrDisplayInfo Platform specific display info hacks.
-- * @param a_pszCommand The command to execute.
-- * @param ... The argument strings that goes along with the
-- * command. Maximum is about 16. Terminated by a
-- * NULL.
-- */
--HRESULT ExtPackManager::runSetUidToRootHelper(Utf8Str const *a_pstrDisplayInfo, const char *a_pszCommand, ...)
--{
-- /*
-- * Calculate the path to the helper application.
-- */
-- char szExecName[RTPATH_MAX];
-- int vrc = RTPathAppPrivateArch(szExecName, sizeof(szExecName));
-- AssertLogRelRCReturn(vrc, E_UNEXPECTED);
--
-- vrc = RTPathAppend(szExecName, sizeof(szExecName), VBOX_EXTPACK_HELPER_NAME);
-- AssertLogRelRCReturn(vrc, E_UNEXPECTED);
--
-- /*
-- * Convert the variable argument list to a RTProcCreate argument vector.
-- */
-- const char *apszArgs[20];
-- unsigned cArgs = 0;
--
-- LogRel(("ExtPack: Executing '%s'", szExecName));
-- apszArgs[cArgs++] = &szExecName[0];
--
-- if ( a_pstrDisplayInfo
-- && a_pstrDisplayInfo->isNotEmpty())
-- {
-- LogRel((" '--display-info-hack' '%s'", a_pstrDisplayInfo->c_str()));
-- apszArgs[cArgs++] = "--display-info-hack";
-- apszArgs[cArgs++] = a_pstrDisplayInfo->c_str();
-- }
--
-- LogRel(("'%s'", a_pszCommand));
-- apszArgs[cArgs++] = a_pszCommand;
--
-- va_list va;
-- va_start(va, a_pszCommand);
-- const char *pszLastArg;
-- for (;;)
-- {
-- AssertReturn(cArgs < RT_ELEMENTS(apszArgs) - 1, E_UNEXPECTED);
-- pszLastArg = va_arg(va, const char *);
-- if (!pszLastArg)
-- break;
-- LogRel((" '%s'", pszLastArg));
-- apszArgs[cArgs++] = pszLastArg;
-- };
-- va_end(va);
--
-- LogRel(("\n"));
-- apszArgs[cArgs] = NULL;
--
-- /*
-- * Create a PIPE which we attach to stderr so that we can read the error
-- * message on failure and report it back to the caller.
-- */
-- RTPIPE hPipeR;
-- RTHANDLE hStdErrPipe;
-- hStdErrPipe.enmType = RTHANDLETYPE_PIPE;
-- vrc = RTPipeCreate(&hPipeR, &hStdErrPipe.u.hPipe, RTPIPE_C_INHERIT_WRITE);
-- AssertLogRelRCReturn(vrc, E_UNEXPECTED);
--
-- /*
-- * Spawn the process.
-- */
-- HRESULT hrc;
-- RTPROCESS hProcess;
-- vrc = RTProcCreateEx(szExecName,
-- apszArgs,
-- RTENV_DEFAULT,
-- 0 /*fFlags*/,
-- NULL /*phStdIn*/,
-- NULL /*phStdOut*/,
-- &hStdErrPipe,
-- NULL /*pszAsUser*/,
-- NULL /*pszPassword*/,
-- &hProcess);
-- if (RT_SUCCESS(vrc))
-- {
-- vrc = RTPipeClose(hStdErrPipe.u.hPipe);
-- hStdErrPipe.u.hPipe = NIL_RTPIPE;
--
-- /*
-- * Read the pipe output until the process completes.
-- */
-- RTPROCSTATUS ProcStatus = { -42, RTPROCEXITREASON_ABEND };
-- size_t cbStdErrBuf = 0;
-- size_t offStdErrBuf = 0;
-- char *pszStdErrBuf = NULL;
-- do
-- {
-- /*
-- * Service the pipe. Block waiting for output or the pipe breaking
-- * when the process terminates.
-- */
-- if (hPipeR != NIL_RTPIPE)
-- {
-- char achBuf[1024];
-- size_t cbRead;
-- vrc = RTPipeReadBlocking(hPipeR, achBuf, sizeof(achBuf), &cbRead);
-- if (RT_SUCCESS(vrc))
-- {
-- /* grow the buffer? */
-- size_t cbBufReq = offStdErrBuf + cbRead + 1;
-- if ( cbBufReq > cbStdErrBuf
-- && cbBufReq < _256K)
-- {
-- size_t cbNew = RT_ALIGN_Z(cbBufReq, 16); // 1024
-- void *pvNew = RTMemRealloc(pszStdErrBuf, cbNew);
-- if (pvNew)
-- {
-- pszStdErrBuf = (char *)pvNew;
-- cbStdErrBuf = cbNew;
-- }
-- }
--
-- /* append if we've got room. */
-- if (cbBufReq <= cbStdErrBuf)
-- {
-- memcpy(&pszStdErrBuf[offStdErrBuf], achBuf, cbRead);
-- offStdErrBuf = offStdErrBuf + cbRead;
-- pszStdErrBuf[offStdErrBuf] = '\0';
-- }
-- }
-- else
-- {
-- AssertLogRelMsg(vrc == VERR_BROKEN_PIPE, ("%Rrc\n", vrc));
-- RTPipeClose(hPipeR);
-- hPipeR = NIL_RTPIPE;
-- }
-- }
--
-- /*
-- * Service the process. Block if we have no pipe.
-- */
-- if (hProcess != NIL_RTPROCESS)
-- {
-- vrc = RTProcWait(hProcess,
-- hPipeR == NIL_RTPIPE ? RTPROCWAIT_FLAGS_BLOCK : RTPROCWAIT_FLAGS_NOBLOCK,
-- &ProcStatus);
-- if (RT_SUCCESS(vrc))
-- hProcess = NIL_RTPROCESS;
-- else
-- AssertLogRelMsgStmt(vrc == VERR_PROCESS_RUNNING, ("%Rrc\n", vrc), hProcess = NIL_RTPROCESS);
-- }
-- } while ( hPipeR != NIL_RTPIPE
-- || hProcess != NIL_RTPROCESS);
--
-- LogRel(("ExtPack: enmReason=%d iStatus=%d stderr='%s'\n",
-- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : ""));
--
-- /*
-- * Look for rcExit=RTEXITCODE_SUCCESS at the end of the error output,
-- * cut it as it is only there to attest the success.
-- */
-- if (offStdErrBuf > 0)
-- {
-- RTStrStripR(pszStdErrBuf);
-- offStdErrBuf = strlen(pszStdErrBuf);
-- }
--
-- char *pszSuccessInd = findSuccessIndicator(pszStdErrBuf, offStdErrBuf);
-- if (pszSuccessInd)
-- {
-- *pszSuccessInd = '\0';
-- offStdErrBuf = pszSuccessInd - pszStdErrBuf;
-- }
-- else if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL
-- && ProcStatus.iStatus == 0)
-- ProcStatus.iStatus = offStdErrBuf ? 667 : 666;
--
-- /*
-- * Compose the status code and, on failure, error message.
-- */
-- if ( ProcStatus.enmReason == RTPROCEXITREASON_NORMAL
-- && ProcStatus.iStatus == 0)
-- hrc = S_OK;
-- else if (ProcStatus.enmReason == RTPROCEXITREASON_NORMAL)
-- {
-- AssertMsg(ProcStatus.iStatus != 0, ("%s\n", pszStdErrBuf));
-- hrc = setError(E_FAIL, tr("The installer failed with exit code %d: %s"),
-- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "");
-- }
-- else if (ProcStatus.enmReason == RTPROCEXITREASON_SIGNAL)
-- hrc = setError(E_UNEXPECTED, tr("The installer was killed by signal #d (stderr: %s)"),
-- ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "");
-- else if (ProcStatus.enmReason == RTPROCEXITREASON_ABEND)
-- hrc = setError(E_UNEXPECTED, tr("The installer aborted abnormally (stderr: %s)"),
-- offStdErrBuf ? pszStdErrBuf : "");
-- else
-- hrc = setError(E_UNEXPECTED, tr("internal error: enmReason=%d iStatus=%d stderr='%s'"),
-- ProcStatus.enmReason, ProcStatus.iStatus, offStdErrBuf ? pszStdErrBuf : "");
--
-- RTMemFree(pszStdErrBuf);
-- }
-- else
-- hrc = setError(VBOX_E_IPRT_ERROR, tr("Failed to launch the helper application '%s' (%Rrc)"), szExecName, vrc);
--
-- RTPipeClose(hPipeR);
-- RTPipeClose(hStdErrPipe.u.hPipe);
--
-- return hrc;
--}
--
--/**
-- * Finds an installed extension pack.
-- *
-- * @returns Pointer to the extension pack if found, NULL if not. (No reference
-- * counting problem here since the caller must be holding the lock.)
-- * @param a_pszName The name of the extension pack.
-- */
--ExtPack *ExtPackManager::findExtPack(const char *a_pszName)
--{
-- size_t cchName = strlen(a_pszName);
--
-- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
-- it != m->llInstalledExtPacks.end();
-- it++)
-- {
-- ExtPack::Data *pExtPackData = (*it)->m;
-- if ( pExtPackData
-- && pExtPackData->Desc.strName.length() == cchName
-- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName))
-- return (*it);
-- }
-- return NULL;
--}
--
--/**
-- * Removes an installed extension pack from the internal list.
-- *
-- * The package is expected to exist!
-- *
-- * @param a_pszName The name of the extension pack.
-- */
--void ExtPackManager::removeExtPack(const char *a_pszName)
--{
-- size_t cchName = strlen(a_pszName);
--
-- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
-- it != m->llInstalledExtPacks.end();
-- it++)
-- {
-- ExtPack::Data *pExtPackData = (*it)->m;
-- if ( pExtPackData
-- && pExtPackData->Desc.strName.length() == cchName
-- && pExtPackData->Desc.strName.equalsIgnoreCase(a_pszName))
-- {
-- m->llInstalledExtPacks.erase(it);
-- return;
-- }
-- }
-- AssertMsgFailed(("%s\n", a_pszName));
--}
--
--/**
-- * Refreshes the specified extension pack.
-- *
-- * This may remove the extension pack from the list, so any non-smart pointers
-- * to the extension pack object may become invalid.
-- *
-- * @returns S_OK and *a_ppExtPack on success, COM status code and error
-- * message on failure. Note that *a_ppExtPack can be NULL.
-- *
-- * @param a_pszName The extension to update..
-- * @param a_fUnusableIsError If @c true, report an unusable extension pack
-- * as an error.
-- * @param a_ppExtPack Where to store the pointer to the extension
-- * pack of it is still around after the refresh.
-- * This is optional.
-- *
-- * @remarks Caller holds the extension manager lock.
-- * @remarks Only called in VBoxSVC.
-- */
--HRESULT ExtPackManager::refreshExtPack(const char *a_pszName, bool a_fUnusableIsError, ExtPack **a_ppExtPack)
--{
-- Assert(m->pVirtualBox != NULL); /* Only called from VBoxSVC. */
--
-- HRESULT hrc;
-- ExtPack *pExtPack = findExtPack(a_pszName);
-- if (pExtPack)
-- {
-- /*
-- * Refresh existing object.
-- */
-- bool fCanDelete;
-- hrc = pExtPack->refresh(&fCanDelete);
-- if (SUCCEEDED(hrc))
-- {
-- if (fCanDelete)
-- {
-- removeExtPack(a_pszName);
-- pExtPack = NULL;
-- }
-- }
-- }
-- else
-- {
-- /*
-- * Do this check here, otherwise VBoxExtPackCalcDir() will fail with a strange
-- * error.
-- */
-- bool fValid = VBoxExtPackIsValidName(a_pszName);
-- if (!fValid)
-- return setError(E_FAIL, "Invalid extension pack name specified");
--
-- /*
-- * Does the dir exist? Make some special effort to deal with case
-- * sensitivie file systems (a_pszName is case insensitive and mangled).
-- */
-- char szDir[RTPATH_MAX];
-- int vrc = VBoxExtPackCalcDir(szDir, sizeof(szDir), m->strBaseDir.c_str(), a_pszName);
-- AssertLogRelRCReturn(vrc, E_FAIL);
--
-- RTDIRENTRYEX Entry;
-- RTFSOBJINFO ObjInfo;
-- vrc = RTPathQueryInfoEx(szDir, &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
-- bool fExists = RT_SUCCESS(vrc) && RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode);
-- if (!fExists)
-- {
-- PRTDIR pDir;
-- vrc = RTDirOpen(&pDir, m->strBaseDir.c_str());
-- if (RT_SUCCESS(vrc))
-- {
-- const char *pszMangledName = RTPathFilename(szDir);
-- for (;;)
-- {
-- vrc = RTDirReadEx(pDir, &Entry, NULL /*pcbDirEntry*/, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK);
-- if (RT_FAILURE(vrc))
-- {
-- AssertLogRelMsg(vrc == VERR_NO_MORE_FILES, ("%Rrc\n", vrc));
-- break;
-- }
-- if ( RTFS_IS_DIRECTORY(Entry.Info.Attr.fMode)
-- && !RTStrICmp(Entry.szName, pszMangledName))
-- {
-- /*
-- * The installed extension pack has a uses different case.
-- * Update the name and directory variables.
-- */
-- vrc = RTPathJoin(szDir, sizeof(szDir), m->strBaseDir.c_str(), Entry.szName); /* not really necessary */
-- AssertLogRelRCReturnStmt(vrc, RTDirClose(pDir), E_UNEXPECTED);
-- a_pszName = Entry.szName;
-- fExists = true;
-- break;
-- }
-- }
-- RTDirClose(pDir);
-- }
-- }
-- if (fExists)
-- {
-- /*
-- * We've got something, create a new extension pack object for it.
-- */
-- ComObjPtr<ExtPack> ptrNewExtPack;
-- hrc = ptrNewExtPack.createObject();
-- if (SUCCEEDED(hrc))
-- hrc = ptrNewExtPack->initWithDir(m->enmContext, a_pszName, szDir);
-- if (SUCCEEDED(hrc))
-- {
-- m->llInstalledExtPacks.push_back(ptrNewExtPack);
-- if (ptrNewExtPack->m->fUsable)
-- LogRel(("ExtPackManager: Found extension pack '%s'.\n", a_pszName));
-- else
-- LogRel(("ExtPackManager: Found bad extension pack '%s': %s\n",
-- a_pszName, ptrNewExtPack->m->strWhyUnusable.c_str() ));
-- pExtPack = ptrNewExtPack;
-- }
-- }
-- else
-- hrc = S_OK;
-- }
--
-- /*
-- * Report error if not usable, if that is desired.
-- */
-- if ( SUCCEEDED(hrc)
-- && pExtPack
-- && a_fUnusableIsError
-- && !pExtPack->m->fUsable)
-- hrc = setError(E_FAIL, "%s", pExtPack->m->strWhyUnusable.c_str());
--
-- if (a_ppExtPack)
-- *a_ppExtPack = pExtPack;
-- return hrc;
--}
--
--/**
-- * Thread wrapper around doInstall.
-- *
-- * @returns VINF_SUCCESS (ignored)
-- * @param hThread The thread handle (ignored).
-- * @param pvJob The job structure.
-- */
--/*static*/ DECLCALLBACK(int) ExtPackManager::doInstallThreadProc(RTTHREAD hThread, void *pvJob)
--{
-- PEXTPACKINSTALLJOB pJob = (PEXTPACKINSTALLJOB)pvJob;
-- HRESULT hrc = pJob->ptrExtPackMgr->doInstall(pJob->ptrExtPackFile, pJob->fReplace, &pJob->strDisplayInfo);
-- pJob->ptrProgress->notifyComplete(hrc);
-- delete pJob;
--
-- NOREF(hThread);
-- return VINF_SUCCESS;
--}
--
--/**
-- * Worker for IExtPackFile::Install.
-- *
-- * Called on a worker thread via doInstallThreadProc.
-- *
-- * @returns COM status code.
-- * @param a_pExtPackFile The extension pack file, caller checks that
-- * it's usable.
-- * @param a_fReplace Whether to replace any existing extpack or just
-- * fail.
-- * @param a_pstrDisplayInfo Host specific display information hacks.
-- * @param a_ppProgress Where to return a progress object some day. Can
-- * be NULL.
-- */
--HRESULT ExtPackManager::doInstall(ExtPackFile *a_pExtPackFile, bool a_fReplace, Utf8Str const *a_pstrDisplayInfo)
--{
-- AssertReturn(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON, E_UNEXPECTED);
-- RTCString const * const pStrName = &a_pExtPackFile->m->Desc.strName;
-- RTCString const * const pStrTarball = &a_pExtPackFile->m->strExtPackFile;
-- RTCString const * const pStrTarballDigest = &a_pExtPackFile->m->strDigest;
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
--
-- /*
-- * Refresh the data we have on the extension pack as it
-- * may be made stale by direct meddling or some other user.
-- */
-- ExtPack *pExtPack;
-- hrc = refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
-- if (SUCCEEDED(hrc))
-- {
-- if (pExtPack && a_fReplace)
-- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, false /*a_ForcedRemoval*/);
-- else if (pExtPack)
-- hrc = setError(E_FAIL,
-- tr("Extension pack '%s' is already installed."
-- " In case of a reinstallation, please uninstall it first"),
-- pStrName->c_str());
-- }
-- if (SUCCEEDED(hrc))
-- {
-- /*
-- * Run the privileged helper binary that performs the actual
-- * installation. Then create an object for the packet (we do this
-- * even on failure, to be on the safe side).
-- */
-- hrc = runSetUidToRootHelper(a_pstrDisplayInfo,
-- "install",
-- "--base-dir", m->strBaseDir.c_str(),
-- "--cert-dir", m->strCertificatDirPath.c_str(),
-- "--name", pStrName->c_str(),
-- "--tarball", pStrTarball->c_str(),
-- "--sha-256", pStrTarballDigest->c_str(),
-- pExtPack ? "--replace" : (const char *)NULL,
-- (const char *)NULL);
-- if (SUCCEEDED(hrc))
-- {
-- hrc = refreshExtPack(pStrName->c_str(), true /*a_fUnusableIsError*/, &pExtPack);
-- if (SUCCEEDED(hrc) && pExtPack)
-- {
-- RTERRINFOSTATIC ErrInfo;
-- RTErrInfoInitStatic(&ErrInfo);
-- pExtPack->callInstalledHook(m->pVirtualBox, &autoLock, &ErrInfo.Core);
-- if (RT_SUCCESS(ErrInfo.Core.rc))
-- LogRel(("ExtPackManager: Successfully installed extension pack '%s'.\n", pStrName->c_str()));
-- else
-- {
-- LogRel(("ExtPackManager: Installated hook for '%s' failed: %Rrc - %s\n",
-- pStrName->c_str(), ErrInfo.Core.rc, ErrInfo.Core.pszMsg));
--
-- /*
-- * Uninstall the extpack if the error indicates that.
-- */
-- if (ErrInfo.Core.rc == VERR_EXTPACK_UNSUPPORTED_HOST_UNINSTALL)
-- runSetUidToRootHelper(a_pstrDisplayInfo,
-- "uninstall",
-- "--base-dir", m->strBaseDir.c_str(),
-- "--name", pStrName->c_str(),
-- "--forced",
-- (const char *)NULL);
-- hrc = setError(E_FAIL, tr("The installation hook failed: %Rrc - %s"),
-- ErrInfo.Core.rc, ErrInfo.Core.pszMsg);
-- }
-- }
-- else if (SUCCEEDED(hrc))
-- hrc = setError(E_FAIL, tr("Installing extension pack '%s' failed under mysterious circumstances"),
-- pStrName->c_str());
-- }
-- else
-- {
-- ErrorInfoKeeper Eik;
-- refreshExtPack(pStrName->c_str(), false /*a_fUnusableIsError*/, NULL);
-- }
-- }
--
-- /*
-- * Do VirtualBoxReady callbacks now for any freshly installed
-- * extension pack (old ones will not be called).
-- */
-- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON)
-- {
-- autoLock.release();
-- callAllVirtualBoxReadyHooks();
-- }
-- }
--
-- return hrc;
--}
--
--/**
-- * Thread wrapper around doUninstall.
-- *
-- * @returns VINF_SUCCESS (ignored)
-- * @param hThread The thread handle (ignored).
-- * @param pvJob The job structure.
-- */
--/*static*/ DECLCALLBACK(int) ExtPackManager::doUninstallThreadProc(RTTHREAD hThread, void *pvJob)
--{
-- PEXTPACKUNINSTALLJOB pJob = (PEXTPACKUNINSTALLJOB)pvJob;
-- HRESULT hrc = pJob->ptrExtPackMgr->doUninstall(&pJob->strName, pJob->fForcedRemoval, &pJob->strDisplayInfo);
-- pJob->ptrProgress->notifyComplete(hrc);
-- delete pJob;
--
-- NOREF(hThread);
-- return VINF_SUCCESS;
--}
--
--/**
-- * Worker for IExtPackManager::Uninstall.
-- *
-- * Called on a worker thread via doUninstallThreadProc.
-- *
-- * @returns COM status code.
-- * @param a_pstrName The name of the extension pack to uninstall.
-- * @param a_fForcedRemoval Whether to be skip and ignore certain bits of
-- * the extpack feedback. To deal with misbehaving
-- * extension pack hooks.
-- * @param a_pstrDisplayInfo Host specific display information hacks.
-- */
--HRESULT ExtPackManager::doUninstall(Utf8Str const *a_pstrName, bool a_fForcedRemoval, Utf8Str const *a_pstrDisplayInfo)
--{
-- Assert(m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON);
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
--
-- /*
-- * Refresh the data we have on the extension pack as it may be made
-- * stale by direct meddling or some other user.
-- */
-- ExtPack *pExtPack;
-- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
-- if (SUCCEEDED(hrc))
-- {
-- if (!pExtPack)
-- {
-- LogRel(("ExtPackManager: Extension pack '%s' is not installed, so nothing to uninstall.\n", a_pstrName->c_str()));
-- hrc = S_OK; /* nothing to uninstall */
-- }
-- else
-- {
-- /*
-- * Call the uninstall hook and unload the main dll.
-- */
-- hrc = pExtPack->callUninstallHookAndClose(m->pVirtualBox, a_fForcedRemoval);
-- if (SUCCEEDED(hrc))
-- {
-- /*
-- * Run the set-uid-to-root binary that performs the
-- * uninstallation. Then refresh the object.
-- *
-- * This refresh is theorically subject to races, but it's of
-- * the don't-do-that variety.
-- */
-- const char *pszForcedOpt = a_fForcedRemoval ? "--forced" : NULL;
-- hrc = runSetUidToRootHelper(a_pstrDisplayInfo,
-- "uninstall",
-- "--base-dir", m->strBaseDir.c_str(),
-- "--name", a_pstrName->c_str(),
-- pszForcedOpt, /* Last as it may be NULL. */
-- (const char *)NULL);
-- if (SUCCEEDED(hrc))
-- {
-- hrc = refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, &pExtPack);
-- if (SUCCEEDED(hrc))
-- {
-- if (!pExtPack)
-- LogRel(("ExtPackManager: Successfully uninstalled extension pack '%s'.\n", a_pstrName->c_str()));
-- else
-- hrc = setError(E_FAIL,
-- tr("Uninstall extension pack '%s' failed under mysterious circumstances"),
-- a_pstrName->c_str());
-- }
-- }
-- else
-- {
-- ErrorInfoKeeper Eik;
-- refreshExtPack(a_pstrName->c_str(), false /*a_fUnusableIsError*/, NULL);
-- }
-- }
-- }
-- }
--
-- /*
-- * Do VirtualBoxReady callbacks now for any freshly installed
-- * extension pack (old ones will not be called).
-- */
-- if (m->enmContext == VBOXEXTPACKCTX_PER_USER_DAEMON)
-- {
-- autoLock.release();
-- callAllVirtualBoxReadyHooks();
-- }
-- }
--
-- return hrc;
--}
--
--
--/**
-- * Calls the pfnVirtualBoxReady hook for all working extension packs.
-- *
-- * @remarks The caller must not hold any locks.
-- */
--void ExtPackManager::callAllVirtualBoxReadyHooks(void)
--{
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (FAILED(hrc))
-- return;
-- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
-- ComPtr<ExtPackManager> ptrSelfRef = this;
--
-- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
-- it != m->llInstalledExtPacks.end();
-- /* advancing below */)
-- {
-- if ((*it)->callVirtualBoxReadyHook(m->pVirtualBox, &autoLock))
-- it = m->llInstalledExtPacks.begin();
-- else
-- it++;
-- }
--}
--
--/**
-- * Calls the pfnConsoleReady hook for all working extension packs.
-- *
-- * @param a_pConsole The console interface.
-- * @remarks The caller must not hold any locks.
-- */
--void ExtPackManager::callAllConsoleReadyHooks(IConsole *a_pConsole)
--{
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (FAILED(hrc))
-- return;
-- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
-- ComPtr<ExtPackManager> ptrSelfRef = this;
--
-- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
-- it != m->llInstalledExtPacks.end();
-- /* advancing below */)
-- {
-- if ((*it)->callConsoleReadyHook(a_pConsole, &autoLock))
-- it = m->llInstalledExtPacks.begin();
-- else
-- it++;
-- }
--}
--
--/**
-- * Calls the pfnVMCreated hook for all working extension packs.
-- *
-- * @param a_pMachine The machine interface of the new VM.
-- */
--void ExtPackManager::callAllVmCreatedHooks(IMachine *a_pMachine)
--{
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (FAILED(hrc))
-- return;
-- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
-- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
-- ExtPackList llExtPacks = m->llInstalledExtPacks;
--
-- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
-- (*it)->callVmCreatedHook(m->pVirtualBox, a_pMachine, &autoLock);
--}
--
--/**
-- * Calls the pfnVMConfigureVMM hook for all working extension packs.
-- *
-- * @returns VBox status code. Stops on the first failure, expecting the caller
-- * to signal this to the caller of the CFGM constructor.
-- * @param a_pConsole The console interface for the VM.
-- * @param a_pVM The VM handle.
-- */
--int ExtPackManager::callAllVmConfigureVmmHooks(IConsole *a_pConsole, PVM a_pVM)
--{
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (FAILED(hrc))
-- return Global::vboxStatusCodeFromCOM(hrc);
-- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
-- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
-- ExtPackList llExtPacks = m->llInstalledExtPacks;
--
-- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
-- {
-- int vrc;
-- (*it)->callVmConfigureVmmHook(a_pConsole, a_pVM, &autoLock, &vrc);
-- if (RT_FAILURE(vrc))
-- return vrc;
-- }
--
-- return VINF_SUCCESS;
--}
--
--/**
-- * Calls the pfnVMPowerOn hook for all working extension packs.
-- *
-- * @returns VBox status code. Stops on the first failure, expecting the caller
-- * to not power on the VM.
-- * @param a_pConsole The console interface for the VM.
-- * @param a_pVM The VM handle.
-- */
--int ExtPackManager::callAllVmPowerOnHooks(IConsole *a_pConsole, PVM a_pVM)
--{
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (FAILED(hrc))
-- return Global::vboxStatusCodeFromCOM(hrc);
-- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
-- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
-- ExtPackList llExtPacks = m->llInstalledExtPacks;
--
-- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
-- {
-- int vrc;
-- (*it)->callVmPowerOnHook(a_pConsole, a_pVM, &autoLock, &vrc);
-- if (RT_FAILURE(vrc))
-- return vrc;
-- }
--
-- return VINF_SUCCESS;
--}
--
--/**
-- * Calls the pfnVMPowerOff hook for all working extension packs.
-- *
-- * @param a_pConsole The console interface for the VM.
-- * @param a_pVM The VM handle. Can be NULL.
-- */
--void ExtPackManager::callAllVmPowerOffHooks(IConsole *a_pConsole, PVM a_pVM)
--{
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (FAILED(hrc))
-- return;
-- AutoWriteLock autoLock(this COMMA_LOCKVAL_SRC_POS);
-- ComPtr<ExtPackManager> ptrSelfRef = this; /* paranoia */
-- ExtPackList llExtPacks = m->llInstalledExtPacks;
--
-- for (ExtPackList::iterator it = llExtPacks.begin(); it != llExtPacks.end(); it++)
-- (*it)->callVmPowerOffHook(a_pConsole, a_pVM, &autoLock);
--}
--
--
--/**
-- * Checks that the specified extension pack contains a VRDE module and that it
-- * is shipshape.
-- *
-- * @returns S_OK if ok, appropriate failure status code with details.
-- * @param a_pstrExtPack The name of the extension pack.
-- */
--HRESULT ExtPackManager::checkVrdeExtPack(Utf8Str const *a_pstrExtPack)
--{
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
--
-- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str());
-- if (pExtPack)
-- hrc = pExtPack->checkVrde();
-- else
-- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str());
-- }
--
-- return hrc;
--}
--
--/**
-- * Gets the full path to the VRDE library of the specified extension pack.
-- *
-- * This will do extacly the same as checkVrdeExtPack and then resolve the
-- * library path.
-- *
-- * @returns S_OK if a path is returned, COM error status and message return if
-- * not.
-- * @param a_pstrExtPack The extension pack.
-- * @param a_pstrVrdeLibrary Where to return the path.
-- */
--int ExtPackManager::getVrdeLibraryPathForExtPack(Utf8Str const *a_pstrExtPack, Utf8Str *a_pstrVrdeLibrary)
--{
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
--
-- ExtPack *pExtPack = findExtPack(a_pstrExtPack->c_str());
-- if (pExtPack)
-- hrc = pExtPack->getVrdpLibraryName(a_pstrVrdeLibrary);
-- else
-- hrc = setError(VBOX_E_OBJECT_NOT_FOUND, tr("No extension pack by the name '%s' was found"), a_pstrExtPack->c_str());
-- }
--
-- return hrc;
--}
--
--/**
-- * Gets the name of the default VRDE extension pack.
-- *
-- * @returns S_OK or some COM error status on red tape failure.
-- * @param a_pstrExtPack Where to return the extension pack name. Returns
-- * empty if no extension pack wishes to be the default
-- * VRDP provider.
-- */
--HRESULT ExtPackManager::getDefaultVrdeExtPack(Utf8Str *a_pstrExtPack)
--{
-- a_pstrExtPack->setNull();
--
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (SUCCEEDED(hrc))
-- {
-- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
--
-- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
-- it != m->llInstalledExtPacks.end();
-- it++)
-- {
-- if ((*it)->wantsToBeDefaultVrde())
-- {
-- *a_pstrExtPack = (*it)->m->Desc.strName;
-- break;
-- }
-- }
-- }
-- return hrc;
--}
--
--/**
-- * Checks if an extension pack is (present and) usable.
-- *
-- * @returns @c true if it is, otherwise @c false.
-- * @param a_pszExtPack The name of the extension pack.
-- */
--bool ExtPackManager::isExtPackUsable(const char *a_pszExtPack)
--{
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (FAILED(hrc))
-- return false;
-- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
--
-- ExtPack *pExtPack = findExtPack(a_pszExtPack);
-- return pExtPack != NULL
-- && pExtPack->m->fUsable;
--}
--
--/**
-- * Dumps all extension packs to the release log.
-- */
--void ExtPackManager::dumpAllToReleaseLog(void)
--{
-- AutoCaller autoCaller(this);
-- HRESULT hrc = autoCaller.rc();
-- if (FAILED(hrc))
-- return;
-- AutoReadLock autoLock(this COMMA_LOCKVAL_SRC_POS);
--
-- LogRel(("Installed Extension Packs:\n"));
-- for (ExtPackList::iterator it = m->llInstalledExtPacks.begin();
-- it != m->llInstalledExtPacks.end();
-- it++)
-- {
-- ExtPack::Data *pExtPackData = (*it)->m;
-- if (pExtPackData)
-- {
-- if (pExtPackData->fUsable)
-- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s)\n",
-- pExtPackData->Desc.strName.c_str(),
-- pExtPackData->Desc.strVersion.c_str(),
-- pExtPackData->Desc.uRevision,
-- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ",
-- pExtPackData->Desc.strEdition.c_str(),
-- pExtPackData->Desc.strVrdeModule.c_str() ));
-- else
-- LogRel((" %s (Version: %s r%u%s%s; VRDE Module: %s unusable because of '%s')\n",
-- pExtPackData->Desc.strName.c_str(),
-- pExtPackData->Desc.strVersion.c_str(),
-- pExtPackData->Desc.uRevision,
-- pExtPackData->Desc.strEdition.isEmpty() ? "" : " ",
-- pExtPackData->Desc.strEdition.c_str(),
-- pExtPackData->Desc.strVrdeModule.c_str(),
-- pExtPackData->strWhyUnusable.c_str() ));
-- }
-- else
-- LogRel((" pExtPackData is NULL\n"));
-- }
--
-- if (!m->llInstalledExtPacks.size())
-- LogRel((" None installed!\n"));
--}
--
--/* vi: set tabstop=4 shiftwidth=4 expandtab: */
---- VirtualBox-4.1.18.orig/src/VBox/Main/src-all/ExtPackUtil.cpp 2012-06-20 10:17:34.000000000 -0300
-+++ /dev/null 2012-07-24 14:48:18.638572110 -0300
-@@ -1,1385 +0,0 @@
--/* $Id: ExtPackUtil.cpp $ */
--/** @file
-- * VirtualBox Main - Extension Pack Utilities and definitions, VBoxC, VBoxSVC, ++.
-- */
--
--/*
-- * Copyright (C) 2010-2012 Oracle Corporation
-- *
-- * This file is part of VirtualBox Open Source Edition (OSE), as
-- * available from http://www.virtualbox.org. This file is free software;
-- * you can redistribute it and/or modify it under the terms of the GNU
-- * General Public License (GPL) as published by the Free Software
-- * Foundation, in version 2 as it comes in the "COPYING" file of the
-- * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
-- * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
-- */
--
--
--/*******************************************************************************
--* Header Files *
--*******************************************************************************/
--#include "../include/ExtPackUtil.h"
--
--#include <iprt/ctype.h>
--#include <iprt/dir.h>
--#include <iprt/file.h>
--#include <iprt/manifest.h>
--#include <iprt/param.h>
--#include <iprt/path.h>
--#include <iprt/sha.h>
--#include <iprt/string.h>
--#include <iprt/vfs.h>
--#include <iprt/tar.h>
--#include <iprt/zip.h>
--#include <iprt/cpp/xml.h>
--
--#include <VBox/log.h>
--
--
--/**
-- * Worker for VBoxExtPackLoadDesc that loads the plug-in descriptors.
-- *
-- * @returns Same as VBoxExtPackLoadDesc.
-- * @param pVBoxExtPackElm
-- * @param pcPlugIns Where to return the number of plug-ins in the
-- * array.
-- * @param paPlugIns Where to return the plug-in descriptor array.
-- * (RTMemFree it even on failure)
-- */
--static RTCString *
--vboxExtPackLoadPlugInDescs(const xml::ElementNode *pVBoxExtPackElm,
-- uint32_t *pcPlugIns, PVBOXEXTPACKPLUGINDESC *paPlugIns)
--{
-- *pcPlugIns = 0;
-- *paPlugIns = NULL;
--
-- /** @todo plug-ins */
-- NOREF(pVBoxExtPackElm);
--
-- return NULL;
--}
--
--/**
-- * Clears the extension pack descriptor.
-- *
-- * @param a_pExtPackDesc The descriptor to clear.
-- */
--static void vboxExtPackClearDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
--{
-- a_pExtPackDesc->strName.setNull();
-- a_pExtPackDesc->strDescription.setNull();
-- a_pExtPackDesc->strVersion.setNull();
-- a_pExtPackDesc->strEdition.setNull();
-- a_pExtPackDesc->uRevision = 0;
-- a_pExtPackDesc->strMainModule.setNull();
-- a_pExtPackDesc->strVrdeModule.setNull();
-- a_pExtPackDesc->cPlugIns = 0;
-- a_pExtPackDesc->paPlugIns = NULL;
-- a_pExtPackDesc->fShowLicense = false;
--}
--
--/**
-- * Initializes an extension pack descriptor so that it's safe to call free on
-- * it whatever happens later on.
-- *
-- * @param a_pExtPackDesc The descirptor to initialize.
-- */
--void VBoxExtPackInitDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
--{
-- vboxExtPackClearDesc(a_pExtPackDesc);
--}
--
--
--/**
-- * Load the extension pack descriptor from an XML document.
-- *
-- * @returns NULL on success, pointer to an error message on failure (caller
-- * deletes it).
-- * @param a_pDoc Pointer to the the XML document.
-- * @param a_pExtPackDesc Where to store the extension pack descriptor.
-- */
--static RTCString *vboxExtPackLoadDescFromDoc(xml::Document *a_pDoc, PVBOXEXTPACKDESC a_pExtPackDesc)
--{
-- /*
-- * Get the main element and check its version.
-- */
-- const xml::ElementNode *pVBoxExtPackElm = a_pDoc->getRootElement();
-- if ( !pVBoxExtPackElm
-- || strcmp(pVBoxExtPackElm->getName(), "VirtualBoxExtensionPack") != 0)
-- return new RTCString("No VirtualBoxExtensionPack element");
--
-- RTCString strFormatVersion;
-- if (!pVBoxExtPackElm->getAttributeValue("version", strFormatVersion))
-- return new RTCString("Missing format version");
-- if (!strFormatVersion.equals("1.0"))
-- return &(new RTCString("Unsupported format version: "))->append(strFormatVersion);
--
-- /*
-- * Read and validate mandatory bits.
-- */
-- const xml::ElementNode *pNameElm = pVBoxExtPackElm->findChildElement("Name");
-- if (!pNameElm)
-- return new RTCString("The 'Name' element is missing");
-- const char *pszName = pNameElm->getValue();
-- if (!VBoxExtPackIsValidName(pszName))
-- return &(new RTCString("Invalid name: "))->append(pszName);
--
-- const xml::ElementNode *pDescElm = pVBoxExtPackElm->findChildElement("Description");
-- if (!pDescElm)
-- return new RTCString("The 'Description' element is missing");
-- const char *pszDesc = pDescElm->getValue();
-- if (!pszDesc || *pszDesc == '\0')
-- return new RTCString("The 'Description' element is empty");
-- if (strpbrk(pszDesc, "\n\r\t\v\b") != NULL)
-- return new RTCString("The 'Description' must not contain control characters");
--
-- const xml::ElementNode *pVersionElm = pVBoxExtPackElm->findChildElement("Version");
-- if (!pVersionElm)
-- return new RTCString("The 'Version' element is missing");
-- const char *pszVersion = pVersionElm->getValue();
-- if (!pszVersion || *pszVersion == '\0')
-- return new RTCString("The 'Version' element is empty");
-- if (!VBoxExtPackIsValidVersionString(pszVersion))
-- return &(new RTCString("Invalid version string: "))->append(pszVersion);
--
-- uint32_t uRevision;
-- if (!pVersionElm->getAttributeValue("revision", uRevision))
-- uRevision = 0;
--
-- const char *pszEdition;
-- if (!pVersionElm->getAttributeValue("edition", pszEdition))
-- pszEdition = "";
-- if (!VBoxExtPackIsValidEditionString(pszEdition))
-- return &(new RTCString("Invalid edition string: "))->append(pszEdition);
--
-- const xml::ElementNode *pMainModuleElm = pVBoxExtPackElm->findChildElement("MainModule");
-- if (!pMainModuleElm)
-- return new RTCString("The 'MainModule' element is missing");
-- const char *pszMainModule = pMainModuleElm->getValue();
-- if (!pszMainModule || *pszMainModule == '\0')
-- return new RTCString("The 'MainModule' element is empty");
-- if (!VBoxExtPackIsValidModuleString(pszMainModule))
-- return &(new RTCString("Invalid main module string: "))->append(pszMainModule);
--
-- /*
-- * The VRDE module, optional.
-- * Accept both none and empty as tokens of no VRDE module.
-- */
-- const char *pszVrdeModule = NULL;
-- const xml::ElementNode *pVrdeModuleElm = pVBoxExtPackElm->findChildElement("VRDEModule");
-- if (pVrdeModuleElm)
-- {
-- pszVrdeModule = pVrdeModuleElm->getValue();
-- if (!pszVrdeModule || *pszVrdeModule == '\0')
-- pszVrdeModule = NULL;
-- else if (!VBoxExtPackIsValidModuleString(pszVrdeModule))
-- return &(new RTCString("Invalid VRDE module string: "))->append(pszVrdeModule);
-- }
--
-- /*
-- * Whether to show the license, optional. (presense is enough here)
-- */
-- const xml::ElementNode *pShowLicenseElm = pVBoxExtPackElm->findChildElement("ShowLicense");
-- bool fShowLicense = pShowLicenseElm != NULL;
--
-- /*
-- * Parse plug-in descriptions (last because of the manual memory management).
-- */
-- uint32_t cPlugIns = 0;
-- PVBOXEXTPACKPLUGINDESC paPlugIns = NULL;
-- RTCString *pstrRet = vboxExtPackLoadPlugInDescs(pVBoxExtPackElm, &cPlugIns, &paPlugIns);
-- if (pstrRet)
-- {
-- RTMemFree(paPlugIns);
-- return pstrRet;
-- }
--
-- /*
-- * Everything seems fine, fill in the return values and return successfully.
-- */
-- a_pExtPackDesc->strName = pszName;
-- a_pExtPackDesc->strDescription = pszDesc;
-- a_pExtPackDesc->strVersion = pszVersion;
-- a_pExtPackDesc->strEdition = pszEdition;
-- a_pExtPackDesc->uRevision = uRevision;
-- a_pExtPackDesc->strMainModule = pszMainModule;
-- a_pExtPackDesc->strVrdeModule = pszVrdeModule;
-- a_pExtPackDesc->cPlugIns = cPlugIns;
-- a_pExtPackDesc->paPlugIns = paPlugIns;
-- a_pExtPackDesc->fShowLicense = fShowLicense;
--
-- return NULL;
--}
--
--/**
-- * Reads the extension pack descriptor.
-- *
-- * @returns NULL on success, pointer to an error message on failure (caller
-- * deletes it).
-- * @param a_pszDir The directory containing the description file.
-- * @param a_pExtPackDesc Where to store the extension pack descriptor.
-- * @param a_pObjInfo Where to store the object info for the file (unix
-- * attribs). Optional.
-- */
--RTCString *VBoxExtPackLoadDesc(const char *a_pszDir, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo)
--{
-- vboxExtPackClearDesc(a_pExtPackDesc);
--
-- /*
-- * Validate, open and parse the XML file.
-- */
-- char szFilePath[RTPATH_MAX];
-- int vrc = RTPathJoin(szFilePath, sizeof(szFilePath), a_pszDir, VBOX_EXTPACK_DESCRIPTION_NAME);
-- if (RT_FAILURE(vrc))
-- return new RTCString("RTPathJoin failed with %Rrc", vrc);
--
-- RTFSOBJINFO ObjInfo;
-- vrc = RTPathQueryInfoEx(szFilePath, &ObjInfo, RTFSOBJATTRADD_UNIX, RTPATH_F_ON_LINK);
-- if (RT_FAILURE(vrc))
-- return &(new RTCString())->printf("RTPathQueryInfoEx failed with %Rrc", vrc);
-- if (a_pObjInfo)
-- *a_pObjInfo = ObjInfo;
-- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
-- {
-- if (RTFS_IS_SYMLINK(ObjInfo.Attr.fMode))
-- return new RTCString("The XML file is symlinked, that is not allowed");
-- return &(new RTCString)->printf("The XML file is not a file (fMode=%#x)", ObjInfo.Attr.fMode);
-- }
--
-- xml::Document Doc;
-- {
-- xml::XmlFileParser Parser;
-- try
-- {
-- Parser.read(szFilePath, Doc);
-- }
-- catch (xml::XmlError Err)
-- {
-- return new RTCString(Err.what());
-- }
-- }
--
-- /*
-- * Hand the xml doc over to the common code.
-- */
-- return vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc);
--}
--
--/**
-- * Reads the extension pack descriptor.
-- *
-- * @returns NULL on success, pointer to an error message on failure (caller
-- * deletes it).
-- * @param a_pszDir The directory containing the description file.
-- * @param a_pExtPackDesc Where to store the extension pack descriptor.
-- * @param a_pObjInfo Where to store the object info for the file (unix
-- * attribs). Optional.
-- */
--RTCString *VBoxExtPackLoadDescFromVfsFile(RTVFSFILE hVfsFile, PVBOXEXTPACKDESC a_pExtPackDesc, PRTFSOBJINFO a_pObjInfo)
--{
-- vboxExtPackClearDesc(a_pExtPackDesc);
--
-- /*
-- * Query the object info.
-- */
-- RTFSOBJINFO ObjInfo;
-- int rc = RTVfsFileQueryInfo(hVfsFile, &ObjInfo, RTFSOBJATTRADD_UNIX);
-- if (RT_FAILURE(rc))
-- return &(new RTCString)->printf("RTVfsFileQueryInfo failed: %Rrc", rc);
-- if (a_pObjInfo)
-- *a_pObjInfo = ObjInfo;
--
-- /*
-- * The simple approach, read the whole thing into memory and pass this to
-- * the XML parser.
-- */
--
-- /* Check the file size. */
-- if (ObjInfo.cbObject > _1M || ObjInfo.cbObject < 0)
-- return &(new RTCString)->printf("The XML file is too large (%'RU64 bytes)", ObjInfo.cbObject);
-- size_t const cbFile = (size_t)ObjInfo.cbObject;
--
-- /* Rewind to the start of the file. */
-- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL);
-- if (RT_FAILURE(rc))
-- return &(new RTCString)->printf("RTVfsFileSeek(,0,BEGIN) failed: %Rrc", rc);
--
-- /* Allocate memory and read the file content into it. */
-- void *pvFile = RTMemTmpAlloc(cbFile);
-- if (!pvFile)
-- return &(new RTCString)->printf("RTMemTmpAlloc(%zu) failed", cbFile);
--
-- RTCString *pstrErr = NULL;
-- rc = RTVfsFileRead(hVfsFile, pvFile, cbFile, NULL);
-- if (RT_FAILURE(rc))
-- pstrErr = &(new RTCString)->printf("RTVfsFileRead failed: %Rrc", rc);
--
-- /*
-- * Parse the file.
-- */
-- xml::Document Doc;
-- if (RT_SUCCESS(rc))
-- {
-- xml::XmlMemParser Parser;
-- RTCString strFileName = VBOX_EXTPACK_DESCRIPTION_NAME;
-- try
-- {
-- Parser.read(pvFile, cbFile, strFileName, Doc);
-- }
-- catch (xml::XmlError Err)
-- {
-- pstrErr = new RTCString(Err.what());
-- rc = VERR_PARSE_ERROR;
-- }
-- }
-- RTMemTmpFree(pvFile);
--
-- /*
-- * Hand the xml doc over to the common code.
-- */
-- if (RT_SUCCESS(rc))
-- pstrErr = vboxExtPackLoadDescFromDoc(&Doc, a_pExtPackDesc);
--
-- return pstrErr;
--}
--
--/**
-- * Frees all resources associated with a extension pack descriptor.
-- *
-- * @param a_pExtPackDesc The extension pack descriptor which members
-- * should be freed.
-- */
--void VBoxExtPackFreeDesc(PVBOXEXTPACKDESC a_pExtPackDesc)
--{
-- if (!a_pExtPackDesc)
-- return;
--
-- a_pExtPackDesc->strName.setNull();
-- a_pExtPackDesc->strDescription.setNull();
-- a_pExtPackDesc->strVersion.setNull();
-- a_pExtPackDesc->strEdition.setNull();
-- a_pExtPackDesc->uRevision = 0;
-- a_pExtPackDesc->strMainModule.setNull();
-- a_pExtPackDesc->strVrdeModule.setNull();
-- a_pExtPackDesc->cPlugIns = 0;
-- RTMemFree(a_pExtPackDesc->paPlugIns);
-- a_pExtPackDesc->paPlugIns = NULL;
-- a_pExtPackDesc->fShowLicense = false;
--}
--
--/**
-- * Extract the extension pack name from the tarball path.
-- *
-- * @returns String containing the name on success, the caller must delete it.
-- * NULL if no valid name was found or if we ran out of memory.
-- * @param pszTarball The path to the tarball.
-- */
--RTCString *VBoxExtPackExtractNameFromTarballPath(const char *pszTarball)
--{
-- /*
-- * Skip ahead to the filename part and count the number of characters
-- * that matches the criteria for a mangled extension pack name.
-- */
-- const char *pszSrc = RTPathFilename(pszTarball);
-- if (!pszSrc)
-- return NULL;
--
-- size_t off = 0;
-- while (RT_C_IS_ALNUM(pszSrc[off]) || pszSrc[off] == '_')
-- off++;
--
-- /*
-- * Check min and max name limits.
-- */
-- if ( off > VBOX_EXTPACK_NAME_MAX_LEN
-- || off < VBOX_EXTPACK_NAME_MIN_LEN)
-- return NULL;
--
-- /*
-- * Return the unmangled name.
-- */
-- return VBoxExtPackUnmangleName(pszSrc, off);
--}
--
--/**
-- * Validates the extension pack name.
-- *
-- * @returns true if valid, false if not.
-- * @param pszName The name to validate.
-- * @sa VBoxExtPackExtractNameFromTarballPath
-- */
--bool VBoxExtPackIsValidName(const char *pszName)
--{
-- if (!pszName)
-- return false;
--
-- /*
-- * Check the characters making up the name, only english alphabet
-- * characters, decimal digits and spaces are allowed.
-- */
-- size_t off = 0;
-- while (pszName[off])
-- {
-- if (!RT_C_IS_ALNUM(pszName[off]) && pszName[off] != ' ')
-- return false;
-- off++;
-- }
--
-- /*
-- * Check min and max name limits.
-- */
-- if ( off > VBOX_EXTPACK_NAME_MAX_LEN
-- || off < VBOX_EXTPACK_NAME_MIN_LEN)
-- return false;
--
-- return true;
--}
--
--/**
-- * Checks if an alledged manged extension pack name.
-- *
-- * @returns true if valid, false if not.
-- * @param pszMangledName The mangled name to validate.
-- * @param cchMax The max number of chars to test.
-- * @sa VBoxExtPackMangleName
-- */
--bool VBoxExtPackIsValidMangledName(const char *pszMangledName, size_t cchMax /*= RTSTR_MAX*/)
--{
-- if (!pszMangledName)
-- return false;
--
-- /*
-- * Check the characters making up the name, only english alphabet
-- * characters, decimal digits and underscores (=space) are allowed.
-- */
-- size_t off = 0;
-- while (off < cchMax && pszMangledName[off])
-- {
-- if (!RT_C_IS_ALNUM(pszMangledName[off]) && pszMangledName[off] != '_')
-- return false;
-- off++;
-- }
--
-- /*
-- * Check min and max name limits.
-- */
-- if ( off > VBOX_EXTPACK_NAME_MAX_LEN
-- || off < VBOX_EXTPACK_NAME_MIN_LEN)
-- return false;
--
-- return true;
--}
--
--/**
-- * Mangle an extension pack name so it can be used by a directory or file name.
-- *
-- * @returns String containing the mangled name on success, the caller must
-- * delete it. NULL on failure.
-- * @param pszName The unmangled name.
-- * @sa VBoxExtPackUnmangleName, VBoxExtPackIsValidMangledName
-- */
--RTCString *VBoxExtPackMangleName(const char *pszName)
--{
-- AssertReturn(VBoxExtPackIsValidName(pszName), NULL);
--
-- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1];
-- size_t off = 0;
-- char ch;
-- while ((ch = pszName[off]) != '\0')
-- {
-- if (ch == ' ')
-- ch = '_';
-- szTmp[off++] = ch;
-- }
-- szTmp[off] = '\0';
-- Assert(VBoxExtPackIsValidMangledName(szTmp));
--
-- return new RTCString(szTmp, off);
--}
--
--/**
-- * Unmangle an extension pack name (reverses VBoxExtPackMangleName).
-- *
-- * @returns String containing the mangled name on success, the caller must
-- * delete it. NULL on failure.
-- * @param pszMangledName The mangled name.
-- * @param cchMax The max name length. RTSTR_MAX is fine.
-- * @sa VBoxExtPackMangleName, VBoxExtPackIsValidMangledName
-- */
--RTCString *VBoxExtPackUnmangleName(const char *pszMangledName, size_t cchMax)
--{
-- AssertReturn(VBoxExtPackIsValidMangledName(pszMangledName, cchMax), NULL);
--
-- char szTmp[VBOX_EXTPACK_NAME_MAX_LEN + 1];
-- size_t off = 0;
-- char ch;
-- while ( off < cchMax
-- && (ch = pszMangledName[off]) != '\0')
-- {
-- if (ch == '_')
-- ch = ' ';
-- else
-- AssertReturn(RT_C_IS_ALNUM(ch) || ch == ' ', NULL);
-- szTmp[off++] = ch;
-- }
-- szTmp[off] = '\0';
-- AssertReturn(VBoxExtPackIsValidName(szTmp), NULL);
--
-- return new RTCString(szTmp, off);
--}
--
--/**
-- * Constructs the extension pack directory path.
-- *
-- * A combination of RTPathJoin and VBoxExtPackMangleName.
-- *
-- * @returns IPRT status code like RTPathJoin.
-- * @param pszExtPackDir Where to return the directory path.
-- * @param cbExtPackDir The size of the return buffer.
-- * @param pszParentDir The parent directory (".../Extensions").
-- * @param pszName The extension pack name, unmangled.
-- */
--int VBoxExtPackCalcDir(char *pszExtPackDir, size_t cbExtPackDir, const char *pszParentDir, const char *pszName)
--{
-- AssertReturn(VBoxExtPackIsValidName(pszName), VERR_INTERNAL_ERROR_5);
--
-- RTCString *pstrMangledName = VBoxExtPackMangleName(pszName);
-- if (!pstrMangledName)
-- return VERR_INTERNAL_ERROR_4;
--
-- int vrc = RTPathJoin(pszExtPackDir, cbExtPackDir, pszParentDir, pstrMangledName->c_str());
-- delete pstrMangledName;
--
-- return vrc;
--}
--
--
--/**
-- * Validates the extension pack version string.
-- *
-- * @returns true if valid, false if not.
-- * @param pszVersion The version string to validate.
-- */
--bool VBoxExtPackIsValidVersionString(const char *pszVersion)
--{
-- if (!pszVersion || *pszVersion == '\0')
-- return false;
--
-- /* 1.x.y.z... */
-- for (;;)
-- {
-- if (!RT_C_IS_DIGIT(*pszVersion))
-- return false;
-- do
-- pszVersion++;
-- while (RT_C_IS_DIGIT(*pszVersion));
-- if (*pszVersion != '.')
-- break;
-- pszVersion++;
-- }
--
-- /* upper case string + numbers indicating the build type */
-- if (*pszVersion == '-' || *pszVersion == '_')
-- {
-- /** @todo Should probably restrict this to known build types (alpha,
-- * beta, rc, ++). */
-- do
-- pszVersion++;
-- while ( RT_C_IS_DIGIT(*pszVersion)
-- || RT_C_IS_UPPER(*pszVersion)
-- || *pszVersion == '-'
-- || *pszVersion == '_');
-- }
--
-- return *pszVersion == '\0';
--}
--
--/**
-- * Validates the extension pack edition string.
-- *
-- * @returns true if valid, false if not.
-- * @param pszEdition The edition string to validate.
-- */
--bool VBoxExtPackIsValidEditionString(const char *pszEdition)
--{
-- if (*pszEdition)
-- {
-- if (!RT_C_IS_UPPER(*pszEdition))
-- return false;
--
-- do
-- pszEdition++;
-- while ( RT_C_IS_UPPER(*pszEdition)
-- || RT_C_IS_DIGIT(*pszEdition)
-- || *pszEdition == '-'
-- || *pszEdition == '_');
-- }
-- return *pszEdition == '\0';
--}
--
--/**
-- * Validates an extension pack module string.
-- *
-- * @returns true if valid, false if not.
-- * @param pszModule The module string to validate.
-- */
--bool VBoxExtPackIsValidModuleString(const char *pszModule)
--{
-- if (!pszModule || *pszModule == '\0')
-- return false;
--
-- /* Restricted charset, no extensions (dots). */
-- while ( RT_C_IS_ALNUM(*pszModule)
-- || *pszModule == '-'
-- || *pszModule == '_')
-- pszModule++;
--
-- return *pszModule == '\0';
--}
--
--/**
-- * RTStrPrintfv wrapper.
-- *
-- * @returns @a rc
-- * @param rc The status code to return.
-- * @param pszError The error buffer.
-- * @param cbError The size of the buffer.
-- * @param pszFormat The error message format string.
-- * @param ... Format arguments.
-- */
--static int vboxExtPackReturnError(int rc, char *pszError, size_t cbError, const char *pszFormat, ...)
--{
-- va_list va;
-- va_start(va, pszFormat);
-- RTStrPrintfV(pszError, cbError, pszFormat, va);
-- va_end(va);
-- return rc;
--}
--
--/**
-- * RTStrPrintfv wrapper.
-- *
-- * @param pszError The error buffer.
-- * @param cbError The size of the buffer.
-- * @param pszFormat The error message format string.
-- * @param ... Format arguments.
-- */
--static void vboxExtPackSetError(char *pszError, size_t cbError, const char *pszFormat, ...)
--{
-- va_list va;
-- va_start(va, pszFormat);
-- RTStrPrintfV(pszError, cbError, pszFormat, va);
-- va_end(va);
--}
--
--/**
-- * Verifies the manifest and its signature.
-- *
-- * @returns VBox status code, failures with message.
-- * @param hManifestFile The xml from the extension pack.
-- * @param pszExtPackName The expected extension pack name. This can be
-- * NULL, in which we don't have any expectations.
-- * @param pszError Where to store an error message on failure.
-- * @param cbError The size of the buffer @a pszError points to.
-- */
--static int vboxExtPackVerifyXml(RTVFSFILE hXmlFile, const char *pszExtPackName, char *pszError, size_t cbError)
--{
-- /*
-- * Load the XML.
-- */
-- VBOXEXTPACKDESC ExtPackDesc;
-- RTCString *pstrErr = VBoxExtPackLoadDescFromVfsFile(hXmlFile, &ExtPackDesc, NULL);
-- if (pstrErr)
-- {
-- RTStrCopy(pszError, cbError, pstrErr->c_str());
-- delete pstrErr;
-- return VERR_PARSE_ERROR;
-- }
--
-- /*
-- * Check the name.
-- */
-- /** @todo drop this restriction after the old install interface is
-- * dropped. */
-- int rc = VINF_SUCCESS;
-- if ( pszExtPackName
-- && !ExtPackDesc.strName.equalsIgnoreCase(pszExtPackName))
-- rc = vboxExtPackReturnError(VERR_NOT_EQUAL, pszError, cbError,
-- "The name of the downloaded file and the name stored inside the extension pack does not match"
-- " (xml='%s' file='%s')", ExtPackDesc.strName.c_str(), pszExtPackName);
-- return rc;
--}
--
--/**
-- * Verifies the manifest and its signature.
-- *
-- * @returns VBox status code, failures with message.
-- * @param hOurManifest The manifest we compiled.
-- * @param hManifestFile The manifest file in the extension pack.
-- * @param hSignatureFile The manifest signature file.
-- * @param pszError Where to store an error message on failure.
-- * @param cbError The size of the buffer @a pszError points to.
-- */
--static int vboxExtPackVerifyManifestAndSignature(RTMANIFEST hOurManifest, RTVFSFILE hManifestFile, RTVFSFILE hSignatureFile,
-- char *pszError, size_t cbError)
--{
-- /*
-- * Read the manifest from the extension pack.
-- */
-- int rc = RTVfsFileSeek(hManifestFile, 0, RTFILE_SEEK_BEGIN, NULL);
-- if (RT_FAILURE(rc))
-- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsFileSeek failed: %Rrc", rc);
--
-- RTMANIFEST hTheirManifest;
-- rc = RTManifestCreate(0 /*fFlags*/, &hTheirManifest);
-- if (RT_FAILURE(rc))
-- return vboxExtPackReturnError(rc, pszError, cbError, "RTManifestCreate failed: %Rrc", rc);
--
-- RTVFSIOSTREAM hVfsIos = RTVfsFileToIoStream(hManifestFile);
-- rc = RTManifestReadStandard(hTheirManifest, hVfsIos);
-- RTVfsIoStrmRelease(hVfsIos);
-- if (RT_SUCCESS(rc))
-- {
-- /*
-- * Compare the manifests.
-- */
-- static const char *s_apszIgnoreEntries[] =
-- {
-- VBOX_EXTPACK_MANIFEST_NAME,
-- VBOX_EXTPACK_SIGNATURE_NAME,
-- "./" VBOX_EXTPACK_MANIFEST_NAME,
-- "./" VBOX_EXTPACK_SIGNATURE_NAME,
-- NULL
-- };
-- char szError[RTPATH_MAX];
-- rc = RTManifestEqualsEx(hOurManifest, hTheirManifest, &s_apszIgnoreEntries[0], NULL,
-- RTMANIFEST_EQUALS_IGN_MISSING_ATTRS /*fFlags*/,
-- szError, sizeof(szError));
-- if (RT_SUCCESS(rc))
-- {
-- /*
-- * Validate the manifest file signature.
-- */
-- /** @todo implement signature stuff */
-- NOREF(hSignatureFile);
--
-- }
-- else if (rc == VERR_NOT_EQUAL && szError[0])
-- vboxExtPackSetError(pszError, cbError, "Manifest mismatch: %s", szError);
-- else
-- vboxExtPackSetError(pszError, cbError, "RTManifestEqualsEx failed: %Rrc", rc);
--#if 0
-- RTVFSIOSTREAM hVfsIosStdOut = NIL_RTVFSIOSTREAM;
-- RTVfsIoStrmFromStdHandle(RTHANDLESTD_OUTPUT, RTFILE_O_WRITE, true, &hVfsIosStdOut);
-- RTVfsIoStrmWrite(hVfsIosStdOut, "Our:\n", sizeof("Our:\n") - 1, true, NULL);
-- RTManifestWriteStandard(hOurManifest, hVfsIosStdOut);
-- RTVfsIoStrmWrite(hVfsIosStdOut, "Their:\n", sizeof("Their:\n") - 1, true, NULL);
-- RTManifestWriteStandard(hTheirManifest, hVfsIosStdOut);
--#endif
-- }
-- else
-- vboxExtPackSetError(pszError, cbError, "Error parsing '%s': %Rrc", VBOX_EXTPACK_MANIFEST_NAME, rc);
--
-- RTManifestRelease(hTheirManifest);
-- return rc;
--}
--
--
--/**
-- * Verifies the file digest (if specified) and returns the SHA-256 of the file.
-- *
-- * @returns
-- * @param hFileManifest Manifest containing a SHA-256 digest of the file
-- * that was calculated as the file was processed.
-- * @param pszFileDigest SHA-256 digest of the file.
-- * @param pStrDigest Where to return the SHA-256 digest. Optional.
-- * @param pszError Where to write an error message on failure.
-- * @param cbError The size of the @a pszError buffer.
-- */
--static int vboxExtPackVerifyFileDigest(RTMANIFEST hFileManifest, const char *pszFileDigest,
-- RTCString *pStrDigest, char *pszError, size_t cbError)
--{
-- /*
-- * Extract the SHA-256 entry for the extpack file.
-- */
-- char szCalculatedDigest[RTSHA256_DIGEST_LEN + 1];
-- int rc = RTManifestEntryQueryAttr(hFileManifest, "extpack", NULL /*no name*/, RTMANIFEST_ATTR_SHA256,
-- szCalculatedDigest, sizeof(szCalculatedDigest), NULL);
-- if (RT_SUCCESS(rc))
-- {
-- /*
-- * Convert the two strings to binary form before comparing.
-- * We convert the calculated hash even if we don't have anything to
-- * compare with, just to validate it.
-- */
-- uint8_t abCalculatedHash[RTSHA256_HASH_SIZE];
-- rc = RTSha256FromString(szCalculatedDigest, abCalculatedHash);
-- if (RT_SUCCESS(rc))
-- {
-- if ( pszFileDigest
-- && *pszFileDigest != '\0')
-- {
-- uint8_t abFileHash[RTSHA256_HASH_SIZE];
-- rc = RTSha256FromString(pszFileDigest, abFileHash);
-- if (RT_SUCCESS(rc))
-- {
-- if (memcmp(abFileHash, abCalculatedHash, sizeof(abFileHash)))
-- {
-- vboxExtPackSetError(pszError, cbError, "The extension pack file has changed (SHA-256 mismatch)");
-- rc = VERR_NOT_EQUAL;
-- }
-- }
-- else
-- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc);
-- }
--
-- /*
-- * Set the output hash on success.
-- */
-- if (pStrDigest && RT_SUCCESS(rc))
-- {
-- try
-- {
-- *pStrDigest = szCalculatedDigest;
-- }
-- catch (std::bad_alloc)
-- {
-- rc = VERR_NO_MEMORY;
-- }
-- }
-- }
-- else
-- vboxExtPackSetError(pszError, cbError, "Bad SHA-256 '%s': %Rrc", szCalculatedDigest, rc);
-- }
-- else
-- vboxExtPackSetError(pszError, cbError, "RTManifestEntryGetAttr: %Rrc", rc);
-- return rc;
--}
--
--
--
--/**
-- * Validates a standard file.
-- *
-- * Generally all files are
-- *
-- * @returns VBox status code, failure message in @a pszError.
-- * @param pszAdjName The adjusted member name.
-- * @param enmType The VFS object type.
-- * @param phVfsObj The pointer to the VFS object handle variable.
-- * This is both input and output.
-- * @param phVfsFile Where to store the handle to the memorized
-- * file. This is NULL for license files.
-- * @param pszError Where to write an error message on failure.
-- * @param cbError The size of the @a pszError buffer.
-- */
--static int VBoxExtPackValidateStandardFile(const char *pszAdjName, RTVFSOBJTYPE enmType,
-- PRTVFSOBJ phVfsObj, PRTVFSFILE phVfsFile, char *pszError, size_t cbError)
--{
-- int rc;
--
-- /*
-- * Make sure it's a file and that it isn't too large.
-- */
-- if (phVfsFile && *phVfsFile != NIL_RTVFSFILE)
-- rc = vboxExtPackReturnError(VERR_DUPLICATE, pszError, cbError,
-- "There can only be one '%s'", pszAdjName);
-- else if (enmType != RTVFSOBJTYPE_IO_STREAM && enmType != RTVFSOBJTYPE_FILE)
-- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError,
-- "Standard member '%s' is not a file", pszAdjName);
-- else
-- {
-- RTFSOBJINFO ObjInfo;
-- rc = RTVfsObjQueryInfo(*phVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING);
-- if (RT_SUCCESS(rc))
-- {
-- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
-- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError,
-- "Standard member '%s' is not a file", pszAdjName);
-- else if (ObjInfo.cbObject >= _1M)
-- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError,
-- "Standard member '%s' is too large: %'RU64 bytes (max 1 MB)",
-- pszAdjName, (uint64_t)ObjInfo.cbObject);
-- else
-- {
-- /*
-- * Make an in memory copy of the stream and check that the file
-- * is UTF-8 clean.
-- */
-- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(*phVfsObj);
-- RTVFSFILE hVfsFile;
-- rc = RTVfsMemorizeIoStreamAsFile(hVfsIos, RTFILE_O_READ, &hVfsFile);
-- if (RT_SUCCESS(rc))
-- {
-- rc = RTVfsIoStrmValidateUtf8Encoding(hVfsIos,
-- RTVFS_VALIDATE_UTF8_BY_RTC_3629 | RTVFS_VALIDATE_UTF8_NO_NULL,
-- NULL);
-- if (RT_SUCCESS(rc))
-- {
-- /*
-- * Replace *phVfsObj with the memorized file.
-- */
-- rc = RTVfsFileSeek(hVfsFile, 0, RTFILE_SEEK_BEGIN, NULL);
-- if (RT_SUCCESS(rc))
-- {
-- RTVfsObjRelease(*phVfsObj);
-- *phVfsObj = RTVfsObjFromFile(hVfsFile);
-- }
-- else
-- vboxExtPackSetError(pszError, cbError, "RTVfsFileSeek failed on '%s': %Rrc", pszAdjName, rc);
-- }
--
-- if (phVfsFile && RT_SUCCESS(rc))
-- *phVfsFile = hVfsFile;
-- else
-- RTVfsFileRelease(hVfsFile);
-- }
-- else
-- vboxExtPackSetError(pszError, cbError, "RTVfsMemorizeIoStreamAsFile failed on '%s': %Rrc", pszAdjName, rc);
-- RTVfsIoStrmRelease(hVfsIos);
-- }
-- }
-- else
-- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszAdjName, rc);
-- }
-- return rc;
--}
--
--
--/**
-- * Validates a name in an extension pack.
-- *
-- * We restrict the charset to try make sure the extension pack can be unpacked
-- * on all file systems.
-- *
-- * @returns VBox status code, failures with message.
-- * @param pszName The name to validate.
-- * @param pszError Where to store an error message on failure.
-- * @param cbError The size of the buffer @a pszError points to.
-- */
--static int vboxExtPackValidateMemberName(const char *pszName, char *pszError, size_t cbError)
--{
-- if (RTPathStartsWithRoot(pszName))
-- return vboxExtPackReturnError(VERR_PATH_IS_NOT_RELATIVE, pszError, cbError, "'%s': starts with root spec", pszName);
--
-- const char *pszErr = NULL;
-- const char *psz = pszName;
-- int ch;
-- while ((ch = *psz) != '\0')
-- {
-- /* Character set restrictions. */
-- if (ch < 0 || ch >= 128)
-- {
-- pszErr = "Only 7-bit ASCII allowed";
-- break;
-- }
-- if (ch <= 31 || ch == 127)
-- {
-- pszErr = "No control characters are not allowed";
-- break;
-- }
-- if (ch == '\\')
-- {
-- pszErr = "Only backward slashes are not allowed";
-- break;
-- }
-- if (strchr("'\":;*?|[]<>(){}", ch))
-- {
-- pszErr = "The characters ', \", :, ;, *, ?, |, [, ], <, >, (, ), { and } are not allowed";
-- break;
-- }
--
-- /* Take the simple way out and ban all ".." sequences. */
-- if ( ch == '.'
-- && psz[1] == '.')
-- {
-- pszErr = "Double dot sequence are not allowed";
-- break;
-- }
--
-- /* Keep the tree shallow or the hardening checks will fail. */
-- if (psz - pszName > VBOX_EXTPACK_MAX_MEMBER_NAME_LENGTH)
-- {
-- pszErr = "Too long";
-- break;
-- }
--
-- /* advance */
-- psz++;
-- }
--
-- if (pszErr)
-- return vboxExtPackReturnError(VERR_INVALID_NAME, pszError, cbError,
-- "Bad member name '%s' (pos %zu): %s", pszName, (size_t)(psz - pszName), pszErr);
-- return RTEXITCODE_SUCCESS;
--}
--
--
--/**
-- * Validates a file in an extension pack.
-- *
-- * @returns VBox status code, failures with message.
-- * @param pszName The name of the file.
-- * @param hVfsObj The VFS object.
-- * @param pszError Where to store an error message on failure.
-- * @param cbError The size of the buffer @a pszError points to.
-- */
--static int vboxExtPackValidateMemberFile(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError)
--{
-- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError);
-- if (RT_SUCCESS(rc))
-- {
-- RTFSOBJINFO ObjInfo;
-- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING);
-- if (RT_SUCCESS(rc))
-- {
-- if (ObjInfo.cbObject >= 9*_1G64)
-- rc = vboxExtPackReturnError(VERR_OUT_OF_RANGE, pszError, cbError,
-- "'%s': too large (%'RU64 bytes)",
-- pszName, (uint64_t)ObjInfo.cbObject);
-- if (!RTFS_IS_FILE(ObjInfo.Attr.fMode))
-- rc = vboxExtPackReturnError(VERR_NOT_A_FILE, pszError, cbError,
-- "The alleged file '%s' has a mode mask stating otherwise (%RTfmode)",
-- pszName, ObjInfo.Attr.fMode);
-- }
-- else
-- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc);
-- }
-- return rc;
--}
--
--
--/**
-- * Validates a directory in an extension pack.
-- *
-- * @returns VBox status code, failures with message.
-- * @param pszName The name of the directory.
-- * @param hVfsObj The VFS object.
-- * @param pszError Where to store an error message on failure.
-- * @param cbError The size of the buffer @a pszError points to.
-- */
--static int vboxExtPackValidateMemberDir(const char *pszName, RTVFSOBJ hVfsObj, char *pszError, size_t cbError)
--{
-- int rc = vboxExtPackValidateMemberName(pszName, pszError, cbError);
-- if (RT_SUCCESS(rc))
-- {
-- RTFSOBJINFO ObjInfo;
-- rc = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_NOTHING);
-- if (RT_SUCCESS(rc))
-- {
-- if (!RTFS_IS_DIRECTORY(ObjInfo.Attr.fMode))
-- rc = vboxExtPackReturnError(VERR_NOT_A_DIRECTORY, pszError, cbError,
-- "The alleged directory '%s' has a mode mask saying differently (%RTfmode)",
-- pszName, ObjInfo.Attr.fMode);
-- }
-- else
-- vboxExtPackSetError(pszError, cbError, "RTVfsObjQueryInfo failed on '%s': %Rrc", pszName, rc);
-- }
-- return rc;
--}
--
--/**
-- * Validates a member of an extension pack.
-- *
-- * @returns VBox status code, failures with message.
-- * @param pszName The name of the directory.
-- * @param enmType The object type.
-- * @param hVfsObj The VFS object.
-- * @param pszError Where to store an error message on failure.
-- * @param cbError The size of the buffer @a pszError points to.
-- */
--int VBoxExtPackValidateMember(const char *pszName, RTVFSOBJTYPE enmType, RTVFSOBJ hVfsObj, char *pszError, size_t cbError)
--{
-- Assert(cbError > 0);
-- *pszError = '\0';
--
-- int rc;
-- if ( enmType == RTVFSOBJTYPE_FILE
-- || enmType == RTVFSOBJTYPE_IO_STREAM)
-- rc = vboxExtPackValidateMemberFile(pszName, hVfsObj, pszError, cbError);
-- else if ( enmType == RTVFSOBJTYPE_DIR
-- || enmType == RTVFSOBJTYPE_BASE)
-- rc = vboxExtPackValidateMemberDir(pszName, hVfsObj, pszError, cbError);
-- else
-- rc = vboxExtPackReturnError(VERR_UNEXPECTED_FS_OBJ_TYPE, pszError, cbError,
-- "'%s' is not a file or directory (enmType=%d)", pszName, enmType);
-- return rc;
--}
--
--
--/**
-- * Rewinds the tarball file handle and creates a gunzip | tar chain that
-- * results in a filesystem stream.
-- *
-- * @returns VBox status code, failures with message.
-- * @param hTarballFile The handle to the tarball file.
-- * @param pszError Where to store an error message on failure.
-- * @param cbError The size of the buffer @a pszError points to.
-- * @param phTarFss Where to return the filesystem stream handle.
-- * @param phFileManifest Where to return a manifest where the tarball is
-- * gettting hashed. The entry will be called
-- * "extpack" and be ready when the file system
-- * stream is at an end. Optional.
-- */
--int VBoxExtPackOpenTarFss(RTFILE hTarballFile, char *pszError, size_t cbError, PRTVFSFSSTREAM phTarFss, PRTMANIFEST phFileManifest)
--{
-- Assert(cbError > 0);
-- *pszError = '\0';
-- *phTarFss = NIL_RTVFSFSSTREAM;
--
-- /*
-- * Rewind the file and set up a VFS chain for it.
-- */
-- int rc = RTFileSeek(hTarballFile, 0, RTFILE_SEEK_BEGIN, NULL);
-- if (RT_FAILURE(rc))
-- return vboxExtPackReturnError(rc, pszError, cbError, "Failed seeking to the start of the tarball: %Rrc", rc);
--
-- RTVFSIOSTREAM hTarballIos;
-- rc = RTVfsIoStrmFromRTFile(hTarballFile, RTFILE_O_READ | RTFILE_O_DENY_WRITE | RTFILE_O_OPEN, true /*fLeaveOpen*/,
-- &hTarballIos);
-- if (RT_FAILURE(rc))
-- return vboxExtPackReturnError(rc, pszError, cbError, "RTVfsIoStrmFromRTFile failed: %Rrc", rc);
--
-- RTMANIFEST hFileManifest = NIL_RTMANIFEST;
-- rc = RTManifestCreate(0 /*fFlags*/, &hFileManifest);
-- if (RT_SUCCESS(rc))
-- {
-- RTVFSIOSTREAM hPtIos;
-- rc = RTManifestEntryAddPassthruIoStream(hFileManifest, hTarballIos, "extpack", RTMANIFEST_ATTR_SHA256, true /*read*/, &hPtIos);
-- if (RT_SUCCESS(rc))
-- {
-- RTVFSIOSTREAM hGunzipIos;
-- rc = RTZipGzipDecompressIoStream(hPtIos, 0 /*fFlags*/, &hGunzipIos);
-- if (RT_SUCCESS(rc))
-- {
-- RTVFSFSSTREAM hTarFss;
-- rc = RTZipTarFsStreamFromIoStream(hGunzipIos, 0 /*fFlags*/, &hTarFss);
-- if (RT_SUCCESS(rc))
-- {
-- RTVfsIoStrmRelease(hPtIos);
-- RTVfsIoStrmRelease(hGunzipIos);
-- RTVfsIoStrmRelease(hTarballIos);
-- *phTarFss = hTarFss;
-- if (phFileManifest)
-- *phFileManifest = hFileManifest;
-- else
-- RTManifestRelease(hFileManifest);
-- return VINF_SUCCESS;
-- }
--
-- vboxExtPackSetError(pszError, cbError, "RTZipTarFsStreamFromIoStream failed: %Rrc", rc);
-- RTVfsIoStrmRelease(hGunzipIos);
-- }
-- else
-- vboxExtPackSetError(pszError, cbError, "RTZipGzipDecompressIoStream failed: %Rrc", rc);
-- RTVfsIoStrmRelease(hPtIos);
-- }
-- else
-- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddPassthruIoStream failed: %Rrc", rc);
-- RTManifestRelease(hFileManifest);
-- }
-- else
-- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc);
--
-- RTVfsIoStrmRelease(hTarballIos);
-- return rc;
--}
--
--
--/**
-- * Validates the extension pack tarball prior to unpacking.
-- *
-- * Operations performed:
-- * - Mandatory files.
-- * - Manifest check.
-- * - Manifest seal check.
-- * - XML check, match name.
-- *
-- * @returns VBox status code, failures with message.
-- * @param hTarballFile The handle to open the @a pszTarball file.
-- * @param pszExtPackName The name of the extension pack name. NULL if
-- * the name is not fixed.
-- * @param pszTarball The name of the tarball in case we have to
-- * complain about something.
-- * @param pszTarballDigest The SHA-256 digest of the tarball. Empty string
-- * if no digest available.
-- * @param pszError Where to store an error message on failure.
-- * @param cbError The size of the buffer @a pszError points to.
-- * @param phValidManifest Where to optionally return the handle to fully
-- * validated the manifest for the extension pack.
-- * This includes all files.
-- * @param phXmlFile Where to optionally return the memorized XML
-- * file.
-- * @param pStrDigest Where to return the digest of the file.
-- * Optional.
-- */
--int VBoxExtPackValidateTarball(RTFILE hTarballFile, const char *pszExtPackName,
-- const char *pszTarball, const char *pszTarballDigest,
-- char *pszError, size_t cbError,
-- PRTMANIFEST phValidManifest, PRTVFSFILE phXmlFile, RTCString *pStrDigest)
--{
-- /*
-- * Clear return values.
-- */
-- if (phValidManifest)
-- *phValidManifest = NIL_RTMANIFEST;
-- if (phXmlFile)
-- *phXmlFile = NIL_RTVFSFILE;
-- Assert(cbError > 1);
-- *pszError = '\0';
-- NOREF(pszTarball);
--
-- /*
-- * Open the tar.gz filesystem stream and set up an manifest in-memory file.
-- */
-- RTMANIFEST hFileManifest;
-- RTVFSFSSTREAM hTarFss;
-- int rc = VBoxExtPackOpenTarFss(hTarballFile, pszError, cbError, &hTarFss, &hFileManifest);
-- if (RT_FAILURE(rc))
-- return rc;
--
-- RTMANIFEST hOurManifest;
-- rc = RTManifestCreate(0 /*fFlags*/, &hOurManifest);
-- if (RT_SUCCESS(rc))
-- {
-- /*
-- * Process the tarball (would be nice to move this to a function).
-- */
-- RTVFSFILE hXmlFile = NIL_RTVFSFILE;
-- RTVFSFILE hManifestFile = NIL_RTVFSFILE;
-- RTVFSFILE hSignatureFile = NIL_RTVFSFILE;
-- for (;;)
-- {
-- /*
-- * Get the next stream object.
-- */
-- char *pszName;
-- RTVFSOBJ hVfsObj;
-- RTVFSOBJTYPE enmType;
-- rc = RTVfsFsStrmNext(hTarFss, &pszName, &enmType, &hVfsObj);
-- if (RT_FAILURE(rc))
-- {
-- if (rc != VERR_EOF)
-- vboxExtPackSetError(pszError, cbError, "RTVfsFsStrmNext failed: %Rrc", rc);
-- else
-- rc = VINF_SUCCESS;
-- break;
-- }
-- const char *pszAdjName = pszName[0] == '.' && pszName[1] == '/' ? &pszName[2] : pszName;
--
-- /*
-- * Check the type & name validity, performing special tests on
-- * standard extension pack member files.
-- *
-- * N.B. We will always reach the end of the loop before breaking on
-- * failure - cleanup reasons.
-- */
-- rc = VBoxExtPackValidateMember(pszName, enmType, hVfsObj, pszError, cbError);
-- if (RT_SUCCESS(rc))
-- {
-- PRTVFSFILE phVfsFile = NULL;
-- if (!strcmp(pszAdjName, VBOX_EXTPACK_DESCRIPTION_NAME))
-- phVfsFile = &hXmlFile;
-- else if (!strcmp(pszAdjName, VBOX_EXTPACK_MANIFEST_NAME))
-- phVfsFile = &hManifestFile;
-- else if (!strcmp(pszAdjName, VBOX_EXTPACK_SIGNATURE_NAME))
-- phVfsFile = &hSignatureFile;
-- else if (!strncmp(pszAdjName, VBOX_EXTPACK_LICENSE_NAME_PREFIX, sizeof(VBOX_EXTPACK_LICENSE_NAME_PREFIX) - 1))
-- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, NULL, pszError, cbError);
-- if (phVfsFile)
-- rc = VBoxExtPackValidateStandardFile(pszAdjName, enmType, &hVfsObj, phVfsFile, pszError, cbError);
-- }
--
-- /*
-- * Add any I/O stream to the manifest
-- */
-- if ( RT_SUCCESS(rc)
-- && ( enmType == RTVFSOBJTYPE_FILE
-- || enmType == RTVFSOBJTYPE_IO_STREAM))
-- {
-- RTVFSIOSTREAM hVfsIos = RTVfsObjToIoStream(hVfsObj);
-- rc = RTManifestEntryAddIoStream(hOurManifest, hVfsIos, pszAdjName, RTMANIFEST_ATTR_SIZE | RTMANIFEST_ATTR_SHA256);
-- if (RT_FAILURE(rc))
-- vboxExtPackSetError(pszError, cbError, "RTManifestEntryAddIoStream failed on '%s': %Rrc", pszAdjName, rc);
-- RTVfsIoStrmRelease(hVfsIos);
-- }
--
-- /*
-- * Clean up and break out on failure.
-- */
-- RTVfsObjRelease(hVfsObj);
-- RTStrFree(pszName);
-- if (RT_FAILURE(rc))
-- break;
-- }
--
-- /*
-- * Check the integrity of the tarball file.
-- */
-- if (RT_SUCCESS(rc))
-- {
-- RTVfsFsStrmRelease(hTarFss);
-- hTarFss = NIL_RTVFSFSSTREAM;
-- rc = vboxExtPackVerifyFileDigest(hFileManifest, pszTarballDigest, pStrDigest, pszError, cbError);
-- }
--
-- /*
-- * If we've successfully processed the tarball, verify that the
-- * mandatory files are present.
-- */
-- if (RT_SUCCESS(rc))
-- {
-- if (hXmlFile == NIL_RTVFSFILE)
-- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_DESCRIPTION_NAME);
-- if (hManifestFile == NIL_RTVFSFILE)
-- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_MANIFEST_NAME);
-- if (hSignatureFile == NIL_RTVFSFILE)
-- rc = vboxExtPackReturnError(VERR_MISSING, pszError, cbError, "Mandator file '%s' is missing", VBOX_EXTPACK_SIGNATURE_NAME);
-- }
--
-- /*
-- * Check the manifest and it's signature.
-- */
-- if (RT_SUCCESS(rc))
-- rc = vboxExtPackVerifyManifestAndSignature(hOurManifest, hManifestFile, hSignatureFile, pszError, cbError);
--
-- /*
-- * Check the XML.
-- */
-- if (RT_SUCCESS(rc))
-- rc = vboxExtPackVerifyXml(hXmlFile, pszExtPackName, pszError, cbError);
--
-- /*
-- * Returns objects.
-- */
-- if (RT_SUCCESS(rc))
-- {
-- if (phValidManifest)
-- {
-- RTManifestRetain(hOurManifest);
-- *phValidManifest = hOurManifest;
-- }
-- if (phXmlFile)
-- {
-- RTVfsFileRetain(hXmlFile);
-- *phXmlFile = hXmlFile;
-- }
-- }
--
-- /*
-- * Release our object references.
-- */
-- RTManifestRelease(hOurManifest);
-- RTVfsFileRelease(hXmlFile);
-- RTVfsFileRelease(hManifestFile);
-- RTVfsFileRelease(hSignatureFile);
-- }
-- else
-- vboxExtPackSetError(pszError, cbError, "RTManifestCreate failed: %Rrc", rc);
-- RTVfsFsStrmRelease(hTarFss);
-- RTManifestRelease(hFileManifest);
--
-- return rc;
--}
--
---- VirtualBox-4.1.18.orig/include/Makefile.kmk 2012-06-20 10:07:49.000000000 -0300
-+++ VirtualBox-4.1.18/include/Makefile.kmk 2012-07-24 21:11:57.007068865 -0300
-@@ -51,7 +51,6 @@
- VBox/vd-cache-plugin.h \
- VBox/vmm/uvm.h \
- VBox/vscsi.h \
-- $(wildcard VBox/ExtPack/*.h ) \
- iprt/alloca.h \
- iprt/tcp.h \
- iprt/localipc.h \
---- VirtualBox-4.1.18.orig/src/Makefile.kmk 2012-06-20 10:07:57.000000000 -0300
-+++ VirtualBox-4.1.18/src/Makefile.kmk 2012-07-24 22:51:10.206996034 -0300
-@@ -26,14 +26,6 @@
- include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk
- include $(PATH_SUB_CURRENT)/libs/Makefile.kmk
-
--else if defined(VBOX_ONLY_EXTPACKS)
-- include $(PATH_SUB_CURRENT)/bldprogs/Makefile.kmk
-- include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk
-- include $(PATH_SUB_CURRENT)/libs/Makefile.kmk
-- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
-- include $(PATH_SUB_CURRENT)/recompiler/Makefile.kmk
-- endif
--
- else if defined(VBOX_ONLY_TESTSUITE)
- include $(PATH_SUB_CURRENT)/libs/Makefile.kmk
- include $(PATH_SUB_CURRENT)/VBox/Makefile.kmk
---- VirtualBox-4.1.18.orig/src/VBox/Makefile.kmk 2012-07-24 21:19:55.565641784 -0300
-+++ VirtualBox-4.1.18/src/VBox/Makefile.kmk 2012-07-24 22:12:55.429156962 -0300
-@@ -33,19 +33,6 @@
- include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk
- include $(PATH_SUB_CURRENT)/Frontends/Makefile.kmk
-
--else ifdef VBOX_ONLY_EXTPACKS
-- include $(PATH_SUB_CURRENT)/Runtime/Makefile.kmk
-- include $(PATH_SUB_CURRENT)/Devices/Makefile.kmk
-- include $(PATH_SUB_CURRENT)/HostDrivers/Makefile.kmk
-- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk
-- ifdef VBOX_WITH_VRDP
-- include $(PATH_SUB_CURRENT)/RDP/Makefile.kmk
-- endif
-- include $(PATH_SUB_CURRENT)/VMM/Makefile.kmk
-- ifndef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
-- include $(PATH_SUB_CURRENT)/Disassembler/Makefile.kmk
-- endif
--
- else ifdef VBOX_ONLY_SDK
- include $(PATH_SUB_CURRENT)/Main/Makefile.kmk
- ifdef VBOX_WITH_VRDP
-@@ -92,9 +79,6 @@
- if1of ($(KBUILD_TARGET_ARCH), amd64 x86)
- include $(PATH_SUB_CURRENT)/NetworkServices/Makefile.kmk
- endif
-- ifndef VBOX_OSE
-- include $(PATH_SUB_CURRENT)/ExtPacks/Makefile.kmk
-- endif
- ifdef VBOX_WITH_INSTALLER
- include $(PATH_SUB_CURRENT)/Installer/Makefile.kmk # Keep this last.
- endif
---- VirtualBox-4.1.18/src/libs/Makefile.kmk.orig 2012-07-24 21:23:26.938013023 -0300
-+++ VirtualBox-4.1.18/src/libs/Makefile.kmk 2012-07-24 21:43:42.557911752 -0300
-@@ -48,13 +48,6 @@
- include $(PATH_SUB_CURRENT)/kStuff/Makefile.kmk
- endif
-
--# OpenSSL.
--if !defined(VBOX_ONLY_SDK) \
-- && ( "$(SDK_VBOX_OPENSSL_INCS)" == "$(SDK_VBOX_OPENSSL_VBOX_DEFAULT_INCS)" \
-- || defined(VBOX_WITH_EXTPACK_PUEL_BUILD))
-- include $(PATH_SUB_CURRENT)/openssl-0.9.8t/Makefile.kmk
--endif
--
- # libjpeg for VRDP video redirection
- if defined(VBOX_WITH_VRDP) && defined(VBOX_WITH_VRDP_VIDEO_CHANNEL)
- include $(PATH_SUB_CURRENT)/jpeg-8a/Makefile.kmk
---- VirtualBox-4.1.18.orig/src/VBox/Devices/Makefile.kmk 2012-07-24 23:06:45.916276235 -0300
-+++ VirtualBox-4.1.18/src/VBox/Devices/Makefile.kmk 2012-07-24 23:17:00.202963228 -0300
-@@ -21,9 +21,7 @@
-
- # Include sub-makefiles.
- include $(PATH_SUB_CURRENT)/testcase/Makefile.kmk
--if defined(VBOX_WITH_INTEL_PXE) || defined(VBOX_ONLY_EXTPACKS)
-- include $(PATH_SUB_CURRENT)/PC/PXE/Makefile.kmk
--else if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT)
-+if defined(VBOX_WITH_PXE_ROM) && !defined(VBOX_WITHOUT_ETHERBOOT)
- include $(PATH_SUB_CURRENT)/PC/Etherboot-src/Makefile.kmk
- endif
- if !defined(VBOX_ONLY_EXTPACKS) # Goes on almost to the end of the file.
-@@ -57,9 +55,6 @@
- ifdef VBOX_WITH_USB
- VBoxDDU_DEFS += VBOX_WITH_USB IN_USBLIB
- VBoxDDU_SDKS.win = WINPSDK W2K3DDK
-- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
-- VBoxDDU_DEFS += VBOX_WITH_EHCI_IMPL
-- endif
- ifdef VBOX_WITH_NEW_USB_CODE_ON_DARWIN
- VBoxDDU_DEFS.darwin += VBOX_WITH_NEW_USB_CODE_ON_DARWIN
- endif
-@@ -122,9 +117,6 @@
- VBoxDD_DEFS = VBOX_ACPI
- ifdef VBOX_WITH_USB
- VBoxDD_DEFS += VBOX_WITH_USB
-- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
-- VBoxDD_DEFS += VBOX_WITH_EHCI_IMPL
-- endif
- endif
- ifdef VBOX_WITH_VUSB
- VBoxDD_DEFS += VBOX_WITH_VUSB
-@@ -446,11 +438,6 @@
- endif
- ifdef VBOX_WITH_USB
- DevicesR3_DEFS += VBOX_WITH_USB
-- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
-- DevicesR3_DEFS += VBOX_WITH_EHCI_IMPL
-- DevicesR3_SOURCES += \
-- USB/DevEHCI.cpp
-- endif
- endif
- if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
- DevicesR3_DEFS += VBOX_WITH_PCI_PASSTHROUGH_IMPL
-@@ -607,11 +594,6 @@
-
- ifdef VBOX_WITH_USB
- VBoxDDGC_DEFS += VBOX_WITH_USB
-- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
-- VBoxDDGC_DEFS += VBOX_WITH_EHCI_IMPL
-- VBoxDDGC_SOURCES += \
-- USB/DevEHCI.cpp
-- endif
- endif
-
- ifdef VBOX_WITH_VIDEOHWACCEL
-@@ -711,11 +693,6 @@
- endif
- ifdef VBOX_WITH_USB
- VBoxDDR0_DEFS += VBOX_WITH_USB
-- if defined(VBOX_WITH_EHCI_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
-- VBoxDDR0_DEFS += VBOX_WITH_EHCI_IMPL
-- VBoxDDR0_SOURCES += \
-- USB/DevEHCI.cpp
-- endif
- endif
-
- if defined(VBOX_WITH_PCI_PASSTHROUGH_IMPL) && !defined(VBOX_WITH_EXTPACK_PUEL)
-@@ -1204,49 +1181,5 @@
-
- endif # !VBOX_ONLY_EXTPACKS
-
--if defined(VBOX_WITH_EXTPACK_PUEL) && defined(VBOX_WITH_EXTPACK_PUEL_BUILD)
-- #
-- # The EHCI (USB 2.0) Extension Pack Modules.
-- #
-- if defined(VBOX_WITH_USB)
-- DLLS += VBoxEhciR3
-- VBoxEhciR3_TEMPLATE = VBoxR3ExtPackPuel
-- VBoxEhciR3_SOURCES = USB/DevEHCI.cpp
--
-- SYSMODS += VBoxEhciR0
-- VBoxEhciR0_TEMPLATE = VBoxR0ExtPackPuel
-- VBoxEhciR0_SOURCES = USB/DevEHCI.cpp
--
-- ifdef VBOX_WITH_RAW_MODE
-- SYSMODS += VBoxEhciRC
-- VBoxEhciRC_TEMPLATE = VBoxRcExtPackPuel
-- VBoxEhciRC_SOURCES = USB/DevEHCI.cpp
-- endif
-- endif
--
-- if defined(VBOX_WITH_PCI_PASSTHROUGH)
-- DLLS += VBoxPciRawR3
-- VBoxPciRawR3_TEMPLATE = VBoxR3ExtPackPuel
-- VBoxPciRawR3_SOURCES = Bus/DevPciRaw.cpp
--
-- DLLS += VBoxPciRawDrv
-- VBoxPciRawDrv_TEMPLATE = VBoxR3ExtPackPuel
-- VBoxPciRawDrv_SOURCES = Bus/DrvPciRaw.cpp
--
-- SYSMODS += VBoxPciRawR0
-- VBoxPciRawR0_TEMPLATE = VBoxR0ExtPackPuel
-- VBoxPciRawR0_SOURCES = Bus/DevPciRaw.cpp
--
-- Bus/DevPciRaw.cpp_INCS = Bus
-- endif
--
-- #
-- # The Intel PXE rom.
-- #
-- INSTALLS += VBoxExtPackPuelInsRoms
-- VBoxExtPackPuelInsRoms_TEMPLATE = VBoxInsExtPackPuel
-- VBoxExtPackPuelInsRoms_SOURCES = PC/PXE/PXE-Intel.rom=>PXE-Intel.rom
--endif # VBOX_WITH_EXTPACK_PUEL
--
- include $(KBUILD_PATH)/subfooter.kmk
-
---- VirtualBox-4.1.18.orig/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.304126039 -0300
-+++ VirtualBox-4.1.18/src/VBox/Main/Makefile.kmk 2012-07-24 23:38:25.350789964 -0300
-@@ -230,14 +230,12 @@
- $(if $(VBOX_USB_WITH_SYSFS),VBOX_USB_WITH_SYSFS,) \
- $(if $(VBOX_USB_WITH_INOTIFY),VBOX_USB_WITH_INOTIFY,) \
- $(if $(VBOX_WITH_LIVE_MIGRATION),VBOX_WITH_LIVE_MIGRATION,) \
-- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \
- $(if $(VBOX_WITH_VUSB),VBOX_WITH_VUSB,) \
- $(if $(VBOX_WITH_S3),VBOX_WITH_S3,) \
- $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,)
- ifdef VBOX_WITH_USB
- VBoxSVC_DEFS += \
- VBOX_WITH_USB \
-- $(if $(VBOX_WITH_EHCI),VBOX_WITH_EHCI,) \
- $(if $(VBOX_WITH_NEW_USB_CODE_ON_DARWIN),VBOX_WITH_NEW_USB_CODE_ON_DARWIN,)
- endif
- VBoxSVC_DEFS.win += VBOX_COM_OUTOFPROC_MODULE
-@@ -290,7 +288,6 @@
- src-all/SharedFolderImpl.cpp \
- src-all/VirtualBoxBase.cpp \
- src-all/VirtualBoxErrorInfoImpl.cpp \
-- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \
- src-server/ApplianceImpl.cpp \
- src-server/ApplianceImplExport.cpp \
- src-server/ApplianceImplImport.cpp \
-@@ -543,8 +540,6 @@
- $(if $(VBOX_WITH_HGSMI),VBOX_WITH_HGSMI,) \
- $(if $(VBOX_WITH_VIDEOHWACCEL),VBOX_WITH_VIDEOHWACCEL,) \
- $(if $(VBOX_WITH_USB),VBOX_WITH_USB,) \
-- $(if-expr defined(VBOX_WITH_EHCI) && defined(VBOX_WITH_USB),VBOX_WITH_EHCI,) \
-- $(if $(VBOX_WITH_EXTPACK),VBOX_WITH_EXTPACK,) \
- $(if $(VBOX_WITH_PCI_PASSTHROUGH),VBOX_WITH_PCI_PASSTHROUGH,)
-
- VBoxC_DEFS.darwin.x86 = VBOX_WITH_2X_4GB_ADDR_SPACE
-@@ -602,7 +597,6 @@
- src-all/SharedFolderImpl.cpp \
- src-all/VirtualBoxBase.cpp \
- src-all/VirtualBoxErrorInfoImpl.cpp \
-- $(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \
- $(if $(VBOX_WITH_USB_VIDEO),src-client/UsbWebcamInterface.cpp,) \
- $(if $(VBOX_WITH_USB_CARDREADER),src-client/UsbCardReader.cpp,) \
- src-client/AdditionsFacilityImpl.cpp \
-@@ -711,22 +705,6 @@
- endif # !win
-
-
--#
--# The VBoxExtPackHelperApp.
--#
--ifdef VBOX_WITH_EXTPACK
-- PROGRAMS += VBoxExtPackHelperApp
-- VBoxExtPackHelperApp_TEMPLATE = VBoxR3SetUidToRoot
-- VBoxExtPackHelperApp_LDFLAGS.darwin = -framework Security
-- VBoxExtPackHelperApp_LDFLAGS.win = /SUBSYSTEM:windows
-- VBoxExtPackHelperApp_SOURCES = \
-- src-helper-apps/VBoxExtPackHelperApp.cpp \
-- src-all/ExtPackUtil.cpp
-- VBoxExtPackHelperApp_LIBS = \
-- $(LIB_RUNTIME)
--endif # VBOX_WITH_EXTPACK
--
--
- endif # !VBOX_ONLY_SDK (the ifndef is far above)
-
-
---- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.575825175 -0300
-+++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/Makefile.kmk 2012-07-24 23:25:04.619156084 -0300
-@@ -888,7 +888,6 @@
- $(VBOX_MACOSX_ICON_FILE)=>Resources/virtualbox.icns \
- $(VBOX_BRAND_GUI_VBOX_64PX_PNG)=>Resources/virtualbox.png \
- $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox.icns=>Resources/virtualbox-vbox.icns \
-- $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vbox-extpack.icns=>Resources/virtualbox-vbox-extpack.icns \
- $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ovf.icns=>Resources/virtualbox-ovf.icns \
- $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-ova.icns=>Resources/virtualbox-ova.icns \
- $(PATH_ROOT)/src/VBox/Resources/darwin/virtualbox-vdi.icns=>Resources/virtualbox-vdi.icns \
---- VirtualBox-4.1.18.orig/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:17.985011038 -0300
-+++ VirtualBox-4.1.18/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc 2012-07-24 23:28:18.051673913 -0300
-@@ -167,18 +167,6 @@
- <file alias="status_check_32px.png">images/status_check_32px.png</file>
- <file alias="status_error_16px.png">images/status_error_16px.png</file>
- <file alias="status_error_32px.png">images/status_error_32px.png</file>
-- <file alias="extension_pack_16px.png">images/extension_pack_16px.png</file>
-- <file alias="extension_pack_disabled_16px.png">images/extension_pack_disabled_16px.png</file>
-- <file alias="extension_pack_32px.png">images/extension_pack_32px.png</file>
-- <file alias="extension_pack_disabled_32px.png">images/extension_pack_disabled_32px.png</file>
-- <file alias="extension_pack_install_16px.png">images/extension_pack_install_16px.png</file>
-- <file alias="extension_pack_install_disabled_16px.png">images/extension_pack_install_disabled_16px.png</file>
-- <file alias="extension_pack_install_32px.png">images/extension_pack_install_32px.png</file>
-- <file alias="extension_pack_install_disabled_32px.png">images/extension_pack_install_disabled_32px.png</file>
-- <file alias="extension_pack_uninstall_16px.png">images/extension_pack_uninstall_16px.png</file>
-- <file alias="extension_pack_uninstall_disabled_16px.png">images/extension_pack_uninstall_disabled_16px.png</file>
-- <file alias="extension_pack_uninstall_32px.png">images/extension_pack_uninstall_32px.png</file>
-- <file alias="extension_pack_uninstall_disabled_32px.png">images/extension_pack_uninstall_disabled_32px.png</file>
- <file alias="proxy_16px.png">images/proxy_16px.png</file>
- <file alias="proxy_disabled_16px.png">images/proxy_disabled_16px.png</file>
- <file alias="proxy_32px.png">images/proxy_32px.png</file>
---- VirtualBox-4.1.18.orig/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.780012664 -0300
-+++ VirtualBox-4.1.18/src/VBox/Installer/linux/Makefile.kmk 2012-07-25 00:32:00.806677728 -0300
-@@ -170,11 +170,6 @@
- VBox.sh \
- VBox.png
-
--ifdef VBOX_WITH_EXTPACK
-- VBOX_LNX_STRIP_BIN += \
-- VBoxExtPackHelperApp
--endif
--
- # Qt4 GUI
- ifdef VBOX_WITH_QTGUI
- include $(PATH_ROOT)/src/VBox/Frontends/VirtualBox/nls/ApprovedLanguages.kmk
-@@ -286,7 +281,7 @@
-
- VBOX_MIME_ICONS = \
- $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\
-- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
-+ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \
- $(foreach s,16 20 24 32 48 64 72 96 128 256,\
- virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/virtualbox-$(f).png)))
-
---- VirtualBox-4.1.18.orig/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.253398525 -0300
-+++ VirtualBox-4.1.18/src/VBox/Installer/win/Makefile.kmk 2012-07-25 00:34:52.300062531 -0300
-@@ -435,7 +435,6 @@
- -E 'VBOX_WITH_DEBUGGER_GUI=$(if-expr defined(VBOX_WITH_DEBUGGER_GUI) && defined(VBOX_WITH_QTGUI),yes,no)' \
- -E 'VBOX_WITH_DOCS_PACKING=$(if $(VBOX_WITH_DOCS_PACKING),yes,no)' \
- -E 'VBOX_WITH_EFIFW_PACKING=$(if $(VBOX_WITH_EFIFW_PACKING),yes,no)' \
-- -E 'VBOX_WITH_EXTPACK=$(if $(VBOX_WITH_EXTPACK),yes,no)' \
- -E 'VBOX_WITH_GUEST_CONTROL=$(if $(VBOX_WITH_GUEST_CONTROL),yes,no)' \
- -E 'VBOX_WITH_GUEST_PROPS=$(if $(VBOX_WITH_GUEST_PROPS),yes,no)' \
- -E 'VBOX_WITH_NETFLT=$(if $(VBOX_WITH_NETFLT),yes,no)' \
---- VirtualBox-4.1.18.orig/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.929571374 -0300
-+++ VirtualBox-4.1.18/src/VBox/Installer/darwin/Makefile.kmk 2012-07-25 00:36:55.959569630 -0300
-@@ -629,7 +629,6 @@
- MacOS/VirtualBoxVM \
- MacOS/VBoxNetAdpCtl \
- MacOS/VBoxNetDHCP \
-- MacOS/VBoxExtPackHelperApp \
- MacOS/VBoxBalloonCtrl
- ifdef VBOX_WITH_WEBSERVICES
- VBOX_DI_VBAPP_PROGS += \
-@@ -659,7 +658,6 @@
- Resources/virtualbox.icns \
- Resources/virtualbox.png \
- Resources/virtualbox-vbox.icns \
-- Resources/virtualbox-vbox-extpack.icns \
- Resources/virtualbox-ovf.icns \
- Resources/virtualbox-ova.icns \
- Resources/virtualbox-vdi.icns \
---- VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk.orig 2012-07-25 00:38:48.476398293 -0300
-+++ VirtualBox-4.1.18/src/VBox/Installer/solaris/Makefile.kmk 2012-07-25 00:38:48.516396159 -0300
-@@ -185,12 +185,12 @@
-
- VBOX_MIME_ICONS = \
- $(addprefix $(PATH_ROOT)/src/VBox/Resources/other/,\
-- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
-+ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \
- $(foreach s,16 20 24 32 48 64 72 96 128 256,\
- virtualbox-$(f)-$(s)px.png=>$(s)x$(s)/mimetypes/virtualbox-$(f).png)))
-
- SOLARIS_COMMON_ICONS = \
-- $(foreach f,ova ovf vbox vbox-extpack vdi vmdk vhd hdd, \
-+ $(foreach f,ova ovf vbox vdi vmdk vhd hdd, \
- $(foreach s,16 20 24 32 48 64 72 96 128 256,\
- $(s)x$(s)/mimetypes/virtualbox-$(f).png))
-
-@@ -210,7 +210,6 @@
- $(if $(VBOX_WITH_VBOXSDL),VBoxSDL,) \
- $(if $(VBOX_WITH_NETADP),VBoxNetAdpCtl,) \
- VBoxNetDHCP \
-- $(if $(VBOX_WITH_EXTPACK),VBoxExtPackHelperApp,) \
- VBoxSVC \
- $(if $(VBOX_WITH_CROGL),VBoxTestOGL,) \
- VBoxXPCOMIPCD \
---- VirtualBox-4.1.18.orig/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.745522450 -0300
-+++ VirtualBox-4.1.18/src/VBox/Runtime/Makefile.kmk 2012-07-25 00:40:58.782186960 -0300
-@@ -53,15 +53,6 @@
- #
- LIBRARIES += RuntimeR3 RuntimeBldProg
-
--else ifdef VBOX_ONLY_EXTPACKS_USE_IMPLIBS
-- #
-- # Build docs only - need just regular R3 runtime.
-- #
-- LIBRARIES += RuntimeBldProg
-- LIBRARIES.solaris += RuntimeR0Stub
-- LIBRARIES.win += RuntimeR0Stub RuntimeRCStub
-- include $(PATH_SUB_CURRENT)/tools/Makefile.kmk
--
- else # !VBOX_ONLY_ADDITIONS && !VBOX_ONLY_TESTSUITE && !VBOX_ONLY_DOCS
-
- #
diff --git a/libre/virtualbox-libre-modules-lts/os_blag.png b/libre/virtualbox-libre-modules-lts/os_blag.png
deleted file mode 100755
index 61995ca10..000000000
--- a/libre/virtualbox-libre-modules-lts/os_blag.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_blag_64.png b/libre/virtualbox-libre-modules-lts/os_blag_64.png
deleted file mode 100755
index aa4463a97..000000000
--- a/libre/virtualbox-libre-modules-lts/os_blag_64.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_dragora.png b/libre/virtualbox-libre-modules-lts/os_dragora.png
deleted file mode 100755
index d1df45880..000000000
--- a/libre/virtualbox-libre-modules-lts/os_dragora.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_dragora_64.png b/libre/virtualbox-libre-modules-lts/os_dragora_64.png
deleted file mode 100755
index 64bcecf20..000000000
--- a/libre/virtualbox-libre-modules-lts/os_dragora_64.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_dynebolic.png b/libre/virtualbox-libre-modules-lts/os_dynebolic.png
deleted file mode 100755
index 67b07d4c0..000000000
--- a/libre/virtualbox-libre-modules-lts/os_dynebolic.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnewsense.png b/libre/virtualbox-libre-modules-lts/os_gnewsense.png
deleted file mode 100755
index 76d9e38b3..000000000
--- a/libre/virtualbox-libre-modules-lts/os_gnewsense.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnewsense_64.png b/libre/virtualbox-libre-modules-lts/os_gnewsense_64.png
deleted file mode 100755
index 8859c34e8..000000000
--- a/libre/virtualbox-libre-modules-lts/os_gnewsense_64.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnu.png b/libre/virtualbox-libre-modules-lts/os_gnu.png
deleted file mode 100755
index 26c4550f9..000000000
--- a/libre/virtualbox-libre-modules-lts/os_gnu.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnu_64.png b/libre/virtualbox-libre-modules-lts/os_gnu_64.png
deleted file mode 100755
index 4161634e9..000000000
--- a/libre/virtualbox-libre-modules-lts/os_gnu_64.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnuhurd.png b/libre/virtualbox-libre-modules-lts/os_gnuhurd.png
deleted file mode 100755
index 26c4550f9..000000000
--- a/libre/virtualbox-libre-modules-lts/os_gnuhurd.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnulinux.png b/libre/virtualbox-libre-modules-lts/os_gnulinux.png
deleted file mode 100755
index 26c4550f9..000000000
--- a/libre/virtualbox-libre-modules-lts/os_gnulinux.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_gnulinux_64.png b/libre/virtualbox-libre-modules-lts/os_gnulinux_64.png
deleted file mode 100755
index 4161634e9..000000000
--- a/libre/virtualbox-libre-modules-lts/os_gnulinux_64.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_musix.png b/libre/virtualbox-libre-modules-lts/os_musix.png
deleted file mode 100755
index fb7b94577..000000000
--- a/libre/virtualbox-libre-modules-lts/os_musix.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_musix_64.png b/libre/virtualbox-libre-modules-lts/os_musix_64.png
deleted file mode 100755
index a1bbbbf3a..000000000
--- a/libre/virtualbox-libre-modules-lts/os_musix_64.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_os64base.png b/libre/virtualbox-libre-modules-lts/os_os64base.png
deleted file mode 100755
index 7aec20314..000000000
--- a/libre/virtualbox-libre-modules-lts/os_os64base.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_os64base.xcf b/libre/virtualbox-libre-modules-lts/os_os64base.xcf
deleted file mode 100755
index d8e28e35e..000000000
--- a/libre/virtualbox-libre-modules-lts/os_os64base.xcf
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_osbase.png b/libre/virtualbox-libre-modules-lts/os_osbase.png
deleted file mode 100755
index 00f197fca..000000000
--- a/libre/virtualbox-libre-modules-lts/os_osbase.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_osbase.xcf b/libre/virtualbox-libre-modules-lts/os_osbase.xcf
deleted file mode 100755
index c4463c857..000000000
--- a/libre/virtualbox-libre-modules-lts/os_osbase.xcf
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_parabola.png b/libre/virtualbox-libre-modules-lts/os_parabola.png
deleted file mode 100755
index 757abc484..000000000
--- a/libre/virtualbox-libre-modules-lts/os_parabola.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_parabola_64.png b/libre/virtualbox-libre-modules-lts/os_parabola_64.png
deleted file mode 100755
index 5ac7c2767..000000000
--- a/libre/virtualbox-libre-modules-lts/os_parabola_64.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_trisquel.png b/libre/virtualbox-libre-modules-lts/os_trisquel.png
deleted file mode 100755
index c6f0d3d7a..000000000
--- a/libre/virtualbox-libre-modules-lts/os_trisquel.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_trisquel_64.png b/libre/virtualbox-libre-modules-lts/os_trisquel_64.png
deleted file mode 100755
index ebca3dd43..000000000
--- a/libre/virtualbox-libre-modules-lts/os_trisquel_64.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_ututo.png b/libre/virtualbox-libre-modules-lts/os_ututo.png
deleted file mode 100755
index e1dffb575..000000000
--- a/libre/virtualbox-libre-modules-lts/os_ututo.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_ututo_64.png b/libre/virtualbox-libre-modules-lts/os_ututo_64.png
deleted file mode 100755
index 158468e0a..000000000
--- a/libre/virtualbox-libre-modules-lts/os_ututo_64.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/os_venenux.png b/libre/virtualbox-libre-modules-lts/os_venenux.png
deleted file mode 100755
index 5e0c1585d..000000000
--- a/libre/virtualbox-libre-modules-lts/os_venenux.png
+++ /dev/null
Binary files differ
diff --git a/libre/virtualbox-libre-modules-lts/virtualbox-libre-parabola-modules-lts.install b/libre/virtualbox-libre-modules-lts/virtualbox-libre-guest-modules-lts.install
index 54a052390..54a052390 100755..100644
--- a/libre/virtualbox-libre-modules-lts/virtualbox-libre-parabola-modules-lts.install
+++ b/libre/virtualbox-libre-modules-lts/virtualbox-libre-guest-modules-lts.install
diff --git a/libre/virtualbox-libre-modules-lts/virtualbox-libre-modules-lts.install b/libre/virtualbox-libre-modules-lts/virtualbox-libre-host-modules-lts.install
index 5387563a6..4503996e8 100755..100644
--- a/libre/virtualbox-libre-modules-lts/virtualbox-libre-modules-lts.install
+++ b/libre/virtualbox-libre-modules-lts/virtualbox-libre-host-modules-lts.install
@@ -1,7 +1,7 @@
EXTRAMODULES='extramodules-3.0-LIBRE-LTS'
post_install() {
-/bin/cat << EOF
+cat << EOF
===> You must load vboxdrv module before starting VirtualBox:
===> # modprobe vboxdrv
EOF