From: Toni Wilen Date: Fri, 11 Oct 2019 18:34:14 +0000 (+0300) Subject: Not all CD image formats worked in relative path mode. X-Git-Tag: 4300~87 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=988a524a1513d9c86d4026150162bf9924b05de9;p=francis%2Fwinuae.git Not all CD image formats worked in relative path mode. --- diff --git a/blkdev.cpp b/blkdev.cpp index 3ea03436..a597ea93 100644 --- a/blkdev.cpp +++ b/blkdev.cpp @@ -2216,10 +2216,10 @@ int blkdev_is_audio_command(uae_u8 cmd) case 0x03: case 0x12: case 0x15: - case 0x25: - case 0x35: case 0x1a: case 0x1e: + case 0x25: + case 0x35: case 0x55: case 0x5a: return 0; @@ -2229,7 +2229,6 @@ int blkdev_is_audio_command(uae_u8 cmd) return -1; } - int blkdev_execute_audio_command(int unitnum, uae_u8 *cdb, int cdblen, uae_u8 *inbuf, int inlen, uae_u8 *sense, int *senselen) { int len = inlen; diff --git a/blkdev_cdimage.cpp b/blkdev_cdimage.cpp index 2cf4c472..eda952d8 100644 --- a/blkdev_cdimage.cpp +++ b/blkdev_cdimage.cpp @@ -1299,7 +1299,7 @@ typedef struct { #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; @@ -1307,6 +1307,9 @@ static int parsemds (struct cdunit *cdu, struct zfile *zmds, const TCHAR *img) 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); @@ -1391,8 +1394,11 @@ end: } #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); @@ -1479,7 +1485,7 @@ static int parsechd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) } #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; @@ -1508,6 +1514,9 @@ static int parseccd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) if (zsub) write_log (_T("CCD: '%s' detected\n"), fname); + if (curdir) + my_setcurrentdir(ocurdir, NULL); + num = -1; mode = -1; for (;;) { @@ -1610,7 +1619,7 @@ static int parseccd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) 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; @@ -1875,7 +1884,7 @@ static int parsecue (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img) 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; @@ -1885,6 +1894,9 @@ static int parsenrg(struct cdunit *cdu, struct zfile *znrg, const TCHAR *img) 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); @@ -2063,33 +2075,34 @@ static int parse_image (struct cdunit *cdu, const TCHAR *img) 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 }