diff options
Diffstat (limited to 'devel/efivar/files/patch-src_disk.c')
| -rw-r--r-- | devel/efivar/files/patch-src_disk.c | 32 | 
1 files changed, 32 insertions, 0 deletions
| diff --git a/devel/efivar/files/patch-src_disk.c b/devel/efivar/files/patch-src_disk.c new file mode 100644 index 000000000000..796a0904ed29 --- /dev/null +++ b/devel/efivar/files/patch-src_disk.c @@ -0,0 +1,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; | 
