#define MAX_CACHE_ENTRIES 10
+const TCHAR *zfile_get_ext(const TCHAR *name)
+{
+ const TCHAR *sep = _tcsrchr(name, '\\');
+ if (!sep) {
+ sep = _tcsrchr(name, '/');
+ }
+ const TCHAR *ext = _tcsrchr(name, '.');
+ if (!ext) {
+ return NULL;
+ }
+ if (sep && ext < sep) {
+ return NULL;
+ }
+ return ext;
+}
+
struct zdisktrack
{
void *data;
int zfile_gettype (struct zfile *z)
{
uae_u8 buf[8];
- TCHAR *ext;
+ const TCHAR *ext;
bool hdf = false;
if (!z || !z->name)
return ZFILE_UNKNOWN;
- ext = _tcsrchr (z->name, '.');
+ ext = zfile_get_ext(z->name);
if (ext != NULL) {
int i;
ext++;
uae_u8 buffer[2 + 2 + 4 + 4];
int outsize;
TCHAR newname[MAX_DPATH];
- TCHAR *ext;
+ const TCHAR *ext;
int cantrunc = 0;
int done = 0;
offs = 8 + 2 + 2 + tracks * (2 + 2 + 4 + 4);
_tcscpy (newname, zfile_getname (z));
- ext = _tcsrchr (newname, '.');
+ ext = zfile_get_ext(newname);
if (ext) {
_tcscpy (newname + _tcslen (newname) - _tcslen (ext), _T(".std.adf"));
} else {
int i, j, r;
struct zfile *zo;
TCHAR *orgname = zfile_getname (z);
- TCHAR *ext = _tcsrchr (orgname, '.');
+ const TCHAR *ext = zfile_get_ext(orgname);
TCHAR newname[MAX_DPATH];
uae_u16 *amigamfmbuffer;
uae_u8 writebuffer_ok[32], *outbuf;
int i, j, r;
struct zfile *zo;
TCHAR *orgname = zfile_getname (z);
- TCHAR *ext = _tcsrchr (orgname, '.');
+ const TCHAR *ext = zfile_get_ext(orgname);
TCHAR newname[MAX_DPATH];
uae_u16 *amigamfmbuffer;
uae_u8 writebuffer_ok[32];
int ret;
struct zfile *zo;
TCHAR *orgname = zfile_getname (z);
- TCHAR *ext = _tcsrchr (orgname, '.');
+ const TCHAR *ext = zfile_get_ext(orgname);
TCHAR newname[MAX_DPATH];
static int recursive;
int i;
int i;
const TCHAR *ext;
- ext = _tcsrchr (name, '.');
+ ext = zfile_get_ext(name);
if (!ext)
return 0;
for (i = 0; uae_ignoreextensions[i]; i++) {
{
int i;
- const TCHAR *ext = _tcsrchr (name, '.');
- if (!ext)
+ const TCHAR *ext = zfile_get_ext(name);
+ if (!ext) {
return 0;
+ }
i = 0;
while (uae_diskimageextensions[i]) {
if (!strcasecmp (ext, uae_diskimageextensions[i]))
static int iszip (struct zfile *z, int mask)
{
TCHAR *name = z->name;
- TCHAR *ext = _tcsrchr (name, '.');
+ const TCHAR *ext = zfile_get_ext(name);
uae_u8 header[32];
if (!ext)
struct zfile *zuncompress (struct znode *parent, struct zfile *z, int dodefault, int mask, int *retcode, int index)
{
TCHAR *name = z->name;
- TCHAR *ext = NULL;
+ const TCHAR *ext = NULL;
uae_u8 header[32];
if (retcode)
if (!mask)
return NULL;
if (name) {
- ext = _tcsrchr (name, '.');
+ ext = zfile_get_ext(name);
if (ext)
ext++;
}
{
struct zvolume *zv = NULL;
TCHAR *name = zfile_getname (zf);
- TCHAR *ext;
+ const TCHAR *ext;
uae_u8 header[7];
if (!name)
zfile_fread (header, sizeof (header), 1, zf);
zfile_fseek (zf, 0, SEEK_SET);
- ext = _tcsrchr (name, '.');
+ ext = zfile_get_ext(name);
if (ext != NULL) {
ext++;
if (flags & ZFD_ARCHIVE) {
while (zn) {
int done = 0;
struct zfile *z;
- TCHAR *ext = _tcsrchr (zn->name, '.');
+ const TCHAR *ext = zfile_get_ext(zn->name);
if (ext && !zn->vchild && zn->type == ZNODE_FILE) {
for (i = 0; !done && archive_extensions[i]; i++) {
if (!strcasecmp (ext + 1, archive_extensions[i])) {