summaryrefslogtreecommitdiff
path: root/tools/iriver.c
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2008-06-18 22:30:59 +0000
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2008-06-18 22:30:59 +0000
commitc47988034fbd5d7de8fcda2a87224bdb0b5dcfe6 (patch)
treedeb96279c6952871b5c0f47ec25879bb73240afd /tools/iriver.c
parentefbd2b8d7a9295f1a5544717c1b86527cc27ac7b (diff)
downloadrockbox-c47988034fbd5d7de8fcda2a87224bdb0b5dcfe6.tar.gz
rockbox-c47988034fbd5d7de8fcda2a87224bdb0b5dcfe6.zip
Factor out scramble / mkboot functions to allow easier reuse (for rbutil).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17732 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'tools/iriver.c')
-rw-r--r--tools/iriver.c50
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
99int iriver_decode(char *infile_name, char *outfile_name, BOOL modify, 99int 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
261int iriver_encode(char *infile_name, char *outfile_name, BOOL modify ) 273int 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}