summaryrefslogtreecommitdiff
path: root/lib-src
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2011-02-26 09:44:38 +0200
committerEli Zaretskii <eliz@gnu.org>2011-02-26 09:44:38 +0200
commita54af40e14bbddbe836aecff0f9308a01c477ca2 (patch)
tree7a11ed2372080ce37cbea2b82a76e2dedd02cf96 /lib-src
parentae3f8fbfc330c91272411720263bd9eb0c5bb82a (diff)
downloademacs-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/ChangeLog6
-rw-r--r--lib-src/emacsclient.c29
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;
}