fixed aborting program due to '-psn' parameter when launched via GUI on Mac
[rocksndiamonds.git] / src / libgame / misc.c
index 966abb021611fc22c78d8c37adfaa0131d33f198..93a62e07d1a55ad5bf4c2ca2627491b4ff83effb 100644 (file)
@@ -654,6 +654,23 @@ char *getBaseName(char *filename)
   return getStringCopy(getBaseNamePtr(filename));
 }
 
+char *getBaseNameNoSuffix(char *filename)
+{
+  char *basename = getStringCopy(getBaseNamePtr(filename));
+
+  // remove trailing suffix (separated by dot or hyphen)
+  if (basename[0] != '.' && basename[0] != '-')
+  {
+    if (strchr(basename, '.') != NULL)
+      *strchr(basename, '.') = '\0';
+
+    if (strchr(basename, '-') != NULL)
+      *strchr(basename, '-') = '\0';
+  }
+
+  return basename;
+}
+
 char *getBasePath(char *filename)
 {
   char *basepath = getStringCopy(filename);
@@ -925,13 +942,18 @@ boolean strSuffixLower(char *s, char *suffix)
 /* command line option handling functions                                    */
 /* ------------------------------------------------------------------------- */
 
-void GetOptions(char *argv[],
+void GetOptions(int argc, char *argv[],
                void (*print_usage_function)(void),
                void (*print_version_function)(void))
 {
   char *ro_base_path = RO_BASE_PATH;
   char *rw_base_path = RW_BASE_PATH;
-  char **options_left = &argv[1];
+  char **argvplus = checked_calloc((argc + 1) * sizeof(char **));
+  char **options_left = &argvplus[1];
+
+  /* replace original "argv" with null-terminated array of string pointers */
+  while (argc--)
+    argvplus[argc] = argv[argc];
 
   /* if the program is configured to start from current directory (default),
      determine program package directory from program binary (some versions
@@ -1117,6 +1139,12 @@ void GetOptions(char *argv[],
       /* when doing batch processing, always enable verbose mode (warnings) */
       options.verbose = TRUE;
     }
+#if defined(PLATFORM_MACOSX)
+    else if (strPrefix(option, "-psn"))
+    {
+      /* ignore process serial number when launched via GUI on Mac OS X */
+    }
+#endif
     else if (*option == '-')
     {
       Error(ERR_EXIT_HELP, "unrecognized option '%s'", option_str);