[waffle] [PATCH 2/6] examples/gl_basic: Remove extra params added by Xcode

Jeff Bland jksb at linux.com
Sun Mar 3 03:07:25 PST 2013


---
 examples/gl_basic.c | 35 ++++++++++++++++++++++++++++++-----
 1 file changed, 30 insertions(+), 5 deletions(-)

diff --git a/examples/gl_basic.c b/examples/gl_basic.c
index 43dabf8..e8526d3 100644
--- a/examples/gl_basic.c
+++ b/examples/gl_basic.c
@@ -45,6 +45,9 @@
 #ifdef __APPLE__
 #    import <Foundation/NSAutoreleasePool.h>
 #    import <Appkit/NSApplication.h>
+
+static void
+removeXcodeArgs(int *argc, char **argv);
 #endif
 
 #include "waffle.h"
@@ -215,12 +218,10 @@ parse_args(int argc, char *argv[], struct options *opts)
     bool ok;
 
 #ifdef __APPLE__
-    // Running from Xcode adds extra arguments like
-    // -ApplePersistenceIgnoreState and -NSDocumentRevisionsDebugMode.
-    if (argc < 3)
-#else
-    if (argc < 3)
+    removeXcodeArgs(&argc, argv);
 #endif
+
+    if (argc < 3)
         error_usage();
 
     // Set some context attrs to invalid values.
@@ -382,6 +383,30 @@ cocoa_finish(void)
     [pool drain];
 }
 
+static void
+removeArg(int index, int *argc, char **argv)
+{
+    --*argc;
+    for (; index < *argc; ++index)
+        argv[index] = argv[index + 1];
+}
+
+static void
+removeXcodeArgs(int *argc, char **argv)
+{
+    // Xcode sometimes adds additional arguments.
+    for (int i = 1; i < *argc; )
+    {
+        if (strcmp(argv[i], "-NSDocumentRevisionsDebugMode") == 0 ||
+            strcmp(argv[i], "-ApplePersistenceIgnoreState" ) == 0)
+        {
+            removeArg(i, argc, argv);
+            removeArg(i, argc, argv);
+        } else
+            ++i;
+    }
+}
+
 #endif // __APPLE__
 
 int
-- 
1.7.12.4 (Apple Git-37)



More information about the waffle mailing list