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 + } + + /************************************************************ |