From: Corinna Vinschen Date: Sat, 9 Dec 2006 09:12:59 +0000 (+0000) Subject: * win32-nat.c (env_sort): Remove. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=002c07a9ffb143cbc1323fca237b6f8995b576b8;p=binutils-gdb.git * win32-nat.c (env_sort): Remove. (win32_create_inferior): Remove code which creates a Windows environment. Use Cygwin function call instead. Propagate current environment to inferior process. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 93b301281d7..4828765652f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2006-12-09 Corinna Vinschen + + * win32-nat.c (env_sort): Remove. + (win32_create_inferior): Remove code which creates a Windows + environment. Use Cygwin function call instead. Propagate + current environment to inferior process. + 2006-12-09 Nick Roberts * varobj.c (varobj_update): Ensure frame is restored when diff --git a/gdb/win32-nat.c b/gdb/win32-nat.c index 870635d6a1c..b625aae2b9d 100644 --- a/gdb/win32-nat.c +++ b/gdb/win32-nat.c @@ -1842,15 +1842,6 @@ win32_open (char *arg, int from_tty) error (_("Use the \"run\" command to start a Unix child process.")); } -/* Function called by qsort to sort environment strings. */ -static int -env_sort (const void *a, const void *b) -{ - const char **p = (const char **) a; - const char **q = (const char **) b; - return strcasecmp (*p, *q); -} - /* Start an inferior win32 child process and sets inferior_ptid to its pid. EXEC_FILE is the file to run. ALLARGS is a string containing the arguments to the program. @@ -1860,10 +1851,6 @@ static void win32_create_inferior (char *exec_file, char *allargs, char **in_env, int from_tty) { - char *winenv; - char *temp; - int envlen; - int i; STARTUPINFO si; PROCESS_INFORMATION pi; BOOL ret; @@ -1918,83 +1905,7 @@ win32_create_inferior (char *exec_file, char *allargs, char **in_env, strcat (args, allargs); /* Prepare the environment vars for CreateProcess. */ - { - /* This code used to assume all env vars were file names and would - translate them all to win32 style. That obviously doesn't work in the - general case. The current rule is that we only translate PATH. - We need to handle PATH because we're about to call CreateProcess and - it uses PATH to find DLL's. Fortunately PATH has a well-defined value - in both posix and win32 environments. cygwin.dll will change it back - to posix style if necessary. */ - - static const char *conv_path_names[] = - { - "PATH=", - 0 - }; - - /* CreateProcess takes the environment list as a null terminated set of - strings (i.e. two nulls terminate the list). */ - - /* Get total size for env strings. */ - for (envlen = 0, i = 0; in_env[i] && *in_env[i]; i++) - { - int j, len; - - for (j = 0; conv_path_names[j]; j++) - { - len = strlen (conv_path_names[j]); - if (strncmp (conv_path_names[j], in_env[i], len) == 0) - { - if (cygwin_posix_path_list_p (in_env[i] + len)) - envlen += len - + cygwin_posix_to_win32_path_list_buf_size (in_env[i] + len); - else - envlen += strlen (in_env[i]) + 1; - break; - } - } - if (conv_path_names[j] == NULL) - envlen += strlen (in_env[i]) + 1; - } - - size_t envsize = sizeof (in_env[0]) * (i + 1); - char **env = (char **) alloca (envsize); - memcpy (env, in_env, envsize); - /* Windows programs expect the environment block to be sorted. */ - qsort (env, i, sizeof (char *), env_sort); - - winenv = alloca (envlen + 1); - - /* Copy env strings into new buffer. */ - for (temp = winenv, i = 0; env[i] && *env[i]; i++) - { - int j, len; - - for (j = 0; conv_path_names[j]; j++) - { - len = strlen (conv_path_names[j]); - if (strncmp (conv_path_names[j], env[i], len) == 0) - { - if (cygwin_posix_path_list_p (env[i] + len)) - { - memcpy (temp, env[i], len); - cygwin_posix_to_win32_path_list (env[i] + len, temp + len); - } - else - strcpy (temp, env[i]); - break; - } - } - if (conv_path_names[j] == NULL) - strcpy (temp, env[i]); - - temp += strlen (temp) + 1; - } - - /* Final nil string to terminate new env. */ - *temp = 0; - } + cygwin_internal (CW_SYNC_WINENV); if (!inferior_io_terminal) tty = ostdin = ostdout = ostderr = -1; @@ -2024,7 +1935,7 @@ win32_create_inferior (char *exec_file, char *allargs, char **in_env, NULL, /* thread */ TRUE, /* inherit handles */ flags, /* start flags */ - winenv, + NULL, /* environment */ NULL, /* current directory */ &si, &pi); diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index 870635d6a1c..b625aae2b9d 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -1842,15 +1842,6 @@ win32_open (char *arg, int from_tty) error (_("Use the \"run\" command to start a Unix child process.")); } -/* Function called by qsort to sort environment strings. */ -static int -env_sort (const void *a, const void *b) -{ - const char **p = (const char **) a; - const char **q = (const char **) b; - return strcasecmp (*p, *q); -} - /* Start an inferior win32 child process and sets inferior_ptid to its pid. EXEC_FILE is the file to run. ALLARGS is a string containing the arguments to the program. @@ -1860,10 +1851,6 @@ static void win32_create_inferior (char *exec_file, char *allargs, char **in_env, int from_tty) { - char *winenv; - char *temp; - int envlen; - int i; STARTUPINFO si; PROCESS_INFORMATION pi; BOOL ret; @@ -1918,83 +1905,7 @@ win32_create_inferior (char *exec_file, char *allargs, char **in_env, strcat (args, allargs); /* Prepare the environment vars for CreateProcess. */ - { - /* This code used to assume all env vars were file names and would - translate them all to win32 style. That obviously doesn't work in the - general case. The current rule is that we only translate PATH. - We need to handle PATH because we're about to call CreateProcess and - it uses PATH to find DLL's. Fortunately PATH has a well-defined value - in both posix and win32 environments. cygwin.dll will change it back - to posix style if necessary. */ - - static const char *conv_path_names[] = - { - "PATH=", - 0 - }; - - /* CreateProcess takes the environment list as a null terminated set of - strings (i.e. two nulls terminate the list). */ - - /* Get total size for env strings. */ - for (envlen = 0, i = 0; in_env[i] && *in_env[i]; i++) - { - int j, len; - - for (j = 0; conv_path_names[j]; j++) - { - len = strlen (conv_path_names[j]); - if (strncmp (conv_path_names[j], in_env[i], len) == 0) - { - if (cygwin_posix_path_list_p (in_env[i] + len)) - envlen += len - + cygwin_posix_to_win32_path_list_buf_size (in_env[i] + len); - else - envlen += strlen (in_env[i]) + 1; - break; - } - } - if (conv_path_names[j] == NULL) - envlen += strlen (in_env[i]) + 1; - } - - size_t envsize = sizeof (in_env[0]) * (i + 1); - char **env = (char **) alloca (envsize); - memcpy (env, in_env, envsize); - /* Windows programs expect the environment block to be sorted. */ - qsort (env, i, sizeof (char *), env_sort); - - winenv = alloca (envlen + 1); - - /* Copy env strings into new buffer. */ - for (temp = winenv, i = 0; env[i] && *env[i]; i++) - { - int j, len; - - for (j = 0; conv_path_names[j]; j++) - { - len = strlen (conv_path_names[j]); - if (strncmp (conv_path_names[j], env[i], len) == 0) - { - if (cygwin_posix_path_list_p (env[i] + len)) - { - memcpy (temp, env[i], len); - cygwin_posix_to_win32_path_list (env[i] + len, temp + len); - } - else - strcpy (temp, env[i]); - break; - } - } - if (conv_path_names[j] == NULL) - strcpy (temp, env[i]); - - temp += strlen (temp) + 1; - } - - /* Final nil string to terminate new env. */ - *temp = 0; - } + cygwin_internal (CW_SYNC_WINENV); if (!inferior_io_terminal) tty = ostdin = ostdout = ostderr = -1; @@ -2024,7 +1935,7 @@ win32_create_inferior (char *exec_file, char *allargs, char **in_env, NULL, /* thread */ TRUE, /* inherit handles */ flags, /* start flags */ - winenv, + NULL, /* environment */ NULL, /* current directory */ &si, &pi);