diff options
Diffstat (limited to 'devel/efivar/files/patch-src_gpt.c')
| -rw-r--r-- | devel/efivar/files/patch-src_gpt.c | 59 | 
1 files changed, 59 insertions, 0 deletions
| diff --git a/devel/efivar/files/patch-src_gpt.c b/devel/efivar/files/patch-src_gpt.c new file mode 100644 index 000000000000..87d6d523d72a --- /dev/null +++ b/devel/efivar/files/patch-src_gpt.c @@ -0,0 +1,59 @@ +--- src/gpt.c.orig	2024-01-31 20:08:46 UTC ++++ src/gpt.c +@@ -16,6 +16,11 @@ + #include <stdio.h> + #include <stdlib.h> + #include <string.h> ++#if defined(__FreeBSD__) ++#  include <sys/disk.h> ++#  undef LIST_HEAD ++#endif ++#include <sys/ioctl.h> + #include <sys/mount.h> + #include <sys/param.h> + #include <sys/stat.h> +@@ -60,6 +65,7 @@ is_pmbr_valid(legacy_mbr *mbr) + 	return (magic && found); + } +  ++#if defined(__linux__) + /** +  * kernel_has_blkgetsize64() +  * +@@ -92,6 +98,7 @@ kernel_has_blkgetsize64(void) + 		return 0; + 	return 1; + } ++#endif +  + /************************************************************ +  * _get_num_sectors +@@ -114,6 +121,8 @@ _get_num_sectors(int filedes) + 	unsigned long sectors=0; + 	uint64_t bytes=0; + 	int rc; ++ ++#if defined(__linux__) + 	if (kernel_has_blkgetsize64()) { + 		rc = ioctl(filedes, BLKGETSIZE64, &bytes); + 		if (!rc) +@@ -125,6 +134,19 @@ _get_num_sectors(int filedes) + 		return 0; +  + 	return sectors; ++#elif defined(__FreeBSD__) ++	rc = ioctl(filedes, DIOCGMEDIASIZE, &bytes); ++	if (rc == -1) ++		return 0; ++ ++	rc = ioctl(filedes, DIOCGSECTORSIZE, §ors); ++	if (rc == -1) ++		return 0; ++ ++	return bytes / sectors; ++#else ++	return 0; ++#endif + } +  + /************************************************************ | 
