diff --git a/EmulatorPkg/Unix/Host/BlockIo.c b/EmulatorPkg/Unix/Host/BlockIo.c
index cf2d6b4cda..c0c694be55 100644
--- a/EmulatorPkg/Unix/Host/BlockIo.c
+++ b/EmulatorPkg/Unix/Host/BlockIo.c
@@ -133,6 +133,20 @@ EmuBlockIoOpenDevice (
ioctl (Private->fd, DKIOCGETMAXBLOCKCOUNTWRITE, &Private->Media->OptimalTransferLengthGranularity);
}
+ #elif _NETBSD_SOURCE
+ {
+ u_int BlockSize;
Hi,
Again, thanks for the patches. Please send them in the way I kind of described in my other reply.
s/u_int/UINT/
+ off_t DiskSize;
I think this off_t is fine, per the other off_t usages, I don't know if the maintainers agree.
+
+ if (ioctl (Private->fd, DIOCGSECTORSIZE, &BlockSize) == 0) {
+ Private->Media->BlockSize = BlockSize;
+ }
+
+ if (ioctl (Private->fd, DIOCGMEDIASIZE, &DiskSize) == 0) {
+ Private->NumberOfBlocks = DivU64x32 (DiskSize, (UINT32)BlockSize);
+ Private->Media->LastBlock = Private->NumberOfBlocks - 1;
+ }
+ }
#else
{
size_t BlockSize;
diff --git a/EmulatorPkg/Unix/Host/Host.c b/EmulatorPkg/Unix/Host/Host.c
index 38c01c84af..c505300129 100644
--- a/EmulatorPkg/Unix/Host/Host.c
+++ b/EmulatorPkg/Unix/Host/Host.c
@@ -12,6 +12,12 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
#define MAP_ANONYMOUS MAP_ANON
#endif
+#ifdef _NETBSD_SOURCE
+#define MAP_ANON_FD_ (-1)
+#else
+#define MAP_ANON_FD_ (0)
+#endif
Would there be a harm if we just passed -1 everywhere? It's a bit odd NetBSD explicitly requires this, but AFAIK implementations
either EINVAL on fd != -1 or take whatever since it's anon. The main implementations (Linux, FreeBSD, NetBSD, OpenBSD, macOS) seem to
agree that passing -1 should be safe everywhere (in fact, it's pretty funny that all BSD-derived implementations agree with the fd = -1 thing, but I digress).
The rest of the patch looks mostly ok to me, but then again, I'm not a maintainer for this.
Thanks,
Pedro