A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd

tools/iriver: fix resource management in encode/decode functions

Change-Id: Ib0b38378c66d5902694d9af9fd0271d616101660

authored by

James Buren and committed by
William Wilgus
da45b37f a20755e9

+44 -45
+44 -45
tools/iriver.c
··· 99 int iriver_decode(const char *infile_name, const char *outfile_name, BOOL modify, 100 enum striptype stripmode ) 101 { 102 FILE * infile = NULL; 103 FILE * outfile = NULL; 104 int i = -1; ··· 110 unsigned char newmunge; 111 signed long lenread; 112 int s = 0; 113 - unsigned char * pChecksums, * ppChecksums = 0; 114 unsigned char ck; 115 116 infile = openinfile(infile_name); ··· 121 { 122 fprintf( stderr, "This doesn't look like a valid encrypted iHP " 123 "firmware - reason: header length\n" ); 124 - fclose(infile); 125 - fclose(outfile); 126 - return -1; 127 }; 128 129 i = testheader( headerdata ); ··· 131 { 132 fprintf( stderr, "This firmware is for an unknown model, or is not" 133 " a valid encrypted iHP firmware\n" ); 134 - fclose(infile); 135 - fclose(outfile); 136 - return -2; 137 }; 138 fprintf( stderr, "Model %s\n", models[ i ] ); 139 ··· 151 { 152 fprintf( stderr, "This doesn't look like a valid encrypted " 153 "iHP firmware - reason: file 'length' data\n" ); 154 - fclose(infile); 155 - fclose(outfile); 156 - return -3; 157 }; 158 159 minsize = firmware_minsize[i]; ··· 226 { 227 fprintf( stderr, "This doesn't look like a valid encrypted " 228 "iHP firmware - reason: ESTFBINR 'length' data\n" ); 229 - fclose(infile); 230 - fclose(outfile); 231 - return -4; 232 }; 233 234 if( fp != dwLength2 ) 235 { 236 fprintf( stderr, "This doesn't look like a valid encrypted " 237 "iHP firmware - reason: 'length2' mismatch\n" ); 238 - fclose(infile); 239 - fclose(outfile); 240 - return -5; 241 }; 242 243 fp = 0; ··· 252 { 253 fprintf( stderr, "This doesn't look like a valid encrypted " 254 "iHP firmware - reason: Checksum mismatch!" ); 255 - fclose(infile); 256 - fclose(outfile); 257 - return -6; 258 }; 259 ppChecksums += lenread; 260 }; ··· 263 { 264 fprintf( stderr, "This doesn't look like a valid encrypted " 265 "iHP firmware - reason: 'length3' mismatch\n" ); 266 - fclose(infile); 267 - fclose(outfile); 268 - return -7; 269 }; 270 271 ··· 287 break; 288 }; 289 290 - return 0; 291 } 292 293 int iriver_encode(const char *infile_name, const char *outfile_name, BOOL modify ) 294 { 295 FILE * infile = NULL; 296 FILE * outfile = NULL; 297 int i = -1; ··· 303 unsigned char newmunge; 304 signed long lenread; 305 int s = 0; 306 - unsigned char * pChecksums, * ppChecksums; 307 unsigned char ck; 308 309 infile = openinfile(infile_name); ··· 314 { 315 fprintf( stderr, "This doesn't look like a valid decoded " 316 "iHP firmware - reason: header length\n" ); 317 - fclose(infile); 318 - fclose(outfile); 319 - return -1; 320 }; 321 322 if( modify ) ··· 329 { 330 fprintf( stderr, "This firmware is for an unknown model, or is not" 331 " a valid decoded iHP firmware\n" ); 332 - fclose(infile); 333 - fclose(outfile); 334 - return -2; 335 }; 336 fprintf( stderr, "Model %s\n", models[ i ] ); 337 ··· 348 { 349 fprintf( stderr, "This doesn't look like a valid decoded iHP" 350 " firmware - reason: file 'length' data\n" ); 351 - fclose(infile); 352 - fclose(outfile); 353 - return -3; 354 }; 355 356 minsize = firmware_minsize[i]; ··· 401 { 402 fprintf( stderr, "This doesn't look like a valid decoded iHP" 403 " firmware - reason: ESTFBINR 'length' data\n" ); 404 - fclose(infile); 405 - fclose(outfile); 406 - return -4; 407 }; 408 409 if( fp != dwLength2 ) 410 { 411 fprintf( stderr, "This doesn't look like a valid decoded " 412 "iHP firmware - reason: 'length1' mismatch\n" ); 413 - fclose(infile); 414 - fclose(outfile); 415 - return -5; 416 }; 417 418 /* write out remainder w/out applying descrambler */ ··· 431 { 432 fprintf( stderr, "This doesn't look like a valid decoded " 433 "iHP firmware - reason: 'length2' mismatch\n" ); 434 - fclose(infile); 435 - fclose(outfile); 436 - return -6; 437 }; 438 439 fprintf( stderr, "File encoded successfully and checksum table built!\n" ); 440 441 - fclose(infile); 442 - fclose(outfile); 443 - return 0; 444 }
··· 99 int iriver_decode(const char *infile_name, const char *outfile_name, BOOL modify, 100 enum striptype stripmode ) 101 { 102 + int rv = 0; 103 FILE * infile = NULL; 104 FILE * outfile = NULL; 105 int i = -1; ··· 111 unsigned char newmunge; 112 signed long lenread; 113 int s = 0; 114 + unsigned char * pChecksums = NULL, * ppChecksums = NULL; 115 unsigned char ck; 116 117 infile = openinfile(infile_name); ··· 122 { 123 fprintf( stderr, "This doesn't look like a valid encrypted iHP " 124 "firmware - reason: header length\n" ); 125 + rv = -1; 126 + goto bail; 127 }; 128 129 i = testheader( headerdata ); ··· 131 { 132 fprintf( stderr, "This firmware is for an unknown model, or is not" 133 " a valid encrypted iHP firmware\n" ); 134 + rv = -2; 135 + goto bail; 136 }; 137 fprintf( stderr, "Model %s\n", models[ i ] ); 138 ··· 150 { 151 fprintf( stderr, "This doesn't look like a valid encrypted " 152 "iHP firmware - reason: file 'length' data\n" ); 153 + rv = -3; 154 + goto bail; 155 }; 156 157 minsize = firmware_minsize[i]; ··· 224 { 225 fprintf( stderr, "This doesn't look like a valid encrypted " 226 "iHP firmware - reason: ESTFBINR 'length' data\n" ); 227 + rv = -4; 228 + goto bail; 229 }; 230 231 if( fp != dwLength2 ) 232 { 233 fprintf( stderr, "This doesn't look like a valid encrypted " 234 "iHP firmware - reason: 'length2' mismatch\n" ); 235 + rv = -5; 236 + goto bail; 237 }; 238 239 fp = 0; ··· 248 { 249 fprintf( stderr, "This doesn't look like a valid encrypted " 250 "iHP firmware - reason: Checksum mismatch!" ); 251 + rv = -6; 252 + goto bail; 253 }; 254 ppChecksums += lenread; 255 }; ··· 258 { 259 fprintf( stderr, "This doesn't look like a valid encrypted " 260 "iHP firmware - reason: 'length3' mismatch\n" ); 261 + rv = -7; 262 + goto bail; 263 }; 264 265 ··· 281 break; 282 }; 283 284 + bail: 285 + if (infile != NULL) 286 + fclose(infile); 287 + if (outfile != NULL) 288 + fclose(outfile); 289 + free(pChecksums); 290 + return rv; 291 } 292 293 int iriver_encode(const char *infile_name, const char *outfile_name, BOOL modify ) 294 { 295 + int rv = 0; 296 FILE * infile = NULL; 297 FILE * outfile = NULL; 298 int i = -1; ··· 304 unsigned char newmunge; 305 signed long lenread; 306 int s = 0; 307 + unsigned char * pChecksums = NULL, * ppChecksums = NULL; 308 unsigned char ck; 309 310 infile = openinfile(infile_name); ··· 315 { 316 fprintf( stderr, "This doesn't look like a valid decoded " 317 "iHP firmware - reason: header length\n" ); 318 + rv = -1; 319 + goto bail; 320 }; 321 322 if( modify ) ··· 329 { 330 fprintf( stderr, "This firmware is for an unknown model, or is not" 331 " a valid decoded iHP firmware\n" ); 332 + rv = -2; 333 + goto bail; 334 }; 335 fprintf( stderr, "Model %s\n", models[ i ] ); 336 ··· 347 { 348 fprintf( stderr, "This doesn't look like a valid decoded iHP" 349 " firmware - reason: file 'length' data\n" ); 350 + rv = -3; 351 + goto bail; 352 }; 353 354 minsize = firmware_minsize[i]; ··· 399 { 400 fprintf( stderr, "This doesn't look like a valid decoded iHP" 401 " firmware - reason: ESTFBINR 'length' data\n" ); 402 + rv = -4; 403 + goto bail; 404 }; 405 406 if( fp != dwLength2 ) 407 { 408 fprintf( stderr, "This doesn't look like a valid decoded " 409 "iHP firmware - reason: 'length1' mismatch\n" ); 410 + rv = -5; 411 + goto bail; 412 }; 413 414 /* write out remainder w/out applying descrambler */ ··· 427 { 428 fprintf( stderr, "This doesn't look like a valid decoded " 429 "iHP firmware - reason: 'length2' mismatch\n" ); 430 + rv = -6; 431 + goto bail; 432 }; 433 434 fprintf( stderr, "File encoded successfully and checksum table built!\n" ); 435 436 + bail: 437 + if (infile != NULL) 438 + fclose(infile); 439 + if (outfile != NULL) 440 + fclose(outfile); 441 + free(pChecksums); 442 + return rv; 443 }