From 8280c8c0945a7fe4beb484539c3365d7177ab5e2 Mon Sep 17 00:00:00 2001 From: Dave Chapman Date: Wed, 13 Dec 2006 20:26:44 +0000 Subject: [PATCH] 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 --- docs/CREDITS | 2 +- tools/ipodpatcher/ipodio-posix.c | 22 +++++++++++++++++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/docs/CREDITS b/docs/CREDITS index 5a30adce6a..d2f30058a4 100644 --- a/docs/CREDITS +++ b/docs/CREDITS @@ -254,4 +254,4 @@ Will Robertson Stephane Doyon Robert Carboneau Ye Wei - +Bryan Childs diff --git a/tools/ipodpatcher/ipodio-posix.c b/tools/ipodpatcher/ipodio-posix.c index cfded35390..4b55d62629 100644 --- a/tools/ipodpatcher/ipodio-posix.c +++ b/tools/ipodpatcher/ipodio-posix.c @@ -24,6 +24,22 @@ #include #include #include +#include +#include +#if defined(__APPLE__) && defined(__MACH__) +#include +#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 @@ int ipod_open(HANDLE* dh, char* diskname, int* sector_size) 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; }