From 76676d772db4b7878fc82a879c55e04f21cfbb1d Mon Sep 17 00:00:00 2001 From: Ella-0 <23418164+Ella-0@users.noreply.github.com> Date: Sat, 1 May 2021 10:50:13 +0000 Subject: Add OpenBSD support --- lib/portability.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'lib/portability.c') diff --git a/lib/portability.c b/lib/portability.c index f3c3c251..6118d0f2 100644 --- a/lib/portability.c +++ b/lib/portability.c @@ -49,7 +49,7 @@ int xgetrandom(void *buf, unsigned buflen, unsigned flags) // Get list of mounted filesystems, including stat and statvfs info. // Returns a reversed list, which is good for finding overmounts and such. -#if defined(__APPLE__) || defined(__FreeBSD__) +#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__) #include @@ -188,7 +188,7 @@ struct mtab_list *xgetmountlist(char *path) #endif -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__OpenBSD__) #include @@ -332,7 +332,7 @@ ssize_t xattr_fset(int fd, const char* name, return fsetxattr(fd, name, value, size, 0, flags); } -#else +#elif !defined(__OpenBSD__) ssize_t xattr_get(const char *path, const char *name, void *value, size_t size) { @@ -534,6 +534,8 @@ int dev_minor(int dev) return ((dev&0xfff00000)>>12)|(dev&0xff); #elif defined(__APPLE__) return dev&0xffffff; +#elif defined(__OpenBSD__) + return minor(dev); #else #error #endif @@ -545,6 +547,8 @@ int dev_major(int dev) return (dev&0xfff00)>>8; #elif defined(__APPLE__) return (dev>>24)&0xff; +#elif defined(__OpenBSD__) + return major(dev); #else #error #endif @@ -556,6 +560,8 @@ int dev_makedev(int major, int minor) return (minor&0xff)|((major&0xfff)<<8)|((minor&0xfff00)<<12); #elif defined(__APPLE__) return (minor&0xffffff)|((major&0xff)<<24); +#elif defined(__OpenBSD__) + return makedev(major, minor); #else #error #endif @@ -563,7 +569,7 @@ int dev_makedev(int major, int minor) char *fs_type_name(struct statfs *statfs) { -#if defined(__APPLE__) +#if defined(__APPLE__) || defined(__OpenBSD__) // macOS has an `f_type` field, but assigns values dynamically as filesystems // are registered. They do give you the name directly though, so use that. return statfs->f_fstypename; @@ -606,6 +612,16 @@ int get_block_device_size(int fd, unsigned long long* size) { return (ioctl(fd, BLKGETSIZE64, size) >= 0); } +#elif defined(__OpenBSD__) +#include +#include +int get_block_device_size(int fd, unsigned long long* size) +{ + struct disklabel lab; + int status = (ioctl(fd, DIOCGDINFO, &lab) >= 0); + *size = lab.d_secsize * lab.d_nsectors; + return status; +} #endif // TODO copy_file_range -- cgit v1.2.3