diff options
Diffstat (limited to 'tools/iriver.c')
-rw-r--r-- | tools/iriver.c | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/tools/iriver.c b/tools/iriver.c index 6730fbd8b2..4c949c6627 100644 --- a/tools/iriver.c +++ b/tools/iriver.c | |||
@@ -96,7 +96,7 @@ static FILE * openoutfile( const char * filename ) | |||
96 | return F; | 96 | return F; |
97 | } | 97 | } |
98 | 98 | ||
99 | int iriver_decode(char *infile_name, char *outfile_name, BOOL modify, | 99 | int iriver_decode(const char *infile_name, const char *outfile_name, BOOL modify, |
100 | enum striptype stripmode ) | 100 | enum striptype stripmode ) |
101 | { | 101 | { |
102 | FILE * infile = NULL; | 102 | FILE * infile = NULL; |
@@ -120,7 +120,9 @@ int iriver_decode(char *infile_name, char *outfile_name, BOOL modify, | |||
120 | { | 120 | { |
121 | fprintf( stderr, "This doesn't look like a valid encrypted iHP " | 121 | fprintf( stderr, "This doesn't look like a valid encrypted iHP " |
122 | "firmware - reason: header length\n" ); | 122 | "firmware - reason: header length\n" ); |
123 | exit( -1 ); | 123 | fclose(infile); |
124 | fclose(outfile); | ||
125 | return -1; | ||
124 | }; | 126 | }; |
125 | 127 | ||
126 | i = testheader( headerdata ); | 128 | i = testheader( headerdata ); |
@@ -128,7 +130,9 @@ int iriver_decode(char *infile_name, char *outfile_name, BOOL modify, | |||
128 | { | 130 | { |
129 | fprintf( stderr, "This firmware is for an unknown model, or is not" | 131 | fprintf( stderr, "This firmware is for an unknown model, or is not" |
130 | " a valid encrypted iHP firmware\n" ); | 132 | " a valid encrypted iHP firmware\n" ); |
131 | exit( -1 ); | 133 | fclose(infile); |
134 | fclose(outfile); | ||
135 | return -2; | ||
132 | }; | 136 | }; |
133 | fprintf( stderr, "Model %s\n", models[ i ] ); | 137 | fprintf( stderr, "Model %s\n", models[ i ] ); |
134 | 138 | ||
@@ -149,7 +153,9 @@ int iriver_decode(char *infile_name, char *outfile_name, BOOL modify, | |||
149 | { | 153 | { |
150 | fprintf( stderr, "This doesn't look like a valid encrypted " | 154 | fprintf( stderr, "This doesn't look like a valid encrypted " |
151 | "iHP firmware - reason: file 'length' data\n" ); | 155 | "iHP firmware - reason: file 'length' data\n" ); |
152 | exit( -1 ); | 156 | fclose(infile); |
157 | fclose(outfile); | ||
158 | return -3; | ||
153 | }; | 159 | }; |
154 | 160 | ||
155 | pChecksums = ppChecksums = (unsigned char *)( malloc( dwLength3 ) ); | 161 | pChecksums = ppChecksums = (unsigned char *)( malloc( dwLength3 ) ); |
@@ -209,7 +215,9 @@ int iriver_decode(char *infile_name, char *outfile_name, BOOL modify, | |||
209 | { | 215 | { |
210 | fprintf( stderr, "This doesn't look like a valid encrypted " | 216 | fprintf( stderr, "This doesn't look like a valid encrypted " |
211 | "iHP firmware - reason: 'length2' mismatch\n" ); | 217 | "iHP firmware - reason: 'length2' mismatch\n" ); |
212 | exit( -1 ); | 218 | fclose(infile); |
219 | fclose(outfile); | ||
220 | return -4; | ||
213 | }; | 221 | }; |
214 | 222 | ||
215 | fp = 0; | 223 | fp = 0; |
@@ -224,7 +232,9 @@ int iriver_decode(char *infile_name, char *outfile_name, BOOL modify, | |||
224 | { | 232 | { |
225 | fprintf( stderr, "This doesn't look like a valid encrypted " | 233 | fprintf( stderr, "This doesn't look like a valid encrypted " |
226 | "iHP firmware - reason: Checksum mismatch!" ); | 234 | "iHP firmware - reason: Checksum mismatch!" ); |
227 | exit( -1 ); | 235 | fclose(infile); |
236 | fclose(outfile); | ||
237 | return -5; | ||
228 | }; | 238 | }; |
229 | ppChecksums += lenread; | 239 | ppChecksums += lenread; |
230 | }; | 240 | }; |
@@ -233,7 +243,9 @@ int iriver_decode(char *infile_name, char *outfile_name, BOOL modify, | |||
233 | { | 243 | { |
234 | fprintf( stderr, "This doesn't look like a valid encrypted " | 244 | fprintf( stderr, "This doesn't look like a valid encrypted " |
235 | "iHP firmware - reason: 'length3' mismatch\n" ); | 245 | "iHP firmware - reason: 'length3' mismatch\n" ); |
236 | exit( -1 ); | 246 | fclose(infile); |
247 | fclose(outfile); | ||
248 | return -6; | ||
237 | }; | 249 | }; |
238 | 250 | ||
239 | 251 | ||
@@ -258,7 +270,7 @@ int iriver_decode(char *infile_name, char *outfile_name, BOOL modify, | |||
258 | return 0; | 270 | return 0; |
259 | } | 271 | } |
260 | 272 | ||
261 | int iriver_encode(char *infile_name, char *outfile_name, BOOL modify ) | 273 | int iriver_encode(const char *infile_name, const char *outfile_name, BOOL modify ) |
262 | { | 274 | { |
263 | FILE * infile = NULL; | 275 | FILE * infile = NULL; |
264 | FILE * outfile = NULL; | 276 | FILE * outfile = NULL; |
@@ -281,7 +293,9 @@ int iriver_encode(char *infile_name, char *outfile_name, BOOL modify ) | |||
281 | { | 293 | { |
282 | fprintf( stderr, "This doesn't look like a valid decoded " | 294 | fprintf( stderr, "This doesn't look like a valid decoded " |
283 | "iHP firmware - reason: header length\n" ); | 295 | "iHP firmware - reason: header length\n" ); |
284 | exit( -1 ); | 296 | fclose(infile); |
297 | fclose(outfile); | ||
298 | return -1; | ||
285 | }; | 299 | }; |
286 | 300 | ||
287 | if( modify ) | 301 | if( modify ) |
@@ -294,7 +308,9 @@ int iriver_encode(char *infile_name, char *outfile_name, BOOL modify ) | |||
294 | { | 308 | { |
295 | fprintf( stderr, "This firmware is for an unknown model, or is not" | 309 | fprintf( stderr, "This firmware is for an unknown model, or is not" |
296 | " a valid decoded iHP firmware\n" ); | 310 | " a valid decoded iHP firmware\n" ); |
297 | exit( -1 ); | 311 | fclose(infile); |
312 | fclose(outfile); | ||
313 | return -2; | ||
298 | }; | 314 | }; |
299 | fprintf( stderr, "Model %s\n", models[ i ] ); | 315 | fprintf( stderr, "Model %s\n", models[ i ] ); |
300 | 316 | ||
@@ -314,7 +330,9 @@ int iriver_encode(char *infile_name, char *outfile_name, BOOL modify ) | |||
314 | { | 330 | { |
315 | fprintf( stderr, "This doesn't look like a valid decoded iHP" | 331 | fprintf( stderr, "This doesn't look like a valid decoded iHP" |
316 | " firmware - reason: file 'length' data\n" ); | 332 | " firmware - reason: file 'length' data\n" ); |
317 | exit( -1 ); | 333 | fclose(infile); |
334 | fclose(outfile); | ||
335 | return -3; | ||
318 | }; | 336 | }; |
319 | 337 | ||
320 | pChecksums = ppChecksums = (unsigned char *)( malloc( dwLength3 ) ); | 338 | pChecksums = ppChecksums = (unsigned char *)( malloc( dwLength3 ) ); |
@@ -351,7 +369,9 @@ int iriver_encode(char *infile_name, char *outfile_name, BOOL modify ) | |||
351 | { | 369 | { |
352 | fprintf( stderr, "This doesn't look like a valid decoded " | 370 | fprintf( stderr, "This doesn't look like a valid decoded " |
353 | "iHP firmware - reason: 'length1' mismatch\n" ); | 371 | "iHP firmware - reason: 'length1' mismatch\n" ); |
354 | exit( -1 ); | 372 | fclose(infile); |
373 | fclose(outfile); | ||
374 | return -4; | ||
355 | }; | 375 | }; |
356 | 376 | ||
357 | /* write out remainder w/out applying descrambler */ | 377 | /* write out remainder w/out applying descrambler */ |
@@ -370,10 +390,14 @@ int iriver_encode(char *infile_name, char *outfile_name, BOOL modify ) | |||
370 | { | 390 | { |
371 | fprintf( stderr, "This doesn't look like a valid decoded " | 391 | fprintf( stderr, "This doesn't look like a valid decoded " |
372 | "iHP firmware - reason: 'length2' mismatch\n" ); | 392 | "iHP firmware - reason: 'length2' mismatch\n" ); |
373 | exit( -1 ); | 393 | fclose(infile); |
394 | fclose(outfile); | ||
395 | return -5; | ||
374 | }; | 396 | }; |
375 | 397 | ||
376 | fprintf( stderr, "File encoded successfully and checksum table built!\n" ); | 398 | fprintf( stderr, "File encoded successfully and checksum table built!\n" ); |
377 | 399 | ||
400 | fclose(infile); | ||
401 | fclose(outfile); | ||
378 | return 0; | 402 | return 0; |
379 | } | 403 | } |