diff options
| author | Paul Eggert | 2014-12-29 12:37:53 -0800 |
|---|---|---|
| committer | Paul Eggert | 2014-12-29 12:38:58 -0800 |
| commit | f9acac751d4cd22480e62cc63936b1208ca9fe48 (patch) | |
| tree | 49f37d577e63a00042dc990ec92651d19be8870a /src | |
| parent | ce1ebdf1ba8acc75e8f959f414652cdc87e76401 (diff) | |
| download | emacs-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.c | 16 | ||||
| -rw-r--r-- | src/filelock.c | 7 | ||||
| -rw-r--r-- | src/sysdep.c | 23 | ||||
| -rw-r--r-- | src/xrdb.c | 5 | ||||
| -rw-r--r-- | src/xterm.c | 12 |
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. */ |
| 94 | static char dump_tz_string[] = "TZ=UtC0"; | 94 | static 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. */ | ||
| 98 | static Lisp_Object cached_system_name; | ||
| 99 | |||
| 100 | static void | ||
| 101 | init_and_cache_system_name (void) | ||
| 102 | { | ||
| 103 | init_system_name (); | ||
| 104 | cached_system_name = Vsystem_name; | ||
| 105 | } | ||
| 106 | |||
| 96 | void | 107 | void |
| 97 | init_editfns (void) | 108 | init_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; | |||
| 1420 | void | 1420 | void |
| 1421 | init_system_name (void) | 1421 | init_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 | ||
| 1555 | sigset_t empty_mask; | 1556 | sigset_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 | |||
| 10497 | same_x_server (const char *name1, const char *name2) | 10497 | same_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); |