X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FMacCompatibility.cpp;h=e82b1b758e276f99e4b18e8c2c56da1623ee5292;hb=1aef858f5ecb3dc8fd816e0155635371ed3632f2;hp=dfedc9a4b6490a084a0cd9904e2318549d0cecbe;hpb=c26c5303fbc3fcc607681b848bc4fd0641320691;p=lugaru.git diff --git a/Source/MacCompatibility.cpp b/Source/MacCompatibility.cpp index dfedc9a..e82b1b7 100644 --- a/Source/MacCompatibility.cpp +++ b/Source/MacCompatibility.cpp @@ -1,3 +1,24 @@ +/* +Copyright (C) 2003, 2010 - Wolfire Games + +This file is part of Lugaru. + +Lugaru is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + #if !PLATFORM_MACOSX /**> HEADER FILES <**/ @@ -16,6 +37,7 @@ #if PLATFORM_UNIX #include #include +#include #include typedef long long __int64; typedef __int64 LARGE_INTEGER; @@ -157,7 +179,7 @@ static int locateOneElement(char *buf) struct dirent *dent; while ((dent = readdir(dirp)) != NULL) { - if (stricmp(dent->d_name, ptr) == 0) + if (strcasecmp(dent->d_name, ptr) == 0) { strcpy(ptr, dent->d_name); /* found a match. Overwrite with this case. */ closedir(dirp); @@ -191,7 +213,11 @@ static inline const char *getPrefPath(void) if (homedir == NULL) homedir = "."; // oh well. +#if (defined(__APPLE__) && defined(__MACH__)) + const char *PREFPATHNAME = "Library/Application Support/Lugaru"; +#else const char *PREFPATHNAME = ".lugaru"; +#endif size_t len = strlen(homedir) + strlen(PREFPATHNAME) + 2; prefpath = new char[len]; snprintf(prefpath, len, "%s/%s", homedir, PREFPATHNAME); @@ -242,7 +268,7 @@ static int locateCorrectFile(char *buf, const char *mode) snprintf(prefpathfile, len, "%s/%s", prefpath, buf); int rc = locateCorrectCase(prefpathfile, iswriting); /* favor prefpath. */ - if (rc == 0) // found? + 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); @@ -255,6 +281,9 @@ static int locateCorrectFile(char *buf, const char *mode) static char g_filename[4096]; char* ConvertFileName( const char* orgfilename, const char *mode) { + if (orgfilename == g_filename) // recursion? + return g_filename; + // translate filename into proper path name if (orgfilename[ 0] == ':') orgfilename++;