Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVsevolod Kukol <sevoku@microsoft.com>2019-09-02 16:05:50 +0300
committerGitHub <noreply@github.com>2019-09-02 16:05:50 +0300
commit3aab6dca49afa0f185064d89476b1b014ac03e8f (patch)
treec58281a01f0b51044d41082b17d4edf47252669f /main/build
parent6753771b3730a232554068635fc1cc88c46d9ca8 (diff)
parent1c92415eddf14ca5a26dd66a095b230de1c6df00 (diff)
Merge pull request #8554 from mono/monostub-arguments-copy
[Mac] Reorder mono arguments from environment querying to simplify ma…
Diffstat (limited to 'main/build')
-rw-r--r--main/build/MacOSX/monostub.mm43
1 files changed, 23 insertions, 20 deletions
diff --git a/main/build/MacOSX/monostub.mm b/main/build/MacOSX/monostub.mm
index daec2cb615..942bde75a2 100644
--- a/main/build/MacOSX/monostub.mm
+++ b/main/build/MacOSX/monostub.mm
@@ -96,6 +96,10 @@ get_mono_env_options (int *ref_argc, char **ref_argv [], void *libmono)
{
const char *env = getenv ("MONO_ENV_OPTIONS");
+ if (!env) {
+ return;
+ }
+
mono_parse_options_from _mono_parse_options_from = LOAD_MONO_SYMBOL(mono_parse_options_from, libmono);
char *ret = _mono_parse_options_from (env, ref_argc, ref_argv);
@@ -310,32 +314,31 @@ main (int argc, char **argv)
_g_free (mono_version);
- // enable --debug so that we can get useful stack traces and add mono env options
- int mono_argc = 1;
- char **mono_argv = (char **) malloc (sizeof (char *) * mono_argc);
+ new_argc = 1 // argv[0]
+ + 1 // --debug
+ + 1 // executable name
+ + (argc - 1); // initial arguments - argv[0]
+ new_argv = (char **) malloc (sizeof (char *) * (new_argc + 1)); // add null terminator
- mono_argv[0] = (char *) "--debug";
- get_mono_env_options (&mono_argc, &mono_argv, libmono);
-
- // append original arguments
- new_argc = mono_argc + argc + 1;
- new_argv = (char **) malloc (sizeof (char *) * new_argc);
int n = 0;
-
new_argv[n++] = argv[0];
- for (int i = 0; i < mono_argc; i++) {
- new_argv[n++] = strdup (mono_argv[i]);
- if (i > 0)
- _g_free (mono_argv [i]);
- }
-
- _g_free(mono_argv);
-
- // append old arguments
+ new_argv[n++] = (char*)"--debug";
NSString *exePath = [NSString stringWithFormat:@"%@/%@.exe", binDirFullPath, appName];
new_argv[n++] = strdup ([exePath UTF8String]);
- for (int i = 1; i < argc; i++)
+
+ // Append old arguments.
+ for (int i = 1; i < argc; ++i) {
new_argv[n++] = argv[i];
+ }
+ // Set argv[n] to NULL.
+ new_argv[n] = NULL;
+
+ // Prepend all the mono options from the environment
+ get_mono_env_options (&new_argc, &new_argv, libmono);
+
+ //for (int i = 0; i < new_argc; ++i) {
+ // NSLog(@"%lu - %s", strlen(new_argv[i]), new_argv[i]);
+ //}
//clock_t end = clock();
//printf("%f seconds to start\n", (float)(end - start) / CLOCKS_PER_SEC);