summaryrefslogtreecommitdiff
path: root/rbutil/ipodpatcher/ipodpatcher.c
diff options
context:
space:
mode:
Diffstat (limited to 'rbutil/ipodpatcher/ipodpatcher.c')
-rw-r--r--rbutil/ipodpatcher/ipodpatcher.c44
1 files changed, 23 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
796} 796}
797 797
798 798
799int ipod_has_bootloader(struct ipod_t* ipod)
800{
801 /* The 2nd gen Nano is installed differently */
802 if (ipod->modelnum == 62) {
803 int i;
804 int has_osbk = 0;
805 /* Check if we have an OSBK image */
806 for (i = 0; i < ipod->nimages; i++) {
807 if (ipod->ipod_directory[i].ftype==FTYPE_OSBK) {
808 has_osbk = 1;
809 }
810 }
811 return has_osbk;
812 }
813 else {
814 return (ipod->ipod_directory[0].entryOffset != 0);
815 }
816}
817
818
799/* 819/*
800 Bootloader installation on the Nano2G consists of renaming the 820 Bootloader installation on the Nano2G consists of renaming the
801 OSOS image to OSBK and then writing the Rockbox bootloader as a 821 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
810 830
811static int add_bootloader_nano2g(struct ipod_t* ipod, char* filename, int type) 831static int add_bootloader_nano2g(struct ipod_t* ipod, char* filename, int type)
812{ 832{
813 int i;
814 int has_osbk = 0;
815
816 /* Check if we already have an OSBK image */ 833 /* Check if we already have an OSBK image */
817 for (i = 0; i < ipod->nimages; i++) { 834 if (ipod_has_bootloader(ipod) == 0) {
818 if (ipod->ipod_directory[i].ftype==FTYPE_OSBK) {
819 has_osbk = 1;
820 }
821 }
822
823 if (has_osbk == 0) {
824 /* First-time install - rename OSOS to OSBK and create new OSOS for bootloader */ 835 /* First-time install - rename OSOS to OSBK and create new OSOS for bootloader */
825 fprintf(stderr,"[INFO] Creating OSBK backup image of original firmware\n"); 836 fprintf(stderr,"[INFO] Creating OSBK backup image of original firmware\n");
826 837
@@ -841,17 +852,8 @@ static int add_bootloader_nano2g(struct ipod_t* ipod, char* filename, int type)
841 852
842static int delete_bootloader_nano2g(struct ipod_t* ipod) 853static int delete_bootloader_nano2g(struct ipod_t* ipod)
843{ 854{
844 int i;
845 int has_osbk = 0;
846
847 /* Check if we have an OSBK image */ 855 /* Check if we have an OSBK image */
848 for (i = 0; i < ipod->nimages; i++) { 856 if (ipod_has_bootloader(ipod) == 0) {
849 if (ipod->ipod_directory[i].ftype==FTYPE_OSBK) {
850 has_osbk = 1;
851 }
852 }
853
854 if (has_osbk == 0) {
855 fprintf(stderr,"[ERR] No OSBK image found - nothing to uninstall\n"); 857 fprintf(stderr,"[ERR] No OSBK image found - nothing to uninstall\n");
856 return -1; 858 return -1;
857 } else { 859 } else {
@@ -1118,7 +1120,7 @@ int delete_bootloader(struct ipod_t* ipod)
1118 1120
1119 /* Firstly check we have a bootloader... */ 1121 /* Firstly check we have a bootloader... */
1120 1122
1121 if (ipod->ipod_directory[0].entryOffset == 0) { 1123 if (ipod_has_bootloader(ipod) == 0) {
1122 fprintf(stderr,"[ERR] No bootloader found.\n"); 1124 fprintf(stderr,"[ERR] No bootloader found.\n");
1123 return -1; 1125 return -1;
1124 } 1126 }