Commit graph

392 commits

Author SHA1 Message Date
Paul Eggert
ba05d005e5 Update copyright year to 2021
Run "TZ=UTC0 admin/update-copyright".
2021-01-01 01:13:56 -08:00
Paul Eggert
ec8a17e938 Adjust to recent Gnulib changes
The latest Gnulib merge brought in free-posix, which causes 'free'
to preserve errno.  This lets us simplify some Emacs code that
calls 'free'.
* admin/merge-gnulib (GNULIB_MODULES): Add free-posix.
This module is pulled in by canonicalize-lgpl anyway,
so we might as well rely on it.
* lib-src/emacsclient.c (get_current_dir_name):
Sync better with src/sysdep.c.
* lib-src/etags.c (process_file_name, etags_mktmp):
* lib-src/update-game-score.c (unlock_file):
* src/fileio.c (file_accessible_directory_p):
* src/sysdep.c (get_current_dir_name_or_unreachable):
Simplify by assuming that 'free' preserves errno.
* src/alloc.c (malloc_unblock_input):
Preserve errno, so that xfree preserves errno.
* src/sysdep.c (get_current_dir_name_or_unreachable):
Simplify by using strdup instead of malloc+memcpy.
No need for realloc (and the old code leaked memory anyway on
failure); just use free+malloc.
2020-12-25 01:40:39 -08:00
Lars Ingebrigtsen
804a0e82f2 Don't output emacsclient warning if both -a and --quiet
* lib-src/emacsclient.c (set_local_socket): Don't output the
warning if both -a and --quiet are specified (bug#16117).
Inspired by a patch from Scott Turner <srt19170@gmail.com>.
2020-08-13 10:29:44 +02:00
Paul Eggert
4f41188a6e Stop using newly-deprecated dosname Gnulib module
Code is supposed to use the filename module now.
* admin/merge-gnulib (GNULIB_MODULES): Replace dosname with filename.
* lib/dosname.h: Remove this forwarding stub.
* lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
* lib-src/emacsclient.c, src/fileio.c:
Include filename.h instead of dosname.h.
2020-03-28 14:08:11 -07:00
Robert Pluim
13995f31a2 Make emacs prefer an existing ~/.emacs.d to an existing XDG location
* doc/emacs/custom.texi (Find Init): Update description of how Emacs
finds its init file directory and the interaction with
$XDG_CONFIG_HOME
(Early Init File): Correct XDG location of early-init.el

* etc/NEWS: Update description to make it clear the ~/.emacs.d is
preferred, even if the XDG location exists.

* lisp/startup.el: Prefer ~/.emacs.d even if the XDG location exists.

* lib-src/emacsclient.c (open_config): Prefer home directory the XDG
location.
2020-01-16 16:05:45 +01:00
Paul Eggert
365e01cc9f Update copyright year to 2020
Run "TZ=UTC0 admin/update-copyright $(git ls-files)".
2020-01-01 00:59:52 +00:00
Lars Ingebrigtsen
f198a5c514 Revert "emacsclient: ignore --eval parameters when starting alternate editor"
This reverts commit 6fe661342a.

The alternate editor may be Emacs, which is useful when you want to eval something in an existing Emacs (if it exists), or in a new Emacs if there's no server running.
2019-09-15 14:11:14 +02:00
Paul Eggert
44f15b63db emacsclient: adjust to new config file location
* lib-src/emacsclient.c (open_config): New arg XDG, to respect
XDG_CONFIG_HOME, consistently with Emacs proper.  Caller changed.
Use XDG convention if available, falling back on the old names
if not.
2019-08-30 00:24:47 -07:00
Lars Ingebrigtsen
6fe661342a emacsclient: ignore --eval parameters when starting alternate editor
* lib-src/emacsclient.c (fail): If the user said --eval, don't
pass those arguments to the alternate editor as file names.
Suggested by a patch from Scott Turner (bug#11474).
2019-06-27 21:00:36 +02:00
Juanma Barranquero
29babad728 Fix PATH_MAX change to lib-src/emacsclient.c
* lib-src/emacsclient.c (get_current_dir_name): Declare pwdlen.
2019-06-26 02:05:53 +02:00
Paul Eggert
824f784187 Prefer PATH_MAX to MAXPATHLEN
PATH_MAX is standardized, MAXPATHLEN is not.
Also, the Gnulib pathmax module fixes some rare bugs with PATH_MAX.
So prefer PATH_MAX to MAXPATHLEN unless we know the latter is
also correct (for some platform-specific code).
* admin/merge-gnulib (GNULIB_MODULES): Add pathmax.
This module was already present, as a dependency of canonicalize-lgpl,
but now Emacs is using it directly.  Sort.
* lib-src/emacsclient.c: Include stdint.h, pathmax.h.
(get_current_dir_name): Sync to current src/sysdep.c.
* lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
* src/sysdep.c: Include pathmax.h.
(get_current_dir_name_or_unreachable):
Use PATH_MAX instead of MAXPATHLEN.
2019-06-25 15:56:58 -07:00
Paul Eggert
b6af27927c Simplify lib-src version printing
* lib-src/Makefile.in (etags_cflags): Remove.
All uses replaced by a simple ‘-o $@’.
(ebrowse${EXEEXT}, emacsclient${EXEEXT}, emacsclientw${EXEEXT}):
Omit -DVERSION= option.
* lib-src/ebrowse.c (VERSION):
* lib-src/emacsclient.c (VERSION):
* lib-src/etags.c (EMACS_NAME, VERSION): Remove.
All uses replaced by PACKAGE_NAME and PACKAGE_VERSION.
* lib-src/ebrowse.c (version):
* lib-src/etags.c (print_version):
Use fputs to output the version info, since that’s fputs_unlocked.
* lib-src/etags.c (PROGRAM_NAME): New macro.
(print_version): Use it.
2019-06-20 08:57:25 -07:00
Paul Eggert
2bf957394c Improve port to platforms lacking euidaccess (Bug#35406)
* lib-src/emacsclient.c (set_local_socket):
Use faccessat with AT_EACCESS instead of using euidaccess.
* admin/merge-gnulib, lib/gnulib.mk.in, m4/gnulib-comp.m4:
Revert previous change.
2019-04-24 17:42:09 -07:00
Paul Eggert
b3a12c62c9 Improve XDG_RUNTIME_DIR diagnostic
* lib-src/emacsclient.c (set_local_socket):
If there appears to be an XDG runtime directory for the user
but XDG_RUNTIME_DIR is unset, suggest setting it while warning
about potential security issues (Bug#35300).
2019-04-20 09:40:10 -07:00
Paul Eggert
ba809612c0 Merge from origin/emacs-26
2fcf2df Fix copyright years by hand
26bed8b Update copyright year to 2019
2814292 Fix value of default frame height.  (Bug#33921)
2018-12-31 17:57:29 -08:00
Paul Eggert
26bed8ba10 Update copyright year to 2019
Run 'TZ=UTC0 admin/update-copyright $(git ls-files)'.
2019-01-01 01:01:13 +00:00
Paul Eggert
46b8100811 emacsclient: avoid background chatter
* lib-src/emacsclient.c (process_grouping): New function.
(act_on_signals, main): Use it.
(main): Omit "Waiting for Emacs..." and later "\n" messages
if in background, since that messes up the screen.
2018-12-06 10:48:04 -08:00
Paul Eggert
2f985977f6 Fix emacsclient hang when backgrounded
Problem reported by Kaushal Modi in:
https://lists.gnu.org/r/emacs-devel/2018-12/msg00083.html
The tcdrain call replaced an fdatasync call which had no
effect on the tty, so removing it entirely shouldn’t cause
problems.  The fdatasync call replaced an fsync call which
also had no effect on the tty, and the fsync call seems to be
badly-merged revenant of emacsclient’s old (circa 2004) way of
communicating to and from Emacs via FILE * streams, where
fsync was apparently needed when talking to sockets.
* lib-src/emacsclient.c [!DOS_NT]: Don’t include termios.h.
(flush_stdout): Remove.  All callers removed.
(main): Do not drain the tty after "Waiting for Emacs..."
message.  There should be no need to drain, and draining it
might send us a SIGTTOU.  Do not fflush stdout just before
exiting, as exiting does that for us.
2018-12-06 10:48:04 -08:00
Paul Eggert
bc6ffabe80 emacsclient: fix typo on recent socket-leak change
This ports to POSIXish platforms like macOS that lack SOCK_CLOEXEC.
Fix suggested by Eli Zaretskii in:
https://lists.gnu.org/r/emacs-devel/2018-12/msg00055.html
* lib-src/emacsclient.c (set_local_socket):
Don’t use SOCK_CLOEXEC; that’s cloexec_socket’s job.
2018-12-03 08:08:05 -08:00
Eli Zaretskii
2ff9dca17c Fix WINDOWSNT/DOS_NT build
Recent changes in sysdep.c and emacsclient unnecessarily
removed useful code from DOS_NT builds.  This changeset
reinstates that code.
* nt/inc/ms-w32.h (tcdrain): Redirect to _commit.
(fdatasync): No need to redirect anymore.

* lib-src/emacsclient.c (flush_stdout): Don't avoid calling
tcdrain on DOS_NT platforms.

* src/sysdep.c (reset_sys_modes): Don't ifdef away the call to
tcdrain on DOS_NT platforms.
2018-12-03 12:29:34 +02:00
Paul Eggert
5c412405c7 emacsclient: don’t leak socket to child processes
* lib-src/emacsclient.c [!WINDOWSNT]: Include fcntl.h.
(cloexec_socket): New function.
(set_tcp_socket, set_local_socket): Use it.
2018-12-02 23:55:01 -08:00
Paul Eggert
f5090b9129 Use tcdrain, not fdatasync, to drain ttys
fdatasync is for storage devices, not ttys.
* admin/merge-gnulib (GNULIB_MODULES): Remove fdatasync.
* lib/fdatasync.c, m4/fdatasync.m4: Remove.
* lib-src/Makefile.in (LIB_FDATASYNC):
* src/Makefile.in (LIB_FDATASYNC):
Remove.  All uses removed.
* lib-src/emacsclient.c [!DOS_NT]:
Include <termios.h>, for tcdrain.
* lib-src/emacsclient.c (flush_stdout):
* src/sysdep.c (reset_sys_modes): On ttys, use tcdrain instead
of fdatasync (except don’t use either function if DOS_NT).
* lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
2018-12-02 23:55:01 -08:00
Paul Eggert
3e5d775545 emacsclient: fix symlink/socket race
* lib-src/emacsclient.c (socket_status): New arg UID.
All uses changed.
(set_local_socket): Don’t create the unbound socket unless the
initial sanity checks on the socket file succeed; this
simplifies cleaning it up.  Check socket ownership again
after connecting, to fix a race (Bug#33366).
2018-12-02 23:55:00 -08:00
Paul Eggert
92282cb502 emacsclient: prefer XDG_RUNTIME_DIR (Bug#33367)
* lib-src/emacsclient.c: Disable -Wformat-truncation=2,
to avoid false alarms about the new snprintf calls.
(local_sockname): New function.
(set_local_socket): Use it.  Prefer XDG_RUNTIME_DIR (if set)
for location of socket directory.  Avoid unnecessary memory
allocation by using snprintf to destination.
* lisp/server.el (server-socket-dir): Prefer XDG_RUNTIME_DIR if set.
2018-12-01 23:08:48 -08:00
Eli Zaretskii
038b425cf0 Unbreak compilation of emacsclient on MS-Windows
* lib-src/emacsclient.c (main): Make "-suspend" handling
conditional on !WINDOWSNT, as there's no SIGSTOP nor 'kill'
there.
2018-11-26 22:41:03 +02:00
Paul Eggert
ed3ae3fc58 emacsclient: assume HAVE_INET_SOCKETS
* configure.ac (HAVE_INET_SOCKETS): Remove.
* lib-src/emacsclient.c: Simplify by assuming HAVE_SOCKETS and
HAVE_INET_SOCKETS, which are always true nowadays, except perhaps
for MS-DOS and if so this program shouldn’t be built there anyway.
Don’t bother including sys/types.h, as it’s not needed on modern
systems (and syswait.h does it for us anyway).
(main): Simplify by assuming SIGSTOP (which is always defined
if SIGCONT is), and by assuming HAVE_SOCKETS && HAVE_INET_SOCKETS.
2018-11-26 11:39:45 -08:00
Paul Eggert
5c1bf59658 emacsclient: negate NO_SOCKETS_IN_FILE_SYSTEM
* lib-src/emacsclient.c (SOCKETS_IN_FILE_SYSTEM): Rename from
NO_SOCKETS_IN_FILE_SYSTEM, with inverted sense.  All uses changed.
All uses were of the form ‘#ifndef NO_SOCKETS_IN_FILE_SYSTEM’, and
it’s easier to read ‘#ifdef SOCKETS_IN_FILE_SYSTEM’.
2018-11-26 11:39:44 -08:00
Paul Eggert
0331f2f4c5 emacsclient: fix some races on POSIX systems
Fix some longstanding race conditions due to emacsclient’s use of
‘signal’ instead of ‘sigaction’ and its use of nested signal
handlers.  These races could cause premature exit or incorrect
commands sent to Emacs.
* lib-src/emacsclient.c (signal) [!WINDOWSNT]: Do not undef.
(emacs_socket): Remove this static variable.  It is now a parameter.
(send_to_emacs): Do not exit merely because ‘send’ was interrupted.
Instead, act on the signal if possible, and then retry the ‘send’.
(pass_signal_to_emacs): Remove; now done by act_on_signals.
(reinstall_handler_if_needed, handle_sigttou, handle_sigwinch)
(install_handler): New functions.
(got_sigcont, got_sigtstp, got_sigttou, got_sigwinch):
New globals, used for more-portable signal handling.
(handle_sigcont, handle_sigtstp): Just set the static var; other
actions are now done later by act_on_signals.
(install_handler): New function that arranges for signals to
never be reset to default, on modern POSIX platforms.
This fixes some races.
(act_on_signals): New function.  When acting on SIGCONT,
don’t bother calling getpgrp if tcgetpgrp fails.
(start_daemon_and_retry_set_socket): Return the socket
rather than setting a global variable.  All uses changed.
(flush_stdout): New function that acts on signals received while
flushing.
(main): Use it.  emacs_socket is now a local var.
Act on signals received during recv.
2018-11-26 11:39:44 -08:00
Eli Zaretskii
2b1bc70105 Avoid compilation warning in emacsclient.c
* lib-src/emacsclient.c (set_tcp_socket): Avoid compilation
warning in MS-Windows build.
2018-11-23 11:12:40 +02:00
Paul Eggert
652dabfff6 emacsclient: fix child exit when exec fails
* lib-src/emacsclient.c (start_daemon_and_retry_set_socket):
If the execvp of Emacs fails exit instead of having the child
run on and do the work of the parent.  Coalesce duplicate code.
2018-11-23 00:33:50 -08:00
Paul Eggert
ef1f60301a emacsclient: one ‘main’ function
* lib-src/emacsclient.c (main): Simplify by having just one
‘main’ function instead of two.  Don’t assume argc is positive (!).
2018-11-23 00:13:08 -08:00
Paul Eggert
5daba9d8a5 emacsclient: tidy socket failure cleanup
* lib-src/emacsclient.c (set_tcp_socket, set_local_socket):
Close socket (instead of leaking it) when ‘connect’ fails.
(socket_status): Return errno if stat fails and -1 if we don’t own.
(set_local_socket): Simplify based on socket_status change.
2018-11-22 23:46:14 -08:00
Paul Eggert
7a85753d35 emacsclient: coalesce WINDOWSNT-specific code
* lib-src/emacsclient.c (sock_err_message) [WINDOWSNT]:
Do nothing if w32_window_app () && alternate_editor.
Both callers changed.
2018-11-22 09:33:00 -08:00
Paul Eggert
5773470ff3 emacsclient: sockaddr portability fixes
* lib-src/emacsclient.c (get_server_config, set_tcp_socket)
(set_local_socket): Initialize any platform-specific extensions
of struct to zero, just in case.
(set_tcp_socket, set_local_socket): Don’t assume struct
layout details that POSIX does not specify.
Use union to sidestep some problems with strict aliasing.
Remove unnecessary casts.
2018-11-22 09:24:51 -08:00
Paul Eggert
ad063d2552 emacsclient: getopt minor cleanup
* lib-src/emacsclient.c (shortopts): New constant.
(decode_options): Use it.  Do not assume EOF == -1.
2018-11-21 18:38:20 -08:00
Paul Eggert
0f22bf099e emacsclient: omit EXTRA_SPACE guesswork
* lib-src/emacsclient.c: Include <intprops.h>.
(EXTRA_SPACE): Remove; code no longer guesses this is enough.
(open_config): New function.
(get_server_config): Use it.
(set_local_socket): Compute upper bound of buffer size
instead of guessing via EXTRA_SPACE.
2018-11-21 14:48:59 -08:00
Paul Eggert
8f49cb00d0 emacsclient: take more care with int width
* lib-src/emacsclient.c: Include inttypes.h, stddef.h.
(emacs_pid, main): Don’t assume pid fits in int.
(fail): Don’t assume pointer difference fits in int.
(set_local_socket): Don’t assume uid fits in long.
2018-11-21 11:36:57 -08:00
Paul Eggert
c0870736ff emacsclient.c: use C99 to avoid {}
* lib-src/emacsclient.c (set_local_socket):
Assume C99 decl-after-statement and reindent.
2018-11-21 11:08:51 -08:00
Paul Eggert
3fe110d31a emacsclient: improve use of locals
* lib-src/emacsclient.c (main):
Use smaller scopes for some locals.
2018-11-21 10:53:30 -08:00
Paul Eggert
7a85a40ef4 emacsclient: fix unlikely crash with "&"
* lib-src/emacsclient.c (quote_argument):
Mention *DATA in comment so it’s clear DATA must be non-null.
(quote_argument, unquote_argument): Simplify.
(unquote_argument): Don’t crash if the string ends in "&".
2018-11-21 10:53:30 -08:00
Eli Zaretskii
008bc1cbc8 Fix last change
* lib-src/emacsclient.c (start_daemon_and_retry_set_socket)
[!WINDOWSNT]: Condition usage of socket_name on
NO_SOCKETS_IN_FILE_SYSTEM being undefined.
2018-11-19 21:51:51 +02:00
Eli Zaretskii
57d5c14d2a Avoid compiler warning in emacsclient.c
* lib-src/emacsclient.c (socket_name): Define only if
NO_SOCKETS_IN_FILE_SYSTEM is not defined, to avoid a compiler
warning.
2018-11-19 21:47:40 +02:00
Paul Eggert
0e3b245862 emacsclient.c: file name component fixes
* lib-src/emacsclient.c: Include <dosname.h>.
(file_name_absolute_p): Remove, as a code duplicate.
All uses replaced by IS_ABSOLUTE_FILE_NAME.
(set_local_socket): Don’t treat \ as a file name separator
on GNU and POSIX hosts.
2018-11-19 11:38:21 -08:00
Paul Eggert
736f1b364f emacsclient.c: reindent to fit in 80
* lib-src/emacsclient.c: Reindent slightly.
2018-11-19 11:38:20 -08:00
Paul Eggert
b944e88663 emacsclient.c: use C99 better
* lib-src/emacsclient.c (get_current_dir_name)
(send_to_emacs, set_tcp_socket, set_local_socket, main):
Take advantage of C99 stmt before decl.
2018-11-19 11:38:20 -08:00
Paul Eggert
95ea5c257c emacsclient.c: use STDOUT_FILENO
* lib-src/emacsclient.c (find_tty, handle_sigcont, main):
Use STDOUT_FILENO instead of fileno (stdout) or magic 1.
2018-11-19 11:38:20 -08:00
Paul Eggert
51f9c5a6d1 emacsclient.c: use bool for boolean
* lib-src/emacsclient.c (nowait, quiet, suppress_output, eval, tty)
(decode_options, file_name_absolute_p, get_server_config)
(strprefix, find_tty, set_socket, main):
Use bool for boolean.
(create_frame): New static var, replacing the old current_frame
and with inverted sense, as this is clearer.
2018-11-19 11:38:20 -08:00
Paul Eggert
9f47bb229d emacsclient.c: make identifiers more local
* lib-src/emacsclient.c (progname, main_argc, main_argv):
(nowait, quiet, suppress_output, eval, current_frame, display):
(alt_display, parent_id, tty, alternate_editor, socket_name):
(server_file, tramp_prefix, emacs_pid, frame_parameters):
(longopts, xstrdup, send_bufffer, sblen, emacs_socket):
Now static.
(SEND_BUFFER_SIZE, send_buffer, sblen):
Now local to send_to_emacs.
2018-11-19 11:38:20 -08:00
Paul Eggert
4a5034d84e emacsclient.c: clean up preprocessing directives
* lib-src/emacsclient.c [WINDOWSNT]: Omit duplicate stdlib.h include.
Include min-max.h.
(EXIT_SUCCESS, EXIT_FAILURE, min): Remove; no longer needed.
(AUTH_KEY_LENGTH, SEND_BUFFER_SIZE): Now constants instead of macros.
2018-11-19 11:38:19 -08:00
Glenn Morris
5c0d8bb95b Root emacsclient no longer connects to non-root sockets
* lib-src/emacsclient.c (set_local_socket): Don't ignore socket
ownership when run by root.
Ref: http://lists.gnu.org/r/emacs-devel/2018-11/msg00019.html
2018-11-13 13:15:39 -05:00