#pragma pack()
-static int parsemds (struct cdunit *cdu, struct zfile *zmds, const TCHAR *img)
+static int parsemds (struct cdunit *cdu, struct zfile *zmds, const TCHAR *img, const TCHAR *curdir, const TCHAR *occurdir)
{
MDS_Header *head;
struct cdtoc *t;
uae_u64 size;
MDS_SessionBlock *sb;
+ if (curdir)
+ my_setcurrentdir(occurdir, NULL);
+
write_log (_T("MDS TOC: '%s'\n"), img);
size = zfile_size (zmds);
mds = xmalloc (uae_u8, size);
}
#ifdef WITH_CHD
-static int parsechd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img)
+static int parsechd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img, const TCHAR *curdir, const TCHAR *ocurdir)
{
+ if (curdir)
+ my_setcurrentdir(ocurdir, NULL);
+
chd_error err;
struct cdrom_file *cdf;
struct zfile *f = zfile_dup (zcue);
}
#endif
-static int parseccd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img)
+static int parseccd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img, const TCHAR *curdir, const TCHAR *ocurdir)
{
int mode;
int num, tracknum, trackmode;
if (zsub)
write_log (_T("CCD: '%s' detected\n"), fname);
+ if (curdir)
+ my_setcurrentdir(ocurdir, NULL);
+
num = -1;
mode = -1;
for (;;) {
return cdu->tracks;
}
-static int parsecue (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img)
+static int parsecue (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img, const TCHAR *curdir, const TCHAR *ocurdir)
{
int tracknum, pregap, postgap, lastpregap, lastpostgap;
int newfile, secoffset;
return cdu->tracks;
}
-static int parsenrg(struct cdunit *cdu, struct zfile *znrg, const TCHAR *img)
+static int parsenrg(struct cdunit *cdu, struct zfile *znrg, const TCHAR *img, const TCHAR *curdir, const TCHAR *ocurdir)
{
uae_s64 size;
uae_s64 offset;
uae_u32 lastlba = 0;
bool gotsession = false;
+ if (curdir)
+ my_setcurrentdir(ocurdir, NULL);
+
size = zfile_size(znrg);
zfile_fseek(znrg, size - 12, SEEK_SET);
zfile_fread(buf, 12, 1, znrg);
if (ext) {
TCHAR curdir[MAX_DPATH];
TCHAR oldcurdir[MAX_DPATH], *p;
+ TCHAR *pcurdir = NULL;
ext++;
oldcurdir[0] = 0;
- _tcscpy (curdir, img);
- p = curdir + _tcslen (curdir);
+ _tcscpy(curdir, img);
+ p = curdir + _tcslen(curdir);
while (p > curdir) {
if (*p == '/' || *p == '\\')
break;
p--;
}
*p = 0;
- if (p > curdir)
- my_setcurrentdir (curdir, oldcurdir);
+ if (p > curdir) {
+ pcurdir = curdir;
+ my_setcurrentdir(pcurdir, oldcurdir);
+ }
if (!_tcsicmp(ext, _T("cue"))) {
- parsecue(cdu, zcue, img);
+ parsecue(cdu, zcue, img, pcurdir, oldcurdir);
} else if (!_tcsicmp(ext, _T("ccd"))) {
- parseccd(cdu, zcue, img);
+ parseccd(cdu, zcue, img, pcurdir, oldcurdir);
} else if (!_tcsicmp(ext, _T("mds"))) {
- parsemds(cdu, zcue, img);
+ parsemds(cdu, zcue, img, pcurdir, oldcurdir);
} else if (!_tcsicmp(ext, _T("nrg"))) {
- parsenrg(cdu, zcue, img);
+ parsenrg(cdu, zcue, img, pcurdir, oldcurdir);
#ifdef WITH_CHD
} else if (!_tcsicmp(ext, _T("chd"))) {
- if (oldcurdir[0])
- my_setcurrentdir (oldcurdir, NULL);
- parsechd (cdu, zcue, img);
+ parsechd (cdu, zcue, img, pcurdir, oldcurdir);
#endif
}