aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2014-12-29 12:37:53 -0800
committerPaul Eggert2014-12-29 12:38:58 -0800
commitf9acac751d4cd22480e62cc63936b1208ca9fe48 (patch)
tree49f37d577e63a00042dc990ec92651d19be8870a /src
parentce1ebdf1ba8acc75e8f959f414652cdc87e76401 (diff)
downloademacs-f9acac751d4cd22480e62cc63936b1208ca9fe48.tar.gz
emacs-f9acac751d4cd22480e62cc63936b1208ca9fe48.zip
system-name's returned value can vary
Also, the system-name variable is now obsolete. Fixes Bug#19438. * doc/lispref/os.texi (System Environment): * etc/NEWS: Document this. * doc/misc/efaq.texi: (Displaying the current file name in the titlebar): * lisp/desktop.el (desktop-save-frameset): * lisp/dnd.el (dnd-get-local-file-uri): * lisp/gnus/message.el (message-make-fqdn): * lisp/gnus/nnvirtual.el (nnvirtual-retrieve-headers) (nnvirtual-update-xref-header): * lisp/nxml/rng-uri.el (rng-uri-file-name-1): * lisp/org/org-clock.el (org-clock-save): * src/filelock.c (current_lock_owner): * src/xrdb.c (get_environ_db): * src/xterm.c (same_x_server): * src/xterm.c (x_term_init): Prefer (system-name) to system-name, and avoid naming locals 'system-name'. * doc/misc/smtpmail.texi (Server workarounds): Fix grammar. * lisp/startup.el (system-name): Now an obsolete variable. * src/editfns.c (cached_system_name): New static var. (init_and_cache_system_name): New function. (init_editfns, Fsystem_name): Use it. (syms_of_editfns): Initialize it and Vsystem_name to the same value. * src/sysdep.c [HAVE_SOCKETS]: Don't include <sys/socket.h>, <netdb.h>. (h_errno) [TRY_AGAIN && !HAVE_H_ERRNO]: Remove decl. (init_system_name) [HAVE_SOCKETS]: Don't canonicalize the name. Don't create a new string if the current value is already correct.
Diffstat (limited to 'src')
-rw-r--r--src/editfns.c16
-rw-r--r--src/filelock.c7
-rw-r--r--src/sysdep.c23
-rw-r--r--src/xrdb.c5
-rw-r--r--src/xterm.c12
5 files changed, 41 insertions, 22 deletions
diff --git a/src/editfns.c b/src/editfns.c
index 430c4c91fb3..2a7dd9209ae 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -93,6 +93,17 @@ static char const *initial_tz;
93 It is OK (though a bit slower) if the user chooses this value. */ 93 It is OK (though a bit slower) if the user chooses this value. */
94static char dump_tz_string[] = "TZ=UtC0"; 94static char dump_tz_string[] = "TZ=UtC0";
95 95
96/* The cached value of Vsystem_name. This is used only to compare it
97 to Vsystem_name, so it need not be visible to the GC. */
98static Lisp_Object cached_system_name;
99
100static void
101init_and_cache_system_name (void)
102{
103 init_system_name ();
104 cached_system_name = Vsystem_name;
105}
106
96void 107void
97init_editfns (void) 108init_editfns (void)
98{ 109{
@@ -102,7 +113,7 @@ init_editfns (void)
102 Lisp_Object tem; 113 Lisp_Object tem;
103 114
104 /* Set up system_name even when dumping. */ 115 /* Set up system_name even when dumping. */
105 init_system_name (); 116 init_and_cache_system_name ();
106 117
107#ifndef CANNOT_DUMP 118#ifndef CANNOT_DUMP
108 /* When just dumping out, set the time zone to a known unlikely value 119 /* When just dumping out, set the time zone to a known unlikely value
@@ -1365,6 +1376,8 @@ DEFUN ("system-name", Fsystem_name, Ssystem_name, 0, 0, 0,
1365 doc: /* Return the host name of the machine you are running on, as a string. */) 1376 doc: /* Return the host name of the machine you are running on, as a string. */)
1366 (void) 1377 (void)
1367{ 1378{
1379 if (EQ (Vsystem_name, cached_system_name))
1380 init_and_cache_system_name ();
1368 return Vsystem_name; 1381 return Vsystem_name;
1369} 1382}
1370 1383
@@ -4965,6 +4978,7 @@ functions if all the text being accessed has this property. */);
4965 4978
4966 DEFVAR_LISP ("system-name", Vsystem_name, 4979 DEFVAR_LISP ("system-name", Vsystem_name,
4967 doc: /* The host name of the machine Emacs is running on. */); 4980 doc: /* The host name of the machine Emacs is running on. */);
4981 Vsystem_name = cached_system_name = Qnil;
4968 4982
4969 DEFVAR_LISP ("user-full-name", Vuser_full_name, 4983 DEFVAR_LISP ("user-full-name", Vuser_full_name,
4970 doc: /* The full name of the user logged in. */); 4984 doc: /* The full name of the user logged in. */);
diff --git a/src/filelock.c b/src/filelock.c
index f857c488143..99215f215e7 100644
--- a/src/filelock.c
+++ b/src/filelock.c
@@ -592,9 +592,10 @@ current_lock_owner (lock_info_type *owner, char *lfname)
592 return -1; 592 return -1;
593 593
594 /* On current host? */ 594 /* On current host? */
595 if (STRINGP (Vsystem_name) 595 Lisp_Object system_name = Fsystem_name ();
596 && dot - (at + 1) == SBYTES (Vsystem_name) 596 if (STRINGP (system_name)
597 && memcmp (at + 1, SSDATA (Vsystem_name), SBYTES (Vsystem_name)) == 0) 597 && dot - (at + 1) == SBYTES (system_name)
598 && memcmp (at + 1, SSDATA (system_name), SBYTES (system_name)) == 0)
598 { 599 {
599 if (pid == getpid ()) 600 if (pid == getpid ())
600 ret = 2; /* We own it. */ 601 ret = 2; /* We own it. */
diff --git a/src/sysdep.c b/src/sysdep.c
index 24cc5cb0b40..b4a9be1eb1a 100644
--- a/src/sysdep.c
+++ b/src/sysdep.c
@@ -1420,15 +1420,16 @@ extern int h_errno;
1420void 1420void
1421init_system_name (void) 1421init_system_name (void)
1422{ 1422{
1423 char *hostname_alloc = NULL;
1424 char *hostname;
1423#ifndef HAVE_GETHOSTNAME 1425#ifndef HAVE_GETHOSTNAME
1424 struct utsname uts; 1426 struct utsname uts;
1425 uname (&uts); 1427 uname (&uts);
1426 Vsystem_name = build_string (uts.nodename); 1428 hostname = uts.nodename;
1427#else /* HAVE_GETHOSTNAME */ 1429#else /* HAVE_GETHOSTNAME */
1428 char *hostname_alloc = NULL;
1429 char hostname_buf[256]; 1430 char hostname_buf[256];
1430 ptrdiff_t hostname_size = sizeof hostname_buf; 1431 ptrdiff_t hostname_size = sizeof hostname_buf;
1431 char *hostname = hostname_buf; 1432 hostname = hostname_buf;
1432 1433
1433 /* Try to get the host name; if the buffer is too short, try 1434 /* Try to get the host name; if the buffer is too short, try
1434 again. Apparently, the only indication gethostname gives of 1435 again. Apparently, the only indication gethostname gives of
@@ -1541,15 +1542,15 @@ init_system_name (void)
1541#endif /* !HAVE_GETADDRINFO */ 1542#endif /* !HAVE_GETADDRINFO */
1542 } 1543 }
1543#endif /* HAVE_SOCKETS */ 1544#endif /* HAVE_SOCKETS */
1544 Vsystem_name = build_string (hostname);
1545 xfree (hostname_alloc);
1546#endif /* HAVE_GETHOSTNAME */ 1545#endif /* HAVE_GETHOSTNAME */
1547 { 1546 char *p;
1548 char *p; 1547 for (p = hostname; *p; p++)
1549 for (p = SSDATA (Vsystem_name); *p; p++) 1548 if (*p == ' ' || *p == '\t')
1550 if (*p == ' ' || *p == '\t') 1549 *p = '-';
1551 *p = '-'; 1550 if (! (STRINGP (Vsystem_name) && SBYTES (Vsystem_name) == p - hostname
1552 } 1551 && strcmp (SSDATA (Vsystem_name), hostname) == 0))
1552 Vsystem_name = build_string (hostname);
1553 xfree (hostname_alloc);
1553} 1554}
1554 1555
1555sigset_t empty_mask; 1556sigset_t empty_mask;
diff --git a/src/xrdb.c b/src/xrdb.c
index e21206d0800..8500fb1095b 100644
--- a/src/xrdb.c
+++ b/src/xrdb.c
@@ -385,10 +385,11 @@ get_environ_db (void)
385 { 385 {
386 char *home = gethomedir (); 386 char *home = gethomedir ();
387 ptrdiff_t homelen = strlen (home); 387 ptrdiff_t homelen = strlen (home);
388 Lisp_Object system_name = Fsystem_name ();
388 ptrdiff_t filenamesize = (homelen + sizeof xdefaults 389 ptrdiff_t filenamesize = (homelen + sizeof xdefaults
389 + SBYTES (Vsystem_name)); 390 + SBYTES (system_name));
390 p = filename = xrealloc (home, filenamesize); 391 p = filename = xrealloc (home, filenamesize);
391 lispstpcpy (stpcpy (filename + homelen, xdefaults), Vsystem_name); 392 lispstpcpy (stpcpy (filename + homelen, xdefaults), system_name);
392 } 393 }
393 394
394 db = XrmGetFileDatabase (p); 395 db = XrmGetFileDatabase (p);
diff --git a/src/xterm.c b/src/xterm.c
index 130174dff19..892562bd612 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -10497,8 +10497,9 @@ static bool
10497same_x_server (const char *name1, const char *name2) 10497same_x_server (const char *name1, const char *name2)
10498{ 10498{
10499 bool seen_colon = false; 10499 bool seen_colon = false;
10500 const char *system_name = SSDATA (Vsystem_name); 10500 Lisp_Object sysname = Fsystem_name ();
10501 ptrdiff_t system_name_length = SBYTES (Vsystem_name); 10501 const char *system_name = SSDATA (sysname);
10502 ptrdiff_t system_name_length = SBYTES (sysname);
10502 ptrdiff_t length_until_period = 0; 10503 ptrdiff_t length_until_period = 0;
10503 10504
10504 while (system_name[length_until_period] != 0 10505 while (system_name[length_until_period] != 0
@@ -10890,14 +10891,15 @@ x_term_init (Lisp_Object display_name, char *xrm_option, char *resource_name)
10890#endif 10891#endif
10891 10892
10892 lim = min (PTRDIFF_MAX, SIZE_MAX) - sizeof "@"; 10893 lim = min (PTRDIFF_MAX, SIZE_MAX) - sizeof "@";
10893 if (lim - SBYTES (Vinvocation_name) < SBYTES (Vsystem_name)) 10894 Lisp_Object system_name = Fsystem_name ();
10895 if (lim - SBYTES (Vinvocation_name) < SBYTES (system_name))
10894 memory_full (SIZE_MAX); 10896 memory_full (SIZE_MAX);
10895 dpyinfo->x_id = ++x_display_id; 10897 dpyinfo->x_id = ++x_display_id;
10896 dpyinfo->x_id_name = xmalloc (SBYTES (Vinvocation_name) 10898 dpyinfo->x_id_name = xmalloc (SBYTES (Vinvocation_name)
10897 + SBYTES (Vsystem_name) + 2); 10899 + SBYTES (system_name) + 2);
10898 char *nametail = lispstpcpy (dpyinfo->x_id_name, Vinvocation_name); 10900 char *nametail = lispstpcpy (dpyinfo->x_id_name, Vinvocation_name);
10899 *nametail++ = '@'; 10901 *nametail++ = '@';
10900 lispstpcpy (nametail, Vsystem_name); 10902 lispstpcpy (nametail, system_name);
10901 10903
10902 /* Figure out which modifier bits mean what. */ 10904 /* Figure out which modifier bits mean what. */
10903 x_find_modifier_meanings (dpyinfo); 10905 x_find_modifier_meanings (dpyinfo);