diff options
author | Eli Zaretskii <eliz@gnu.org> | 2011-02-26 09:44:38 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2011-02-26 09:44:38 +0200 |
commit | a54af40e14bbddbe836aecff0f9308a01c477ca2 (patch) | |
tree | 7a11ed2372080ce37cbea2b82a76e2dedd02cf96 /lib-src | |
parent | ae3f8fbfc330c91272411720263bd9eb0c5bb82a (diff) | |
download | emacs-a54af40e14bbddbe836aecff0f9308a01c477ca2.tar.gz |
Fix the MS-Windows build after 2011-02-26T05:54:36Z!eggert@cs.ucla.edu.
emacsclient.c (xstrdup) [WINDOWSNT]: Function added back.
(w32_getenv): Use xstrdup to return all values in malloc'ed
storage.
Diffstat (limited to 'lib-src')
-rw-r--r-- | lib-src/ChangeLog | 6 | ||||
-rw-r--r-- | lib-src/emacsclient.c | 29 |
2 files changed, 29 insertions, 6 deletions
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index ba77a92cf17..b330a447d54 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,3 +1,9 @@ +2011-02-26 Eli Zaretskii <eliz@gnu.org> + + * emacsclient.c (xstrdup) [WINDOWSNT]: Function added back. + (w32_getenv): Use xstrdup to return all values in malloc'ed + storage. + 2011-02-26 Paul Eggert <eggert@cs.ucla.edu> * ebrowse.c (parse_qualified_param_ident_or_type): Make it clear diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index 251f35873e3..836891ae6aa 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -293,6 +293,20 @@ get_current_dir_name (void) #ifdef WINDOWSNT +/* Like strdup but get a fatal error if memory is exhausted. */ + +char * +xstrdup (const char *s) +{ + char *result = strdup (s); + if (result == NULL) + { + perror ("strdup"); + exit (EXIT_FAILURE); + } + return result; +} + #define REG_ROOT "SOFTWARE\\GNU\\Emacs" /* Retrieve an environment variable from the Emacs subkeys of the registry. @@ -328,9 +342,11 @@ w32_get_resource (HKEY predefined, char *key, LPDWORD type) /* getenv wrapper for Windows - This is needed to duplicate Emacs's behavior, which is to look for environment - variables in the registry if they don't appear in the environment. -*/ + Value is allocated on the heap, and can be free'd. + + This is needed to duplicate Emacs's behavior, which is to look for + environment variables in the registry if they don't appear in the + environment. */ char * w32_getenv (char *envvar) { @@ -338,15 +354,16 @@ w32_getenv (char *envvar) DWORD dwType; if (value = getenv (envvar)) - /* Found in the environment. */ - return value; + /* Found in the environment. strdup it, because values returned + by getenv cannot be free'd. */ + return xstrdup (value); if (! (value = w32_get_resource (HKEY_CURRENT_USER, envvar, &dwType)) && ! (value = w32_get_resource (HKEY_LOCAL_MACHINE, envvar, &dwType))) { /* "w32console" is what Emacs on Windows uses for tty-type under -nw. */ if (strcmp (envvar, "TERM") == 0) - return "w32console"; + return xstrdup ("w32console"); /* Found neither in the environment nor in the registry. */ return NULL; } |