VirtualBox

Ticket #4269: patch-rawvmdk

File patch-rawvmdk, 1.7 KB (added by 403, 15 years ago)
Line 
1diff -ur src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp
2--- src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp
3+++ src/VBox/Frontends/VBoxManage/VBoxInternalManage.cpp
4@@ -54,7 +54,7 @@
5 #ifdef RT_OS_WINDOWS
6 # include <windows.h>
7 # include <winioctl.h>
8-#elif defined(RT_OS_LINUX) || defined(RT_OS_DARWIN) || defined(RT_OS_SOLARIS)
9+#elif defined(RT_OS_LINUX) || defined(RT_OS_DARWIN) || defined(RT_OS_FREEBSD) || defined(RT_OS_SOLARIS)
10 # include <errno.h>
11 # include <sys/ioctl.h>
12 # include <sys/types.h>
13@@ -68,7 +68,7 @@
14 # include <linux/fs.h>
15 # include <stdlib.h> /* atoi() */
16 #endif /* RT_OS_LINUX */
17-#ifdef RT_OS_DARWIN
18+#if defined (RT_OS_DARWIN) || defined(RT_OS_FREEBSD)
19 # include <sys/disk.h>
20 #endif /* RT_OS_DARWIN */
21 #ifdef RT_OS_SOLARIS
22@@ -986,6 +986,27 @@
23 else
24 {
25 RTPrintf("File '%s' is no block device\n", rawdisk.raw());
26+ vrc = VERR_INVALID_PARAMETER;
27+ goto out;
28+ }
29+#elif defined(RT_OS_FREEBSD)
30+ struct stat DevStat;
31+ if (!fstat(RawFile, &DevStat) && ( S_ISBLK(DevStat.st_mode)
32+ || S_ISCHR(DevStat.st_mode)))
33+ {
34+ off_t cSize;
35+ if (ioctl(RawFile, DIOCGMEDIASIZE, &cSize))
36+ cbSize = cSize;
37+ else
38+ {
39+ vrc = RTErrConvertFromErrno(errno);
40+ RTPrintf("Error getting the size of the raw disk '%s': %Rrc\n", rawdisk.raw(), vrc);
41+ goto out;
42+ }
43+ }
44+ else
45+ {
46+ RTPrintf("File '%s' is no block or char device\n", rawdisk.raw());
47 vrc = VERR_INVALID_PARAMETER;
48 goto out;
49 }

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