Sector-size detection on Posix platforms - tested on Linux and Mac OS X. Based on patch #6433 by Bryan Childs.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11752 a1c6a512-1295-4272-9138-f99709370657
diff --git a/docs/CREDITS b/docs/CREDITS
index 5a30adc..d2f3005 100644
--- a/docs/CREDITS
+++ b/docs/CREDITS
@@ -254,4 +254,4 @@
Stephane Doyon
Robert Carboneau
Ye Wei
-
+Bryan Childs
diff --git a/tools/ipodpatcher/ipodio-posix.c b/tools/ipodpatcher/ipodio-posix.c
index cfded35..4b55d62 100644
--- a/tools/ipodpatcher/ipodio-posix.c
+++ b/tools/ipodpatcher/ipodio-posix.c
@@ -24,6 +24,22 @@
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <sys/mount.h>
+#if defined(__APPLE__) && defined(__MACH__)
+#include <sys/disk.h>
+#endif
+
+#if defined(linux) || defined (__linux)
+ #define IPOD_SECTORSIZE_IOCTL BLKSSZGET
+#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) \
+ || defined(__bsdi__) || defined(__DragonFly__)
+ #define IPOD_SECTORSIZE_IOCTL DIOCGSECTORSIZE
+#elif defined(__APPLE__) && defined(__MACH__)
+ #define IPOD_SECTORSIZE_IOCTL DKIOCGETBLOCKSIZE
+#else
+ #error No sector-size detection implemented for this platform
+#endif
#include "ipodio.h"
@@ -40,9 +56,9 @@
return -1;
}
- /* TODO: Detect sector size */
- *sector_size = 512;
-
+ if(ioctl(*dh,IPOD_SECTORSIZE_IOCTL,sector_size) < 0) {
+ fprintf(stderr,"[ERR] ioctl() call to get sector size failed\n");
+ }
return 0;
}