Okay, here's my current set of diffs for gptfdisk:
-----------------
diff --git a/diskio-unix.cc b/diskio-unix.cc
index af71cdb..83b60f9 100644
--- a/diskio-unix.cc
+++ b/diskio-unix.cc
@@ -248,6 +248,13 @@ int DiskIO::DiskSync(void) {
<< "You should reboot or remove the drive.\n";
platformFound++;
#endif
+#if defined (__OpenBSD__) // Shamelessly parroting the FreeBSD code.
+ sleep(2);
+ i = fsync(fd); // Is this how to force a flush on a disk device?
+ cout << "Warning: The kernel may continue to use old or deleted
partitions.\n"
+ << "You should reboot or remove the drive.\n";
+ platformFound++;
+#endif
#ifdef __linux__
sleep(1); // Theoretically unnecessary, but ioctl() fails
sometimes if omitted....
fsync(fd);
diff --git a/diskio.h b/diskio.h
index 631a43a..c198f29 100644
--- a/diskio.h
+++ b/diskio.h
@@ -29,7 +29,7 @@
#include <sys/dkio.h>
#endif
-#if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined
(__APPLE__)
+#if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined
(__OpenBSD__) || defined (__APPLE__)
#define fstat64 fstat
#define stat64 stat
#endif
diff --git a/guid.cc b/guid.cc
index 1e73ab7..0fd8bfe 100644
--- a/guid.cc
+++ b/guid.cc
@@ -147,6 +147,8 @@ void GUIDData::Randomize(void) {
ReverseBytes(&uuidData[4], 2);
ReverseBytes(&uuidData[6], 2);
uuidGenerated = 1;
+#else
+# warning "not compiling in the uuid_generate()"
#endif
#if defined (_RPC_H) || defined (__RPC_H__)
UUID MsUuid;
diff --git a/support.h b/support.h
index b888d92..dd3ea03 100644
--- a/support.h
+++ b/support.h
@@ -10,7 +10,7 @@
#define GPTFDISK_VERSION "1.0.1"
-#if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined
(__APPLE__)
+#if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) ||
(__OpenBSD__) || defined (__APPLE__)
// Darwin (Mac OS) & FreeBSD: disk IOCTLs are different, and there is
no lseek64
#include <sys/disk.h>
#define lseek64 lseek
-----------------
Very lightly tested, but it seems to be functional, to some degree.
-- Joel Rees