blob: 796a0904ed29bfc265a0a77e8a4498aeaa83a117 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
--- src/disk.c.orig 2024-01-31 20:08:46 UTC
+++ src/disk.c
@@ -14,6 +14,10 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#ifdef __FreeBSD__
+# include <sys/disk.h>
+# undef LIST_HEAD
+#endif
#include <sys/ioctl.h>
#include <sys/mount.h>
#include <sys/stat.h>
@@ -158,8 +162,18 @@ msdos_disk_get_partition_info (int fd, int write_signa
} else if (num == 0) {
/* Whole disk */
*start = 0;
+#if defined(__linux__)
ioctl(fd, BLKGETSIZE, &disk_size);
*size = disk_size;
+#elif defined(__FreeBSD__)
+ long sector_size=0;
+ ioctl(fd, DIOCGMEDIASIZE, &disk_size);
+ ioctl(fd, DIOCGSECTORSIZE, §or_size);
+ *size = disk_size / sector_size;
+#else
+ efi_error("could not get disk size (not implemented on your OS)");
+ return -1;
+#endif
} else if (num >= 1 && num <= 4) {
/* Primary partition */
*start = mbr->partition[num-1].starting_lba;
|