diff options
author | Alexander Kabaev <kan@FreeBSD.org> | 2007-05-19 01:19:51 +0000 |
---|---|---|
committer | Alexander Kabaev <kan@FreeBSD.org> | 2007-05-19 01:19:51 +0000 |
commit | 6b834ef156bcf24dcf0e281f57ee5bde03ca07cf (patch) | |
tree | 0cb530c9c38af219e6dda2994c078b6b2b9ad853 /contrib/gcc/prefix.c | |
parent | 9ba78bf6b1135ae200742b2a97ae5bc71c9fd265 (diff) | |
download | src-6b834ef156bcf24dcf0e281f57ee5bde03ca07cf.tar.gz src-6b834ef156bcf24dcf0e281f57ee5bde03ca07cf.zip |
GCC 4.2.0 release.
Notes
Notes:
svn path=/vendor/gcc/dist/; revision=169689
Diffstat (limited to 'contrib/gcc/prefix.c')
-rw-r--r-- | contrib/gcc/prefix.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/contrib/gcc/prefix.c b/contrib/gcc/prefix.c index df556aaa30c0..7b92ce5c7db9 100644 --- a/contrib/gcc/prefix.c +++ b/contrib/gcc/prefix.c @@ -1,5 +1,5 @@ /* Utility to update paths from internal to external forms. - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 + Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GCC. @@ -16,8 +16,8 @@ Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with GCC; see the file COPYING. If not, write to the Free -Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ /* This file contains routines to update a path, both to canonicalize the directory format and to handle any prefix translation. @@ -115,7 +115,7 @@ get_key_value (char *key) static char * save_string (const char *s, int len) { - char *result = xmalloc (len + 1); + char *result = XNEWVEC (char, len + 1); memcpy (result, s, len); result[len] = 0; @@ -124,6 +124,10 @@ save_string (const char *s, int len) #if defined(_WIN32) && defined(ENABLE_WIN32_REGISTRY) +#ifndef WIN32_REGISTRY_KEY +# define WIN32_REGISTRY_KEY BASEVER +#endif + /* Look up "key" in the registry, as above. */ static char * @@ -157,11 +161,11 @@ lookup_key (char *key) size = 32; dst = xmalloc (size); - res = RegQueryValueExA (reg_key, key, 0, &type, dst, &size); + res = RegQueryValueExA (reg_key, key, 0, &type, (LPBYTE) dst, &size); if (res == ERROR_MORE_DATA && type == REG_SZ) { dst = xrealloc (dst, size); - res = RegQueryValueExA (reg_key, key, 0, &type, dst, &size); + res = RegQueryValueExA (reg_key, key, 0, &type, (LPBYTE) dst, &size); } if (type != REG_SZ || res != ERROR_SUCCESS) @@ -197,7 +201,7 @@ translate_name (char *name) keylen++) ; - key = alloca (keylen + 1); + key = (char *) alloca (keylen + 1); strncpy (key, &name[1], keylen); key[keylen] = 0; @@ -238,16 +242,20 @@ tr (char *string, int c1, int c2) while (*string++); } -/* Update PATH using KEY if PATH starts with PREFIX. The returned - string is always malloc-ed, and the caller is responsible for - freeing it. */ +/* Update PATH using KEY if PATH starts with PREFIX as a directory. + The returned string is always malloc-ed, and the caller is + responsible for freeing it. */ char * update_path (const char *path, const char *key) { char *result, *p; + const int len = strlen (std_prefix); - if (! strncmp (path, std_prefix, strlen (std_prefix)) && key != 0) + if (! strncmp (path, std_prefix, len) + && (IS_DIR_SEPARATOR(path[len]) + || path[len] == '\0') + && key != 0) { bool free_key = false; @@ -257,7 +265,7 @@ update_path (const char *path, const char *key) free_key = true; } - result = concat (key, &path[strlen (std_prefix)], NULL); + result = concat (key, &path[len], NULL); if (free_key) free ((char *) key); result = translate_name (result); |