mirror of
https://github.com/vgmstream/vgmstream.git
synced 2025-01-29 19:37:30 +01:00
Fix different dual stereo files with same extension
This commit is contained in:
parent
5ea57c08d6
commit
8868bf085e
@ -2496,7 +2496,8 @@ static void try_dual_file_stereo(VGMSTREAM * opened_vgmstream, STREAMFILE *strea
|
|||||||
{".V0",".V1"}, /* Homura (PS2) */
|
{".V0",".V1"}, /* Homura (PS2) */
|
||||||
{".L",".R"}, /* Crash Nitro Racing (PS2), Gradius V (PS2) */
|
{".L",".R"}, /* Crash Nitro Racing (PS2), Gradius V (PS2) */
|
||||||
{"_0.dsp","_1.dsp"}, /* Wario World (GC) */
|
{"_0.dsp","_1.dsp"}, /* Wario World (GC) */
|
||||||
{".adpcm","_NxEncoderOut_.adpcm"}, /* Kill la Kill: IF (Switch) */ //todo can't match R>L
|
{".adpcm","_NxEncoderOut_.adpcm"}, /* Kill la Kill: IF (Switch) */
|
||||||
|
{".adpcm","_2.adpcm"}, /* Desire: Remaster Version (Switch) */
|
||||||
};
|
};
|
||||||
char new_filename[PATH_LIMIT];
|
char new_filename[PATH_LIMIT];
|
||||||
char * extension;
|
char * extension;
|
||||||
@ -2541,31 +2542,38 @@ static void try_dual_file_stereo(VGMSTREAM * opened_vgmstream, STREAMFILE *strea
|
|||||||
if (filename_len > this_suffix_len && strchr(this_suffix, '.') != NULL) { /* same suffix with extension */
|
if (filename_len > this_suffix_len && strchr(this_suffix, '.') != NULL) { /* same suffix with extension */
|
||||||
//;VGM_LOG("DFS: suf+ext %s vs %s len %i\n", new_filename, this_suffix, this_suffix_len);
|
//;VGM_LOG("DFS: suf+ext %s vs %s len %i\n", new_filename, this_suffix, this_suffix_len);
|
||||||
if (memcmp(new_filename + (filename_len - this_suffix_len), this_suffix, this_suffix_len) == 0) {
|
if (memcmp(new_filename + (filename_len - this_suffix_len), this_suffix, this_suffix_len) == 0) {
|
||||||
dfs_pair = j;
|
|
||||||
memcpy (new_filename + (filename_len - this_suffix_len), that_suffix,that_suffix_len+1);
|
memcpy (new_filename + (filename_len - this_suffix_len), that_suffix,that_suffix_len+1);
|
||||||
|
dfs_pair = j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (filename_len - extension_len > this_suffix_len) { /* same suffix without extension */
|
else if (filename_len - extension_len > this_suffix_len) { /* same suffix without extension */
|
||||||
//;VGM_LOG("DFS: suf-ext %s vs %s len %i\n", extension - this_suffix_len, this_suffix, this_suffix_len);
|
//;VGM_LOG("DFS: suf-ext %s vs %s len %i\n", extension - this_suffix_len, this_suffix, this_suffix_len);
|
||||||
if (memcmp(extension - this_suffix_len, this_suffix,this_suffix_len) == 0) {
|
if (memcmp(extension - this_suffix_len, this_suffix,this_suffix_len) == 0) {
|
||||||
dfs_pair = j;
|
|
||||||
memmove(extension + that_suffix_len - this_suffix_len, extension,extension_len+1); /* move old extension to end */
|
memmove(extension + that_suffix_len - this_suffix_len, extension,extension_len+1); /* move old extension to end */
|
||||||
memcpy (extension - this_suffix_len, that_suffix,that_suffix_len); /* overwrite with new suffix */
|
memcpy (extension - this_suffix_len, that_suffix,that_suffix_len); /* overwrite with new suffix */
|
||||||
|
dfs_pair = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dfs_pair != -1) {
|
||||||
|
//VGM_LOG("DFS: try %i: %s\n", dfs_pair, new_filename);
|
||||||
|
/* try to init other channel (new_filename now has the opposite name) */
|
||||||
|
dual_streamFile = open_streamfile(streamFile, new_filename);
|
||||||
|
if (!dual_streamFile) {
|
||||||
|
/* restore filename and keep trying (if found it'll break and init) */
|
||||||
|
dfs_pair = -1;
|
||||||
|
get_streamfile_name(streamFile, new_filename, sizeof(new_filename));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* see if the filename had a suitable L/R-pair name */
|
/* filename didn't have a suitable L/R-pair name */
|
||||||
if (dfs_pair == -1)
|
if (dfs_pair == -1)
|
||||||
goto fail;
|
goto fail;
|
||||||
//;VGM_LOG("DFS: match %i filename=%s\n", dfs_pair, new_filename);
|
//;VGM_LOG("DFS: match %i filename=%s\n", dfs_pair, new_filename);
|
||||||
|
|
||||||
/* try to init other channel (new_filename now has the opposite name) */
|
new_vgmstream = init_vgmstream_function(dual_streamFile); /* use the init function that just worked */
|
||||||
dual_streamFile = open_streamfile(streamFile, new_filename);
|
|
||||||
if (!dual_streamFile) goto fail;
|
|
||||||
|
|
||||||
new_vgmstream = init_vgmstream_function(dual_streamFile); /* use the init that just worked, no other should work */
|
|
||||||
close_streamfile(dual_streamFile);
|
close_streamfile(dual_streamFile);
|
||||||
|
|
||||||
/* see if we were able to open the file, and if everything matched nicely */
|
/* see if we were able to open the file, and if everything matched nicely */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user