/* Utility to update paths from internal to external forms.
- Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
+ Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
Free Software Foundation, Inc.
This file is part of GCC.
#include "config.h"
#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
#if defined(_WIN32) && defined(ENABLE_WIN32_REGISTRY)
#include <windows.h>
#endif
static const char *std_prefix = PREFIX;
-static const char *get_key_value PARAMS ((char *));
-static char *translate_name PARAMS ((char *));
-static char *save_string PARAMS ((const char *, int));
-static void tr PARAMS ((char *, int, int));
+static const char *get_key_value (char *);
+static char *translate_name (char *);
+static char *save_string (const char *, int);
+static void tr (char *, int, int);
#if defined(_WIN32) && defined(ENABLE_WIN32_REGISTRY)
-static char *lookup_key PARAMS ((char *));
+static char *lookup_key (char *);
static HKEY reg_key = (HKEY) INVALID_HANDLE_VALUE;
#endif
/* Given KEY, as above, return its value. */
static const char *
-get_key_value (key)
- char *key;
+get_key_value (char *key)
{
const char *prefix = 0;
char *temp = 0;
/* Return a copy of a string that has been placed in the heap. */
static char *
-save_string (s, len)
- const char *s;
- int len;
+save_string (const char *s, int len)
{
char *result = xmalloc (len + 1);
/* Look up "key" in the registry, as above. */
static char *
-lookup_key (key)
- char *key;
+lookup_key (char *key)
{
char *dst;
DWORD size;
}
size = 32;
- dst = (char *) xmalloc (size);
+ 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 = (char *) xrealloc (dst, size);
- res = RegQueryValueExA (reg_key, key, 0, &type, dst, &size);
+ dst = xrealloc (dst, size);
+ res = RegQueryValueExA (reg_key, key, 0, &type, (LPBYTE) dst, &size);
}
if (type != REG_SZ || res != ERROR_SUCCESS)
Otherwise, return the given name. */
static char *
-translate_name (name)
- char *name;
+translate_name (char *name)
{
char code;
char *key, *old_name;
keylen++)
;
- key = (char *) alloca (keylen + 1);
+ key = alloca (keylen + 1);
strncpy (key, &name[1], keylen);
key[keylen] = 0;
/* In a NUL-terminated STRING, replace character C1 with C2 in-place. */
static void
-tr (string, c1, c2)
- char *string;
- int c1, c2;
+tr (char *string, int c1, int c2)
{
do
{
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 (path, key)
- const char *path;
- const char *key;
+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;
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);
return result;
}
-/* Reset the standard prefix */
+/* Reset the standard prefix. */
void
-set_std_prefix (prefix, len)
- const char *prefix;
- int len;
+set_std_prefix (const char *prefix, int len)
{
std_prefix = save_string (prefix, len);
}