From e1a715de69b464029c0646da8272361ccdbbc8fa Mon Sep 17 00:00:00 2001 From: sezero Date: Fri, 18 Apr 2014 16:05:59 +0000 Subject: [PATCH] osx port: update SDLMain.m from SDL hg repository/SDL-1.2 branch. git-svn-id: svn+ssh://svn.code.sf.net/p/quakespasm/code/trunk@900 af15c1b1-3010-417e-b628-4374ebc0bcbd --- quakespasm/MacOSX/SDLMain.m | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/quakespasm/MacOSX/SDLMain.m b/quakespasm/MacOSX/SDLMain.m index 430792fc..6c44624d 100644 --- a/quakespasm/MacOSX/SDLMain.m +++ b/quakespasm/MacOSX/SDLMain.m @@ -62,12 +62,43 @@ BOOL gCalledAppMainline = FALSE; # undef main #endif + +static int IsRootCwd() +{ + char buf[MAXPATHLEN]; + char *cwd = getcwd(buf, sizeof (buf)); + return (cwd && (strcmp(cwd, "/") == 0)); +} + +static int IsTenPointNineOrLater() +{ + /* Gestalt() is deprecated in 10.8, but I don't care. Stop using SDL 1.2. */ + SInt32 major, minor; + Gestalt(gestaltSystemVersionMajor, &major); + Gestalt(gestaltSystemVersionMinor, &minor); + return ( ((major << 16) | minor) >= ((10 << 16) | 9) ); +} + +static int IsFinderLaunch(const int argc, char **argv) +{ + const int bIsNewerOS = IsTenPointNineOrLater(); + /* -psn_XXX is passed if we are launched from Finder in 10.8 and earlier */ + if ( (!bIsNewerOS) && (argc >= 2) && (strncmp(argv[1], "-psn", 4) == 0) ) { + return 1; + } else if ((bIsNewerOS) && (argc == 1) && IsRootCwd()) { + /* we might still be launched from the Finder; on 10.9+, you might not + get the -psn command line anymore. Check version, if there's no + command line, and if our current working directory is "/". */ + return 1; + } + return 0; /* not a Finder launch. */ +} + /* Main entry point to executable - should *not* be SDL_main! */ int main (int argc, char **argv) { /* Copy the arguments into a global variable */ - /* This is passed if we are launched by double-clicking */ - if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) { + if (IsFinderLaunch(argc, argv)) { gArgv = (char **) SDL_malloc(sizeof (char *) * 2); gArgv[0] = argv[0]; gArgv[1] = NULL;