cubo_nvram = cd32_nvram + currprefs.cs_cd32nvram_size;
}
TCHAR path[MAX_DPATH];
- cfgfile_resolve_path_out(currprefs.flashfile, path, MAX_DPATH, PATH_ROM);
+ cfgfile_resolve_path_out_load(currprefs.flashfile, path, MAX_DPATH, PATH_ROM);
cd32_flashfile = zfile_fopen (path, _T("rb+"), ZFD_NORMAL);
if (!cd32_flashfile)
cd32_flashfile = zfile_fopen (path, _T("wb"), 0);
static void nvram_write (void)
{
TCHAR path[MAX_DPATH];
- cfgfile_resolve_path_out(currprefs.flashfile, path, MAX_DPATH, PATH_ROM);
+ cfgfile_resolve_path_out_load(currprefs.flashfile, path, MAX_DPATH, PATH_ROM);
struct zfile *f = zfile_fopen (path, _T("rb+"), ZFD_NORMAL);
if (!f) {
f = zfile_fopen (path, _T("wb"), 0);
struct zfile *f;
TCHAR path[MAX_DPATH];
- cfgfile_resolve_path_out(currprefs.flashfile, path, MAX_DPATH, PATH_ROM);
+ cfgfile_resolve_path_out_load(currprefs.flashfile, path, MAX_DPATH, PATH_ROM);
f = zfile_fopen (path, _T("rb"), ZFD_NORMAL);
memset (arbmemory + nvram_offset, 0, NVRAM_SIZE);
if (!f)
static void alg_nvram_write (void)
{
TCHAR path[MAX_DPATH];
- cfgfile_resolve_path_out(currprefs.flashfile, path, MAX_DPATH, PATH_ROM);
+ cfgfile_resolve_path_out_load(currprefs.flashfile, path, MAX_DPATH, PATH_ROM);
struct zfile *f = zfile_fopen (path, _T("rb+"), ZFD_NORMAL);
if (!f) {
f = zfile_fopen (path, _T("wb"), 0);
struct zfile *f;
TCHAR path[MAX_DPATH];
- cfgfile_resolve_path_out(currprefs.flashfile, path, MAX_DPATH, PATH_ROM);
+ cfgfile_resolve_path_out_load(currprefs.flashfile, path, MAX_DPATH, PATH_ROM);
f = zfile_fopen (path, _T("rb"), ZFD_NORMAL);
memset (algmemory, 0, ALG_NVRAM_SIZE);
if (!f)
if (!name[0])
underline[0] = 0;
if (type >= 0)
- cfgfile_resolve_path(name, sizeof(name) / sizeof(TCHAR), type);
+ cfgfile_resolve_path_load(name, sizeof(name) / sizeof(TCHAR), type);
namesplit (name);
_tcscpy (extension, _T("wav"));
_stprintf (filename, _T("%s%s%s%03d.%s"), path, name, underline, cnt, extension);
if (p[0]) {
TCHAR name[MAX_DPATH];
struct device_info di;
- cfgfile_resolve_path_out(p, name, sizeof(name) / sizeof(TCHAR), PATH_CD);
+ cfgfile_resolve_path_out_load(p, name, sizeof(name) / sizeof(TCHAR), PATH_CD);
const TCHAR *fname = my_getfilepart(name);
if (sys_command_info(unitnum, &di, 0) && di.volume_id[0])
statusline_add_message(STATUSTYPE_CD, _T("CD%d: [%s] %s"), unitnum, di.volume_id, fname);
cdu->imgname_in[0] = 0;
if (ident) {
_tcscpy(cdu->imgname_in, ident);
- cfgfile_resolve_path_out(cdu->imgname_in, cdu->imgname_out, MAX_DPATH, PATH_CD);
+ cfgfile_resolve_path_out_load(cdu->imgname_in, cdu->imgname_out, MAX_DPATH, PATH_CD);
}
parse_image (cdu, ident);
cdu->open = true;
if (!size)
return;
memset (p, 0, size);
- cfgfile_resolve_path_out(currprefs.flashfile, flashfilepath, MAX_DPATH, PATH_ROM);
+ cfgfile_resolve_path_out_load(currprefs.flashfile, flashfilepath, MAX_DPATH, PATH_ROM);
f = zfile_fopen (flashfilepath, _T("rb"), ZFD_NORMAL);
if (!f)
return;
if (!size)
return;
- cfgfile_resolve_path_out(currprefs.flashfile, flashfilepath, MAX_DPATH, PATH_ROM);
+ cfgfile_resolve_path_out_load(currprefs.flashfile, flashfilepath, MAX_DPATH, PATH_ROM);
f = zfile_fopen (flashfilepath, _T("rb+"), ZFD_NORMAL);
if (!f)
return;
int v;
memset (cdtv_battram, 0, CDTV_NVRAM_SIZE);
- cfgfile_resolve_path_out(currprefs.flashfile, flashfilepath, MAX_DPATH, PATH_ROM);
+ cfgfile_resolve_path_out_load(currprefs.flashfile, flashfilepath, MAX_DPATH, PATH_ROM);
f = zfile_fopen (flashfilepath, _T("rb+"), ZFD_NORMAL);
if (!f) {
f = zfile_fopen (flashfilepath, _T("wb"), 0);
int v;
memset (cdtvcr_ram, 0, CDTVCR_RAM_SIZE);
- cfgfile_resolve_path_out(currprefs.flashfile, flashfilepath, MAX_DPATH, PATH_ROM);
+ cfgfile_resolve_path_out_load(currprefs.flashfile, flashfilepath, MAX_DPATH, PATH_ROM);
f = zfile_fopen (flashfilepath, _T("rb+"), ZFD_NORMAL);
if (!f) {
f = zfile_fopen (flashfilepath, _T("wb"), 0);
}
-static void cfgfile_to_path(const TCHAR *in, TCHAR *out, int type)
+static void cfgfile_to_path_save(const TCHAR *in, TCHAR *out, int type)
{
if (_tcschr(in, '%')) {
_tcscpy(out, in);
} else {
- cfgfile_resolve_path_out(in, out, MAX_DPATH, type);
+ cfgfile_resolve_path_out_save(in, out, MAX_DPATH, type);
}
}
cfgfile_write_str(f, option, value);
} else {
TCHAR path[MAX_DPATH];
- cfgfile_resolve_path_out(value, path, MAX_DPATH, type);
+ cfgfile_resolve_path_out_save(value, path, MAX_DPATH, type);
cfgfile_write_str(f, option, path);
}
}
cfgfile_dwrite_str(f, option, value);
} else {
TCHAR path[MAX_DPATH];
- cfgfile_resolve_path_out(value, path, MAX_DPATH, type);
+ cfgfile_resolve_path_out_save(value, path, MAX_DPATH, type);
cfgfile_dwrite_str(f, option, path);
}
}
xfree(s);
}
-void cfgfile_resolve_path_out(const TCHAR *path, TCHAR *out, int size, int type)
+static void cfgfile_resolve_path_out_all(const TCHAR *path, TCHAR *out, int size, int type, bool save)
{
struct uae_prefs *p = &currprefs;
TCHAR *s = NULL;
_tcscpy(out, s);
xfree(s);
}
- my_resolvesoftlink(out, size);
+ if (!save) {
+ my_resolvesoftlink(out, size, true);
+ }
}
-void cfgfile_resolve_path(TCHAR *path, int size, int type)
+void cfgfile_resolve_path_out_load(const TCHAR *path, TCHAR *out, int size, int type)
+{
+ cfgfile_resolve_path_out_all(path, out, size, type, false);
+}
+void cfgfile_resolve_path_load(TCHAR *path, int size, int type)
+{
+ cfgfile_resolve_path_out_all(path, path, size, type, false);
+}
+void cfgfile_resolve_path_out_save(const TCHAR *path, TCHAR *out, int size, int type)
+{
+ cfgfile_resolve_path_out_all(path, out, size, type, true);
+}
+void cfgfile_resolve_path_save(TCHAR *path, int size, int type)
{
- cfgfile_resolve_path_out(path, path, size, type);
+ cfgfile_resolve_path_out_all(path, path, size, type, true);
}
*ptr = 0;
}
} else {
- cfgfile_to_path(ci->rootdir, str1, ci->type == UAEDEV_DIR ? PATH_DIR : (ci->type == UAEDEV_CD ? PATH_CD : (ci->type == UAEDEV_HDF ? PATH_HDF : PATH_TAPE)));
+ cfgfile_to_path_save(ci->rootdir, str1, ci->type == UAEDEV_DIR ? PATH_DIR : (ci->type == UAEDEV_CD ? PATH_CD : (ci->type == UAEDEV_HDF ? PATH_HDF : PATH_TAPE)));
}
int ct = ci->controller_type;
int romtype = 0;
#endif
} else if (ci->type == UAEDEV_HDF || ci->type == UAEDEV_CD || ci->type == UAEDEV_TAPE) {
TCHAR filesyspath[MAX_DPATH];
- cfgfile_to_path(ci->filesys, filesyspath, PATH_HDF);
+ cfgfile_to_path_save(ci->filesys, filesyspath, PATH_HDF);
TCHAR *sfilesys = cfgfile_escape_min(filesyspath);
TCHAR *sgeometry = cfgfile_escape(ci->geometry, NULL, true);
_stprintf (tmp, _T("%s,%s:%s,%d,%d,%d,%d,%d,%s,%s"),
if (p->cdslots[i].name[0] || p->cdslots[i].inuse) {
TCHAR tmp2[MAX_DPATH];
_stprintf (tmp, _T("cdimage%d"), i);
- cfgfile_to_path(p->cdslots[i].name, tmp2, PATH_CD);
+ cfgfile_to_path_save(p->cdslots[i].name, tmp2, PATH_CD);
if (p->cdslots[i].type != SCSI_UNIT_DEFAULT || _tcschr (p->cdslots[i].name, ',') || p->cdslots[i].delayed) {
_tcscat (tmp2, _T(","));
if (p->cdslots[i].delayed) {
bool ret = false;
TCHAR tgname[MAX_DPATH];
- cfgfile_resolve_path_out(tname, tgname, MAX_DPATH, PATH_HDF);
+ cfgfile_resolve_path_out_load(tname, tgname, MAX_DPATH, PATH_HDF);
ini = ini_load(tgname);
if (!ini)
return ret;
cfgfile_string (line1b, line2b, _T("config_window_title"), p->config_window_title, sizeof p->config_window_title / sizeof (TCHAR));
// boxart checks
cfgfile_string(line1b, line2b, _T("floppy0"), p->floppyslots[0].df, sizeof p->floppyslots[0].df / sizeof(TCHAR));
- cfgfile_resolve_path(p->floppyslots[0].df, MAX_DPATH, PATH_FLOPPY);
+ cfgfile_resolve_path_load(p->floppyslots[0].df, MAX_DPATH, PATH_FLOPPY);
TCHAR tmp[MAX_DPATH];
if (!p->mountitems && (cfgfile_string(line1b, line2b, _T("hardfile2"), tmp, sizeof tmp / sizeof(TCHAR)) || cfgfile_string(line1b, line2b, _T("filesystem2"), tmp, sizeof tmp / sizeof(TCHAR)))) {
const TCHAR *s = _tcschr(tmp, ':');
if (se) {
tmp[se - tmp] = 0;
_tcscpy(p->mountconfig[0].ci.rootdir, s);
- cfgfile_resolve_path(p->mountconfig[0].ci.rootdir, MAX_DPATH, isvsys ? PATH_DIR : PATH_HDF);
+ cfgfile_resolve_path_load(p->mountconfig[0].ci.rootdir, MAX_DPATH, isvsys ? PATH_DIR : PATH_HDF);
p->mountitems = 1;
}
}
tmp[se - tmp] = 0;
}
_tcscpy(p->cdslots[0].name, s);
- cfgfile_resolve_path(p->cdslots[0].name, MAX_DPATH, PATH_CD);
+ cfgfile_resolve_path_load(p->cdslots[0].name, MAX_DPATH, PATH_CD);
p->cdslots[0].inuse = 1;
}
}
if (!currprefs.rtcfile[0] || currprefs.cs_rtc == 0)
return;
TCHAR path[MAX_DPATH];
- cfgfile_resolve_path_out(currprefs.rtcfile, path, MAX_DPATH, PATH_ROM);
+ cfgfile_resolve_path_out_load(currprefs.rtcfile, path, MAX_DPATH, PATH_ROM);
struct zfile *f = zfile_fopen (path, _T("wb"));
if (f) {
struct tm *ct;
}
if (currprefs.rtcfile[0]) {
TCHAR path[MAX_DPATH];
- cfgfile_resolve_path_out(currprefs.rtcfile, path, MAX_DPATH, PATH_ROM);
+ cfgfile_resolve_path_out_load(currprefs.rtcfile, path, MAX_DPATH, PATH_ROM);
struct zfile *f = zfile_fopen (path, _T("rb"));
if (f) {
uae_u8 empty[13];
if (wrprot)
*wrprot = p->floppy_read_only ? 1 : 0;
- cfgfile_resolve_path_out(fname_in, outname, MAX_DPATH, PATH_FLOPPY);
+ cfgfile_resolve_path_out_load(fname_in, outname, MAX_DPATH, PATH_FLOPPY);
if (outfname)
_tcscpy(outfname, outname);
if (!ui) {
ui = &uitmp;
if (uci->ci.type == UAEDEV_DIR) {
- cfgfile_resolve_path_out(uci->ci.rootdir, filepath, MAX_DPATH, PATH_DIR);
+ cfgfile_resolve_path_out_load(uci->ci.rootdir, filepath, MAX_DPATH, PATH_DIR);
_tcscpy(mi->rootdir, filepath);
mi->ismounted = 1;
if (filepath[0] == 0)
mi->ismedia = true;
return FILESYS_VIRTUAL;
} else if (uci->ci.type == UAEDEV_HDF) {
- cfgfile_resolve_path_out(uci->ci.rootdir, filepath, MAX_DPATH, PATH_HDF);
+ cfgfile_resolve_path_out_load(uci->ci.rootdir, filepath, MAX_DPATH, PATH_HDF);
_tcscpy(mi->rootdir, filepath);
ui->hf.ci.readonly = true;
ui->hf.ci.blocksize = uci->ci.blocksize;
mi->ismedia = 0;
hdf_close (&ui->hf);
} else if (uci->ci.type == UAEDEV_CD) {
- cfgfile_resolve_path_out(uci->ci.rootdir, filepath, MAX_DPATH, PATH_CD);
+ cfgfile_resolve_path_out_load(uci->ci.rootdir, filepath, MAX_DPATH, PATH_CD);
_tcscpy(mi->rootdir, filepath);
struct device_info di;
ui->hf.ci.readonly = true;
}
}
if (uci->ci.type == UAEDEV_TAPE) {
- cfgfile_resolve_path_out(uci->ci.rootdir, filepath, MAX_DPATH, PATH_TAPE);
+ cfgfile_resolve_path_out_load(uci->ci.rootdir, filepath, MAX_DPATH, PATH_TAPE);
_tcscpy(mi->rootdir, filepath);
struct device_info di;
int unitnum = getuindex (p, index);
TCHAR *p = NULL;
TCHAR path[MAX_DPATH];
- cfgfile_resolve_path_out(rootdir, path, MAX_DPATH, PATH_DIR);
+ cfgfile_resolve_path_out_load(rootdir, path, MAX_DPATH, PATH_DIR);
archivehd = -1;
if (my_existsfile (path))
iscd = nr >= cd_unit_offset && nr < cd_unit_offset + cd_unit_number;
if (!custom)
- cfgfile_resolve_path(c.rootdir, MAX_DPATH, iscd ? PATH_CD : (ci->volname[0] ? PATH_DIR : PATH_HDF));
+ cfgfile_resolve_path_load(c.rootdir, MAX_DPATH, iscd ? PATH_CD : (ci->volname[0] ? PATH_DIR : PATH_HDF));
for (i = 0; i < MAX_FILESYSTEM_UNITS; i++) {
if (nr == i || !mountinfo.ui[i].open || mountinfo.ui[i].rootdir == NULL || is_hardfile (i) == FILESYS_CD)
static int test_softlink (a_inode *aino)
{
int err;
- if (aino->softlink && my_resolvesoftlink (aino->nname, -1))
+ if (aino->softlink && my_resolvesoftlink (aino->nname, -1, false))
err = ERROR_IS_SOFT_LINK;
else
err = ERROR_OBJECT_NOT_AROUND;
}
_tcscpy (tmp, a->nname);
write_log (_T("Resolving softlink '%s'\n"), tmp);
- if (!my_resolvesoftlink (tmp, sizeof tmp / sizeof (TCHAR))) {
+ if (!my_resolvesoftlink (tmp, sizeof tmp / sizeof (TCHAR), false)) {
xfree(extrapath);
PUT_PCK_RES1 (packet, DOS_FALSE);
// not sure what to return
tmp[0] = 0;
if (uip->filesysdir && _tcslen (uip->filesysdir) > 0) {
- cfgfile_resolve_path_out(uip->filesysdir, tmp, MAX_DPATH, PATH_HDF);
+ cfgfile_resolve_path_out_load(uip->filesysdir, tmp, MAX_DPATH, PATH_HDF);
} else if ((dostype & 0xffffff00) == DISK_TYPE_DOS) {
_tcscpy (tmp, currprefs.romfile);
int i = _tcslen (tmp);
if (hfd->ci.filesys[0]) {
struct zfile *f = NULL;
TCHAR fspath[MAX_DPATH];
- cfgfile_resolve_path_out(hfd->ci.filesys, fspath, MAX_DPATH, PATH_HDF);
+ cfgfile_resolve_path_out_load(hfd->ci.filesys, fspath, MAX_DPATH, PATH_HDF);
filesys = zfile_load_file(fspath, &filesyslen);
if (filesys) {
fsver = get_filesys_version(filesys, filesyslen);
hfd->virtual_rdb = NULL;
if (!pname)
pname = hfd->ci.rootdir;
- cfgfile_resolve_path_out(pname, filepath, MAX_DPATH, PATH_HDF);
+ cfgfile_resolve_path_out_load(pname, filepath, MAX_DPATH, PATH_HDF);
#ifdef WITH_CHD
TCHAR nametmp[MAX_DPATH];
_tcscpy (nametmp, filepath);
extern bool my_chmod (const TCHAR *name, uae_u32 mode);
extern bool my_resolveshortcut(TCHAR *linkfile, int size);
extern bool my_resolvessymboliclink(TCHAR *linkfile, int size);
-extern bool my_resolvesoftlink(TCHAR *linkfile, int size);
+extern bool my_resolvesoftlink(TCHAR *linkfile, int size, bool linkonly);
extern const TCHAR *my_getfilepart(const TCHAR *filename);
extern void my_canonicalize_path(const TCHAR *path, TCHAR *out, int size);
extern int my_issamevolume(const TCHAR *path1, const TCHAR *path2, TCHAR *path);
extern int target_get_display (const TCHAR*);
extern const TCHAR *target_get_display_name (int, bool);
extern void target_multipath_modified(struct uae_prefs *);
-extern void cfgfile_resolve_path_out(const TCHAR *path, TCHAR *out, int size, int type);
-extern void cfgfile_resolve_path(TCHAR *path, int size, int type);
+extern void cfgfile_resolve_path_out_load(const TCHAR *path, TCHAR *out, int size, int type);
+extern void cfgfile_resolve_path_load(TCHAR *path, int size, int type);
+extern void cfgfile_resolve_path_out_save(const TCHAR *path, TCHAR *out, int size, int type);
+extern void cfgfile_resolve_path_save(TCHAR *path, int size, int type);
extern struct uae_prefs *cfgfile_open(const TCHAR *filename, int *type);
extern void cfgfile_close(struct uae_prefs *p);
}
-bool my_resolvesoftlink(TCHAR *linkfile, int size)
+bool my_resolvesoftlink(TCHAR *linkfile, int size, bool linkonly)
{
- int v = my_resolvessymboliclink2(linkfile, size);
- if (v > 0)
- return true;
- if (v == 0)
- return false;
+ if (!linkonly) {
+ int v = my_resolvessymboliclink2(linkfile, size);
+ if (v > 0)
+ return true;
+ if (v == 0)
+ return false;
+ }
if (my_resolveshortcut(linkfile,size))
return true;
return false;
if (ext && !_tcsicmp (ext, _T(".lnk"))) {
TCHAR tmp[MAX_DPATH];
_tcscpy (tmp, aino->nname);
- if (my_resolvesoftlink (tmp, sizeof tmp / sizeof (TCHAR))) {
+ if (my_resolvesoftlink (tmp, sizeof tmp / sizeof (TCHAR), false)) {
//write_log (_T("2 '%s'\n"), aino->nname);
ext = _tcsrchr (aino->aname, '.');
if (ext && !_tcsicmp (ext, _T(".lnk")))
int mask;
DragQueryFile (hd, i, file, sizeof (file) / sizeof (TCHAR));
- my_resolvesoftlink (file, sizeof file / sizeof (TCHAR));
+ my_resolvesoftlink (file, sizeof file / sizeof (TCHAR), true);
filepart = _tcsrchr (file, '/');
if (!filepart)
filepart = _tcsrchr (file, '\\');
TCHAR tape_dir_path[MAX_DPATH];
memset (tape, 0, sizeof (struct scsi_data_tape));
- cfgfile_resolve_path_out(tape_directory, tape_dir_path, MAX_DPATH, PATH_TAPE);
+ cfgfile_resolve_path_out_load(tape_directory, tape_dir_path, MAX_DPATH, PATH_TAPE);
_tcscpy(tape->tape_dir, tape_dir_path);
path[0] = 0;
FPU_Init(dosbox_sec);
if (xb->type >= TYPE_2286) {
TCHAR path[MAX_DPATH];
- cfgfile_resolve_path_out(currprefs.flashfile, path, MAX_DPATH, PATH_ROM);
+ cfgfile_resolve_path_out_load(currprefs.flashfile, path, MAX_DPATH, PATH_ROM);
xb->cmossize = xb->type == TYPE_2386 ? 192 : 64;
xb->cmosfile = zfile_fopen(path, _T("rb+"), ZFD_NORMAL);
if (!xb->cmosfile) {