From d9e98704f77dea99dcb326fa3f8430df780b8654 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Sun, 29 Aug 2010 21:36:38 -0400 Subject: [PATCH] PHYSFS_getRealDir() can't report a path for things that aren't real files. --- src/physfs.c | 8 +++++++- src/physfs.h | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/physfs.c b/src/physfs.c index cc74e770..abc79520 100644 --- a/src/physfs.c +++ b/src/physfs.c @@ -1828,15 +1828,21 @@ const char *PHYSFS_getRealDir(const char *_fname) { DirHandle *i; __PHYSFS_platformGrabMutex(stateLock); - for (i = searchPath; ((i != NULL) && (retval == NULL)); i = i->next) + for (i = searchPath; i != NULL; i = i->next) { char *arcfname = fname; if (partOfMountPoint(i, arcfname)) + { retval = i->dirName; + break; + } /* if */ else if (verifyPath(i, &arcfname, 0)) { if (i->funcs->exists(i->opaque, arcfname)) + { retval = i->dirName; + break; + } /* if */ } /* if */ } /* for */ __PHYSFS_platformReleaseMutex(stateLock); diff --git a/src/physfs.h b/src/physfs.h index ace2b636..afc9befd 100644 --- a/src/physfs.h +++ b/src/physfs.h @@ -1020,6 +1020,11 @@ PHYSFS_DECL int PHYSFS_delete(const char *filename); * be associated with the first archive mounted there, even though that * directory isn't necessarily contained in a real archive. * + * \warning This will return NULL if there is no real directory associated + * with (filename). Specifically, PHYSFS_mountIo(), + * PHYSFS_mountMemory(), and PHYSFS_mountHandle() will return NULL + * even if the filename is found in the search path. Plan accordingly. + * * \param filename file to look for. * \return READ ONLY string of element of search path containing the * the file in question. NULL if not found.