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