freebsd-ports/emulators/virtualbox-ose/files/patch-src-VBox-Frontends-VBoxManage-VBoxInternalManage.cpp
Beat Gaetzi d75f09543a - Update to 3.0.51r22226
- Update Guest Additions to 3.0.4
- Add wiki page link to pkg-message
- Add missing libxslt dependency [1]
- Add NLS support [2]
- Installing C and Python bindings [3]
- Add patch to pass a physical disk to vbox [4]

Submitted by:	Guido Falsi <mad AT madpilot.net> [1], nork [2],
		Bernhard Froehlich <decke AT bluelife.at> [3], nox [4]
Thanks to:	All testers and patch submitters their patch already
		included upstream
On behalf of:	vbox@ (decke, dhn, miwi, nox)
2009-08-14 16:10:23 +00:00

50 lines
1.5 KiB
C++

Index: src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp
@@ -54,7 +54,8 @@
#ifdef RT_OS_WINDOWS
# include <windows.h>
# include <winioctl.h>
-#elif defined(RT_OS_LINUX) || defined(RT_OS_DARWIN) || defined(RT_OS_SOLARIS)
+#elif defined(RT_OS_LINUX) || defined(RT_OS_DARWIN) \
+ || defined(RT_OS_SOLARIS) || defined(RT_OS_FREEBSD)
# include <errno.h>
# include <sys/ioctl.h>
# include <sys/types.h>
@@ -76,6 +77,9 @@
# include <sys/dkio.h>
# include <sys/vtoc.h>
#endif /* RT_OS_SOLARIS */
+#ifdef RT_OS_FREEBSD
+# include <sys/disk.h>
+#endif /* RT_OS_FREEBSD */
using namespace com;
@@ -1013,6 +1017,28 @@
vrc = VERR_INVALID_PARAMETER;
goto out;
}
+#elif defined(RT_OS_FREEBSD)
+ struct stat DevStat;
+ if (!fstat(RawFile, &DevStat) && S_ISCHR(DevStat.st_mode))
+ {
+ off_t cMediasize = 0;
+ if (!ioctl(RawFile, DIOCGMEDIASIZE, &cMediasize))
+ {
+ cbSize = cMediasize;
+ }
+ else
+ {
+ vrc = RTErrConvertFromErrno(errno);
+ RTPrintf("Cannot get the block count for file '%s': %Rrc", rawdisk.raw(), vrc);
+ goto out;
+ }
+ }
+ else
+ {
+ RTPrintf("File '%s' is no character device\n", rawdisk.raw());
+ vrc = VERR_INVALID_PARAMETER;
+ goto out;
+ }
#else /* all unrecognized OSes */
/* Hopefully this works on all other hosts. If it doesn't, it'll just fail
* creating the VMDK, so no real harm done. */