summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/ipodpatcher/ipodpatcher.c28
1 files changed, 20 insertions, 8 deletions
diff --git a/tools/ipodpatcher/ipodpatcher.c b/tools/ipodpatcher/ipodpatcher.c
index 2614849..32c1291 100644
--- a/tools/ipodpatcher/ipodpatcher.c
+++ b/tools/ipodpatcher/ipodpatcher.c
@@ -311,13 +311,14 @@ int main(int argc, char* argv[])
int p = 0;
int diskno = -1;
int sector_size;
- DISK_GEOMETRY_EX diskgeometry;
+ DISK_GEOMETRY_EX diskgeometry_ex;
+ DISK_GEOMETRY diskgeometry;
char diskname[32];
HANDLE dh;
char* filename = NULL;
off_t inputsize;
- fprintf(stderr,"ipodpatcher v0.4 - (C) Dave Chapman 2006\n");
+ fprintf(stderr,"ipodpatcher v0.4b - (C) Dave Chapman 2006\n");
fprintf(stderr,"This is free software; see the source for copying conditions. There is NO\n");
fprintf(stderr,"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n");
@@ -385,16 +386,27 @@ int main(int argc, char* argv[])
IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,
NULL,
0,
- &diskgeometry,
- sizeof(diskgeometry),
+ &diskgeometry_ex,
+ sizeof(diskgeometry_ex),
&n,
NULL)) {
- error(" Error reading disk geometry: ");
- return 2;
+ if (!DeviceIoControl(dh,
+ IOCTL_DISK_GET_DRIVE_GEOMETRY,
+ NULL,
+ 0,
+ &diskgeometry,
+ sizeof(diskgeometry),
+ &n,
+ NULL)) {
+ error(" Error reading disk geometry: ");
+ return 2;
+ } else {
+ sector_size=diskgeometry.BytesPerSector;
+ }
+ } else {
+ sector_size=diskgeometry_ex.Geometry.BytesPerSector;
}
- sector_size=diskgeometry.Geometry.BytesPerSector;
-
fprintf(stderr,"[INFO] Reading partition table from %s\n",diskname);
fprintf(stderr,"[INFO] Sector size is %d bytes\n",sector_size);