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;
 }