Revision
3489
Author
lsansonetti@apple.com
Date
2010-02-10 19:16:10 -0800 (Wed, 10 Feb 2010)

Log Message

fix a bug in macruby_main() that prevented arguments passing (thanks Hongli Lai)

Modified Paths

Diff

Modified: MacRuby/trunk/vm.cpp (3488 => 3489)


--- MacRuby/trunk/vm.cpp	2010-02-11 02:40:26 UTC (rev 3488)
+++ MacRuby/trunk/vm.cpp	2010-02-11 03:16:10 UTC (rev 3489)
@@ -4966,20 +4966,30 @@
     char *p1, *p2;
     int n, i;
 
+    /*
+     * Transform the original argv into something like this:
+     * argv[0] = original value
+     * argv[1] = -I/path-to-app-dir/(...)/Resources
+     * argv[2] = main .rb file
+     * argv[3 .. N] = rest of original argv
+     */
+
     newargv = (char **)malloc(sizeof(char *) * (argc + 2));
-    for (i = n = 0; i < argc; i++) {
-	if (!strncmp(argv[i], "-psn_", 5) == 0) {
+    newargv[0] = argv[0];
+    
+    p1 = (char *)malloc(PATH_MAX);
+    newargv[1] = (char *)resources_path(p1, PATH_MAX);
+    
+    p2 = (char *)malloc(PATH_MAX);
+    snprintf(p2, PATH_MAX, "%s/%s", (path[0] != '/') ? &p1[2] : "", path);
+    newargv[2] = p2;
+    
+    for (i = 1, n = 3; i < argc; i++) {
+	if (strncmp(argv[i], "-psn_", 5) != 0) {
 	    newargv[n++] = argv[i];
 	}
     }
     
-    p1 = (char *)malloc(PATH_MAX);
-    newargv[n++] = (char *)resources_path(p1, PATH_MAX);
-
-    p2 = (char *)malloc(PATH_MAX);
-    snprintf(p2, PATH_MAX, "%s/%s", (path[0] != '/') ? &p1[2] : "", path);
-    newargv[n++] = p2;
-
     argv = newargv;    
     argc = n;