diff options
author | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2012-07-01 12:29:47 +0200 |
---|---|---|
committer | Dominik Riebeling <Dominik.Riebeling@gmail.com> | 2012-07-01 12:34:59 +0200 |
commit | bf1c491c2b510648a3c1efc2c381e30635248d18 (patch) | |
tree | 039f50a8c5eaae0270e5ae295de4ee23a9ded9ed /rbutil/ipodpatcher | |
parent | d8f5a00fc1cd8beff431bd236377b3fccece29fd (diff) | |
download | rockbox-bf1c491c2b510648a3c1efc2c381e30635248d18.tar.gz rockbox-bf1c491c2b510648a3c1efc2c381e30635248d18.zip |
Move check for existing bootloader to ipodpatcher.
Bootloader handling is different on nano2g compared to the other supported Ipod
models. Since ipodpatcher handles this internally make ipodpatcher also provide
a way to check this when using from Rockbox Utility to avoid duplicating the
(already existing) checks in the latter.
Fixes wrong "bootloader already installed" message on nano2g.
Change-Id: Ibc658d775fbac7cf9a7e329d445fe97828a455d8
Diffstat (limited to 'rbutil/ipodpatcher')
-rw-r--r-- | rbutil/ipodpatcher/ipodpatcher.c | 44 | ||||
-rw-r--r-- | rbutil/ipodpatcher/ipodpatcher.h | 1 |
2 files changed, 24 insertions, 21 deletions
diff --git a/rbutil/ipodpatcher/ipodpatcher.c b/rbutil/ipodpatcher/ipodpatcher.c index 9f446d4ea4..542e078605 100644 --- a/rbutil/ipodpatcher/ipodpatcher.c +++ b/rbutil/ipodpatcher/ipodpatcher.c @@ -796,6 +796,26 @@ int add_new_image(struct ipod_t* ipod, char* imagename, char* filename, int type } +int ipod_has_bootloader(struct ipod_t* ipod) +{ + /* The 2nd gen Nano is installed differently */ + if (ipod->modelnum == 62) { + int i; + int has_osbk = 0; + /* Check if we have an OSBK image */ + for (i = 0; i < ipod->nimages; i++) { + if (ipod->ipod_directory[i].ftype==FTYPE_OSBK) { + has_osbk = 1; + } + } + return has_osbk; + } + else { + return (ipod->ipod_directory[0].entryOffset != 0); + } +} + + /* Bootloader installation on the Nano2G consists of renaming the OSOS image to OSBK and then writing the Rockbox bootloader as a @@ -810,17 +830,8 @@ int add_new_image(struct ipod_t* ipod, char* imagename, char* filename, int type static int add_bootloader_nano2g(struct ipod_t* ipod, char* filename, int type) { - int i; - int has_osbk = 0; - /* Check if we already have an OSBK image */ - for (i = 0; i < ipod->nimages; i++) { - if (ipod->ipod_directory[i].ftype==FTYPE_OSBK) { - has_osbk = 1; - } - } - - if (has_osbk == 0) { + if (ipod_has_bootloader(ipod) == 0) { /* First-time install - rename OSOS to OSBK and create new OSOS for bootloader */ fprintf(stderr,"[INFO] Creating OSBK backup image of original firmware\n"); @@ -841,17 +852,8 @@ static int add_bootloader_nano2g(struct ipod_t* ipod, char* filename, int type) static int delete_bootloader_nano2g(struct ipod_t* ipod) { - int i; - int has_osbk = 0; - /* Check if we have an OSBK image */ - for (i = 0; i < ipod->nimages; i++) { - if (ipod->ipod_directory[i].ftype==FTYPE_OSBK) { - has_osbk = 1; - } - } - - if (has_osbk == 0) { + if (ipod_has_bootloader(ipod) == 0) { fprintf(stderr,"[ERR] No OSBK image found - nothing to uninstall\n"); return -1; } else { @@ -1118,7 +1120,7 @@ int delete_bootloader(struct ipod_t* ipod) /* Firstly check we have a bootloader... */ - if (ipod->ipod_directory[0].entryOffset == 0) { + if (ipod_has_bootloader(ipod) == 0) { fprintf(stderr,"[ERR] No bootloader found.\n"); return -1; } diff --git a/rbutil/ipodpatcher/ipodpatcher.h b/rbutil/ipodpatcher/ipodpatcher.h index 30a1b1e9fd..dc3f100520 100644 --- a/rbutil/ipodpatcher/ipodpatcher.h +++ b/rbutil/ipodpatcher/ipodpatcher.h @@ -69,6 +69,7 @@ void ipod_get_ramsize(struct ipod_t* ipod); int read_aupd(struct ipod_t* ipod, char* filename); int write_aupd(struct ipod_t* ipod, char* filename); off_t filesize(int fd); +int ipod_has_bootloader(struct ipod_t* ipod); #ifdef __cplusplus } |