--- ipp_rb/ipodio-posix.c 2006-12-13 13:11:22.000000000 +0000 +++ ipodpatcher/ipodio-posix.c 2006-12-13 16:04:32.000000000 +0000 @@ -24,6 +24,8 @@ #include #include #include +#include +#include #include "ipodio.h" @@ -40,9 +42,23 @@ return -1; } - /* TODO: Detect sector size */ - *sector_size = 512; - + /* TODO: Detect sector size for OSes other than linux */ +#if defined(linux) || defined(__linux) + if(ioctl(*dh,BLKSSZGET,sector_size) < 0) { + fprintf(stderr,"[ERR] ioctl() call to get sector size failed\n)"); + } +#elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) \ + || defined(__bsdi__) || defined(__DragonFly__) + if(ioctl(*dh,DIOCGSECTORSIZE,sector_size) < 0) { + fprintf(stderr,"[ERR] ioctl() call to get sector size failed\n)"); + } +#elif defined(__APPLE__&__MACH__) + if(ioctl(*dh,DKIOCGETBLOCKSIZE,sector_size) < 0{ + fprintf(stderr,"[ERR] ioctl() call to get sector size failed\n)"); + } +#else + *sector_size=512; +#endif return 0; }