ports/devel/android-tools-fastboot/files/patch-ext4__utils_ext4__utils.c
Jan Beich e509927864 devel/android-tools-fastboot: update to 4.2.2.r1.2
android.googlesource.com archives have volatile timestamps which makes
them impossible to use as distfiles due to varying checksum.

android organization on GitHub doesn't have platform/system/extras mirror.
And various private and non-vanilla clones seem to lack android-* tags
that are necessary to sync modules.

For now, use my own mirror to avoid local-distfiles and keep the port simple
via multi-GitHub support.
2015-06-10 23:18:09 +00:00

47 lines
1.4 KiB
C

--- ext4_utils/ext4_utils.c.orig 2012-12-18 23:27:26 UTC
+++ ext4_utils/ext4_utils.c
@@ -36,8 +36,16 @@
#if defined(__linux__)
#include <linux/fs.h>
-#elif defined(__APPLE__) && defined(__MACH__)
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \
+ || (defined(__APPLE__) && defined(__MACH__))
#include <sys/disk.h>
+#elif defined(__sun)
+#include <sys/dkio.h>
+#elif defined(__Bitrig__) || defined(__NetBSD__) || defined(__OpenBSD__)
+#include <sys/disklabel.h>
+#include <sys/dkio.h>
+#elif defined(__DragonFly__)
+#include <sys/diskslice.h>
#endif
#include "ext4.h"
@@ -383,10 +391,24 @@ static u64 get_block_device_size(int fd)
u64 size = 0;
int ret;
-#if defined(__linux__)
+#if defined(BLKGETSIZE64)
ret = ioctl(fd, BLKGETSIZE64, &size);
-#elif defined(__APPLE__) && defined(__MACH__)
+#elif defined(DKIOCGETBLOCKCOUNT)
ret = ioctl(fd, DKIOCGETBLOCKCOUNT, &size);
+#elif defined(DIOCGMEDIASIZE)
+ ret = ioctl(fd, DIOCGMEDIASIZE, &size);
+#elif defined(DKIOCGMEDIAINFO)
+ struct dk_minfo minfo;
+ ret = ioctl(fd, DKIOCGMEDIAINFO, &minfo);
+ size = minfo.dki_lbsize * minfo.dki_capacity;
+#elif defined(DIOCGDINFO)
+ struct disklabel dl;
+ ret = ioctl(fd, DIOCGDINFO, &dl);
+ size = dl.d_secsize * dl.d_nsectors * dl.d_ntracks * dl.d_ncylinders;
+#elif defined(DIOCGPART)
+ struct partinfo pi;
+ ret = ioctl(fd, DIOCGPART, &pi);
+ size = pi.media_size;
#else
close(fd);
return 0;