summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2012-07-01 12:29:47 +0200
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2012-07-01 12:34:59 +0200
commitbf1c491c2b510648a3c1efc2c381e30635248d18 (patch)
tree039f50a8c5eaae0270e5ae295de4ee23a9ded9ed
parentd8f5a00fc1cd8beff431bd236377b3fccece29fd (diff)
downloadrockbox-bf1c491c2b510648a3c1efc2c381e30635248d18.tar.gz
rockbox-bf1c491c2b510648a3c1efc2c381e30635248d18.tar.bz2
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
-rw-r--r--rbutil/ipodpatcher/ipodpatcher.c44
-rw-r--r--rbutil/ipodpatcher/ipodpatcher.h1
-rw-r--r--rbutil/rbutilqt/base/bootloaderinstallipod.cpp6
3 files changed, 27 insertions, 24 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
}
diff --git a/rbutil/rbutilqt/base/bootloaderinstallipod.cpp b/rbutil/rbutilqt/base/bootloaderinstallipod.cpp
index cb69faa35b..249da13735 100644
--- a/rbutil/rbutilqt/base/bootloaderinstallipod.cpp
+++ b/rbutil/rbutilqt/base/bootloaderinstallipod.cpp
@@ -166,7 +166,7 @@ bool BootloaderInstallIpod::uninstall(void)
return false;
}
- if (ipod.ipod_directory[0].entryOffset == 0) {
+ if (ipod_has_bootloader(&ipod) == 0) {
emit logItem(tr("No bootloader detected."), LOGERROR);
emit done(true);
return false;
@@ -199,8 +199,8 @@ BootloaderInstallBase::BootloaderType BootloaderInstallIpod::installed(void)
}
else {
read_directory(&ipod);
- if(ipod.ipod_directory[0].entryOffset == 0 || ipod.macpod) {
- qDebug() << "[BootloaderInstallIpod] installed: BootloaderOther";
+ getmodel(&ipod,(ipod.ipod_directory[ipod.ososimage].vers>>8));
+ if(!ipod_has_bootloader(&ipod)) {
result = BootloaderOther;
}
else {