Fix resource leak with VGMStream container parser, and serialize metadata caching from there as well

CQTexperiment
Christopher Snowhill 2019-12-19 17:12:09 -08:00
parent 072c4346cf
commit 37b75bf6e7
1 changed files with 28 additions and 5 deletions

View File

@ -35,24 +35,47 @@
// input url already has fragment defined - no need to expand further
return [NSMutableArray arrayWithObject:url];
}
NSString * path = [[url absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
VGMSTREAM * stream = init_vgmstream_from_cogfile([[[url absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] UTF8String], 0);
VGMSTREAM * stream = init_vgmstream_from_cogfile([path UTF8String], 0);
if (!stream)
{
ALog(@"Open failed for file: %@", [url absoluteString]);
return NO;
return [NSArray array];
}
VGMInfoCache * sharedMyCache = [VGMInfoCache sharedCache];
NSMutableArray *tracks = [NSMutableArray array];
NSURL * trackurl;
int i;
int subsongs = stream->num_streams;
if (subsongs == 0)
subsongs = 1;
for (i = 1; i <= subsongs; ++i) {
[tracks addObject:[NSURL URLWithString:[[url absoluteString] stringByAppendingFormat:@"#%i", i]]];
{
trackurl = [NSURL URLWithString:[[url absoluteString] stringByAppendingString:@"#1"]];
[sharedMyCache stuffURL:trackurl stream:stream];
[tracks addObject:trackurl];
}
for (i = 2; i <= subsongs; ++i) {
close_vgmstream(stream);
stream = init_vgmstream_from_cogfile([path UTF8String], i);
if (!stream)
return [NSArray array];
trackurl = [NSURL URLWithString:[[url absoluteString] stringByAppendingFormat:@"#%i", i]];
[sharedMyCache stuffURL:trackurl stream:stream];
[tracks addObject:trackurl];
}
close_vgmstream(stream);
return tracks;
}