diff options
Diffstat (limited to 'rbutil/chinachippatcher')
-rw-r--r-- | rbutil/chinachippatcher/chinachip.c | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/rbutil/chinachippatcher/chinachip.c b/rbutil/chinachippatcher/chinachip.c index e7d4095b38..cafb1d189b 100644 --- a/rbutil/chinachippatcher/chinachip.c +++ b/rbutil/chinachippatcher/chinachip.c | |||
@@ -27,6 +27,8 @@ | |||
27 | #include <time.h> | 27 | #include <time.h> |
28 | #include "chinachip.h" | 28 | #include "chinachip.h" |
29 | 29 | ||
30 | #define tr(x) x /* Qt translation support */ | ||
31 | |||
30 | /* From http://www.rockbox.org/wiki/ChinaChip */ | 32 | /* From http://www.rockbox.org/wiki/ChinaChip */ |
31 | struct header | 33 | struct header |
32 | { | 34 | { |
@@ -89,42 +91,42 @@ int chinachip_patch(const char* firmware, const char* bootloader, | |||
89 | fd = fopen(firmware, "rb"); | 91 | fd = fopen(firmware, "rb"); |
90 | if(!fd) | 92 | if(!fd) |
91 | { | 93 | { |
92 | ERR("Can't open file %s!", firmware); | 94 | ERR(tr("Can't open file %s!"), firmware); |
93 | goto err; | 95 | goto err; |
94 | } | 96 | } |
95 | bd = fopen(bootloader, "rb"); | 97 | bd = fopen(bootloader, "rb"); |
96 | if(!bd) | 98 | if(!bd) |
97 | { | 99 | { |
98 | ERR("Can't open file %s!", bootloader); | 100 | ERR(tr("Can't open file %s!"), bootloader); |
99 | goto err; | 101 | goto err; |
100 | } | 102 | } |
101 | 103 | ||
102 | bsize = filesize(bd); | 104 | bsize = filesize(bd); |
103 | INFO("Bootloader size is %d bytes", bsize); | 105 | INFO(tr("Bootloader size is %d bytes"), bsize); |
104 | FCLOSE(bd); | 106 | FCLOSE(bd); |
105 | 107 | ||
106 | fsize = filesize(fd); | 108 | fsize = filesize(fd); |
107 | INFO("Firmware size is %d bytes", fsize); | 109 | INFO(tr("Firmware size is %d bytes"), fsize); |
108 | 110 | ||
109 | buf = malloc(TOTAL_SIZE); | 111 | buf = malloc(TOTAL_SIZE); |
110 | if(buf == NULL) | 112 | if(buf == NULL) |
111 | { | 113 | { |
112 | ERR("Can't allocate %d bytes!", fsize); | 114 | ERR(tr("Can't allocate %d bytes!"), fsize); |
113 | goto err; | 115 | goto err; |
114 | } | 116 | } |
115 | memset(buf, 0, TOTAL_SIZE); | 117 | memset(buf, 0, TOTAL_SIZE); |
116 | 118 | ||
117 | INFO("Reading %s into memory...", firmware); | 119 | INFO(tr("Reading %s into memory..."), firmware); |
118 | if(fread(buf, fsize, 1, fd) != 1) | 120 | if(fread(buf, fsize, 1, fd) != 1) |
119 | { | 121 | { |
120 | ERR("Can't read file %s to memory!", firmware); | 122 | ERR(tr("Can't read file %s to memory!"), firmware); |
121 | goto err; | 123 | goto err; |
122 | } | 124 | } |
123 | FCLOSE(fd); | 125 | FCLOSE(fd); |
124 | 126 | ||
125 | if(memcmp(buf, "WADF", 4)) | 127 | if(memcmp(buf, "WADF", 4)) |
126 | { | 128 | { |
127 | ERR("File %s isn't a valid ChinaChip firmware!", firmware); | 129 | ERR(tr("File %s isn't a valid ChinaChip firmware!"), firmware); |
128 | goto err; | 130 | goto err; |
129 | } | 131 | } |
130 | 132 | ||
@@ -146,30 +148,30 @@ int chinachip_patch(const char* firmware, const char* bootloader, | |||
146 | 148 | ||
147 | if(i >= fsize) | 149 | if(i >= fsize) |
148 | { | 150 | { |
149 | ERR("Couldn't find ccpmp.bin in %s!", firmware); | 151 | ERR(tr("Couldn't find ccpmp.bin in %s!"), firmware); |
150 | goto err; | 152 | goto err; |
151 | } | 153 | } |
152 | INFO("Found ccpmp.bin at %d bytes", ccpmp_pos); | 154 | INFO(tr("Found ccpmp.bin at %d bytes"), ccpmp_pos); |
153 | 155 | ||
154 | if(ccpmp_backup) | 156 | if(ccpmp_backup) |
155 | { | 157 | { |
156 | bd = fopen(ccpmp_backup, "wb"); | 158 | bd = fopen(ccpmp_backup, "wb"); |
157 | if(!bd) | 159 | if(!bd) |
158 | { | 160 | { |
159 | ERR("Can't open file %s!", ccpmp_backup); | 161 | ERR(tr("Can't open file %s!"), ccpmp_backup); |
160 | goto err; | 162 | goto err; |
161 | } | 163 | } |
162 | 164 | ||
163 | INFO("Writing %d bytes to %s...", ccpmp_size, ccpmp_backup); | 165 | INFO(tr("Writing %d bytes to %s..."), ccpmp_size, ccpmp_backup); |
164 | if(fwrite(&buf[ccpmp_pos], ccpmp_size, 1, bd) != 1) | 166 | if(fwrite(&buf[ccpmp_pos], ccpmp_size, 1, bd) != 1) |
165 | { | 167 | { |
166 | ERR("Can't write to file %s!", ccpmp_backup); | 168 | ERR(tr("Can't write to file %s!"), ccpmp_backup); |
167 | goto err; | 169 | goto err; |
168 | } | 170 | } |
169 | FCLOSE(bd); | 171 | FCLOSE(bd); |
170 | } | 172 | } |
171 | 173 | ||
172 | INFO("Renaming it to ccpmp.old..."); | 174 | INFO(tr("Renaming it to ccpmp.old...")); |
173 | buf[ccpmp_pos + 6] = 'o'; | 175 | buf[ccpmp_pos + 6] = 'o'; |
174 | buf[ccpmp_pos + 7] = 'l'; | 176 | buf[ccpmp_pos + 7] = 'l'; |
175 | buf[ccpmp_pos + 8] = 'd'; | 177 | buf[ccpmp_pos + 8] = 'd'; |
@@ -177,27 +179,27 @@ int chinachip_patch(const char* firmware, const char* bootloader, | |||
177 | bd = fopen(bootloader, "rb"); | 179 | bd = fopen(bootloader, "rb"); |
178 | if(!bd) | 180 | if(!bd) |
179 | { | 181 | { |
180 | ERR("Can't open file %s!", bootloader); | 182 | ERR(tr("Can't open file %s!"), bootloader); |
181 | goto err; | 183 | goto err; |
182 | } | 184 | } |
183 | 185 | ||
184 | /* Also include path size */ | 186 | /* Also include path size */ |
185 | ccpmp_pos -= sizeof(uint32_t); | 187 | ccpmp_pos -= sizeof(uint32_t); |
186 | 188 | ||
187 | INFO("Making place for ccpmp.bin..."); | 189 | INFO(tr("Making place for ccpmp.bin...")); |
188 | memmove(&buf[ccpmp_pos + bsize + CCPMPBIN_HEADER_SIZE], | 190 | memmove(&buf[ccpmp_pos + bsize + CCPMPBIN_HEADER_SIZE], |
189 | &buf[ccpmp_pos], fsize - ccpmp_pos); | 191 | &buf[ccpmp_pos], fsize - ccpmp_pos); |
190 | 192 | ||
191 | INFO("Reading %s into memory...", bootloader); | 193 | INFO(tr("Reading %s into memory..."), bootloader); |
192 | if(fread(&buf[ccpmp_pos + CCPMPBIN_HEADER_SIZE], | 194 | if(fread(&buf[ccpmp_pos + CCPMPBIN_HEADER_SIZE], |
193 | bsize, 1, bd) != 1) | 195 | bsize, 1, bd) != 1) |
194 | { | 196 | { |
195 | ERR("Can't read file %s to memory!", bootloader); | 197 | ERR(tr("Can't read file %s to memory!"), bootloader); |
196 | goto err; | 198 | goto err; |
197 | } | 199 | } |
198 | FCLOSE(bd); | 200 | FCLOSE(bd); |
199 | 201 | ||
200 | INFO("Adding header to %s...", bootloader); | 202 | INFO(tr("Adding header to %s..."), bootloader); |
201 | int2le(&buf[ccpmp_pos ], 9); /* Pathname Size */ | 203 | int2le(&buf[ccpmp_pos ], 9); /* Pathname Size */ |
202 | memcpy(&buf[ccpmp_pos + 4 ], "ccpmp.bin", 9); /* Pathname */ | 204 | memcpy(&buf[ccpmp_pos + 4 ], "ccpmp.bin", 9); /* Pathname */ |
203 | memset(&buf[ccpmp_pos + 4 + 9 ], 0x20, sizeof(uint8_t)); /* File Type */ | 205 | memset(&buf[ccpmp_pos + 4 + 9 ], 0x20, sizeof(uint8_t)); /* File Type */ |
@@ -207,7 +209,7 @@ int chinachip_patch(const char* firmware, const char* bootloader, | |||
207 | time_info = localtime(&cur_time); | 209 | time_info = localtime(&cur_time); |
208 | if(time_info == NULL) | 210 | if(time_info == NULL) |
209 | { | 211 | { |
210 | ERR("Can't obtain current time!"); | 212 | ERR(tr("Can't obtain current time!")); |
211 | goto err; | 213 | goto err; |
212 | } | 214 | } |
213 | 215 | ||
@@ -217,11 +219,11 @@ int chinachip_patch(const char* firmware, const char* bootloader, | |||
217 | time_info->tm_hour, | 219 | time_info->tm_hour, |
218 | time_info->tm_min); | 220 | time_info->tm_min); |
219 | 221 | ||
220 | INFO("Computing checksum..."); | 222 | INFO(tr("Computing checksum...")); |
221 | for(i = sizeof(struct header); i < TOTAL_SIZE; i+=4) | 223 | for(i = sizeof(struct header); i < TOTAL_SIZE; i+=4) |
222 | checksum += le2int(&buf[i]); | 224 | checksum += le2int(&buf[i]); |
223 | 225 | ||
224 | INFO("Updating main header..."); | 226 | INFO(tr("Updating main header...")); |
225 | memcpy(&buf[offsetof(struct header, timestamp)], header_time, 12); | 227 | memcpy(&buf[offsetof(struct header, timestamp)], header_time, 12); |
226 | int2le(&buf[offsetof(struct header, size) ], TOTAL_SIZE); | 228 | int2le(&buf[offsetof(struct header, size) ], TOTAL_SIZE); |
227 | int2le(&buf[offsetof(struct header, checksum) ], checksum); | 229 | int2le(&buf[offsetof(struct header, checksum) ], checksum); |
@@ -229,14 +231,14 @@ int chinachip_patch(const char* firmware, const char* bootloader, | |||
229 | od = fopen(output, "wb"); | 231 | od = fopen(output, "wb"); |
230 | if(!od) | 232 | if(!od) |
231 | { | 233 | { |
232 | ERR("Can't open file %s!", output); | 234 | ERR(tr("Can't open file %s!"), output); |
233 | goto err; | 235 | goto err; |
234 | } | 236 | } |
235 | 237 | ||
236 | INFO("Writing output to %s...", output); | 238 | INFO(tr("Writing output to %s..."), output); |
237 | if(fwrite(buf, TOTAL_SIZE, 1, od) != 1) | 239 | if(fwrite(buf, TOTAL_SIZE, 1, od) != 1) |
238 | { | 240 | { |
239 | ERR("Can't write to file %s!", output); | 241 | ERR(tr("Can't write to file %s!"), output); |
240 | goto err; | 242 | goto err; |
241 | } | 243 | } |
242 | fclose(od); | 244 | fclose(od); |