+}
+
+
+static int locateCorrectFile(char *buf, const char *mode)
+{
+ if (*buf == '\0')
+ return(0); /* Uh...I guess that's failure. */
+
+ assert((mode[0] == 'w') || (mode[0] == 'r'));
+
+ bool iswriting = (mode[0] == 'w');
+ const char *prefpath = getPrefPath();
+ size_t len = strlen(buf) + strlen(prefpath) + 2;
+ char *prefpathfile = (char *) alloca(len);
+ snprintf(prefpathfile, len, "%s/%s", prefpath, buf);
+
+ int rc = locateCorrectCase(prefpathfile, iswriting); /* favor prefpath. */
+ if ( (rc == 0) || ((rc == -1) && (iswriting)) ) // found or create?
+ strcpy(buf, prefpathfile);
+ else if ((rc < 0) && (!iswriting)) /* not writing? Try game dir... */
+ rc = locateCorrectCase(buf, iswriting);
+
+ return(rc);
+} /* locateCorrectFile */