d75f09543a
- 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)
50 lines
1.5 KiB
C++
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. */
|