summaryrefslogtreecommitdiffstats
path: root/rbutil/ipodpatcher
diff options
context:
space:
mode:
authorDave Chapman <dave@dchapman.com>2007-04-13 23:28:20 +0000
committerDave Chapman <dave@dchapman.com>2007-04-13 23:28:20 +0000
commit427fff4320df478cc0d7a6fa5d68e08d70a844b8 (patch)
tree225a8c24ed7304c9fe23ffa16698cca152985801 /rbutil/ipodpatcher
parent266707f81856e4a8310f6d8dacfc7b9a7033106c (diff)
downloadrockbox-427fff4320df478cc0d7a6fa5d68e08d70a844b8.tar.gz
rockbox-427fff4320df478cc0d7a6fa5d68e08d70a844b8.zip
Add -rfb option for reading the main firmware (OSOS image) as a binary file.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13148 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil/ipodpatcher')
-rw-r--r--rbutil/ipodpatcher/ipodpatcher.c25
-rw-r--r--rbutil/ipodpatcher/ipodpatcher.h2
-rw-r--r--rbutil/ipodpatcher/main.c12
3 files changed, 26 insertions, 13 deletions
diff --git a/rbutil/ipodpatcher/ipodpatcher.c b/rbutil/ipodpatcher/ipodpatcher.c
index 6fcf0c8c27..331c7f0322 100644
--- a/rbutil/ipodpatcher/ipodpatcher.c
+++ b/rbutil/ipodpatcher/ipodpatcher.c
@@ -885,7 +885,7 @@ int write_firmware(struct ipod_t* ipod, char* filename, int type)
return 0;
}
-int read_firmware(struct ipod_t* ipod, char* filename)
+int read_firmware(struct ipod_t* ipod, char* filename, int type)
{
int length;
int i;
@@ -921,22 +921,25 @@ int read_firmware(struct ipod_t* ipod, char* filename)
return -1;
}
- chksum = ipod->modelnum;
- for (i = 0; i < length; i++) {
- /* add 8 unsigned bits but keep a 32 bit sum */
- chksum += sectorbuf[i];
- }
-
- int2be(chksum,header);
- memcpy(header+4, ipod->modelname,4);
-
outfile = open(filename,O_CREAT|O_TRUNC|O_WRONLY|O_BINARY,0666);
if (outfile < 0) {
fprintf(stderr,"[ERR] Couldn't open file %s\n",filename);
return -1;
}
- write(outfile,header,8);
+ if (type == FILETYPE_DOT_IPOD) {
+ chksum = ipod->modelnum;
+ for (i = 0; i < length; i++) {
+ /* add 8 unsigned bits but keep a 32 bit sum */
+ chksum += sectorbuf[i];
+ }
+
+ int2be(chksum,header);
+ memcpy(header+4, ipod->modelname,4);
+
+ write(outfile,header,8);
+ }
+
write(outfile,sectorbuf,length);
close(outfile);
diff --git a/rbutil/ipodpatcher/ipodpatcher.h b/rbutil/ipodpatcher/ipodpatcher.h
index 4c1eee58af..2339687318 100644
--- a/rbutil/ipodpatcher/ipodpatcher.h
+++ b/rbutil/ipodpatcher/ipodpatcher.h
@@ -41,7 +41,7 @@ int diskmove(struct ipod_t* ipod, int delta);
int add_bootloader(struct ipod_t* ipod, char* filename, int type);
int delete_bootloader(struct ipod_t* ipod);
int write_firmware(struct ipod_t* ipod, char* filename, int type);
-int read_firmware(struct ipod_t* ipod, char* filename);
+int read_firmware(struct ipod_t* ipod, char* filename, int type);
int read_directory(struct ipod_t* ipod);
int list_images(struct ipod_t* ipod);
int getmodel(struct ipod_t* ipod, int ipod_version);
diff --git a/rbutil/ipodpatcher/main.c b/rbutil/ipodpatcher/main.c
index e60b1d7034..6328e2df99 100644
--- a/rbutil/ipodpatcher/main.c
+++ b/rbutil/ipodpatcher/main.c
@@ -76,6 +76,7 @@ void print_usage(void)
fprintf(stderr," -r, --read-partition bootpartition.bin\n");
fprintf(stderr," -w, --write-partition bootpartition.bin\n");
fprintf(stderr," -rf, --read-firmware filename.ipod\n");
+ fprintf(stderr," -rfb, --read-firmware-bin filename.bin\n");
fprintf(stderr," -wf, --write-firmware filename.ipod\n");
fprintf(stderr," -wfb, --write-firmware-bin filename.bin\n");
fprintf(stderr," -a, --add-bootloader filename.ipod\n");
@@ -234,6 +235,15 @@ int main(int argc, char* argv[])
} else if ((strcmp(argv[i],"-rf")==0) ||
(strcmp(argv[i],"--read-firmware")==0)) {
action = READ_FIRMWARE;
+ type = FILETYPE_DOT_IPOD;
+ i++;
+ if (i == argc) { print_usage(); return 1; }
+ filename=argv[i];
+ i++;
+ } else if ((strcmp(argv[i],"-rfb")==0) ||
+ (strcmp(argv[i],"--read-firmware-bin")==0)) {
+ action = READ_FIRMWARE;
+ type = FILETYPE_DOT_BIN;
i++;
if (i == argc) { print_usage(); return 1; }
filename=argv[i];
@@ -399,7 +409,7 @@ int main(int argc, char* argv[])
fprintf(stderr,"[ERR] --write-firmware failed.\n");
}
} else if (action==READ_FIRMWARE) {
- if (read_firmware(&ipod, filename)==0) {
+ if (read_firmware(&ipod, filename, type)==0) {
fprintf(stderr,"[INFO] Firmware read to file %s.\n",filename);
} else {
fprintf(stderr,"[ERR] --read-firmware failed.\n");