Commit graph

39727 commits

Author SHA1 Message Date
Paul Eggert
e8ca0c5e16 Fix version numbers for some GnuTLS features
Problem reported by Glenn Morris (Bug#27708#58).
* src/gnutls.c (HAVE_GNUTLS_X509_SYSTEM_TRUST):
New macro.  Use it instead of low-level version number checks.
(HAVE_GNUTLS_AEAD): Move here from gnutls.h, and rename from
HAVE_GNUTLS3_AEAD.  All uses changed.  Indent preprocessor lines.
* src/gnutls.h (HAVE_GNUTLS3_CIPHER, HAVE_GNUTLS3_DIGEST)
(HAVE_GNUTLS3_HMAC): Remove, since these were available
before GnuTLS 3.0.0 and the code checks them only if HAVE_GNUTLS3
is defined.  Remove all uses; this simplifies the code a bit.
2017-08-03 18:36:15 -07:00
Paul Eggert
ddc1ff58de Port recent rename changes to RHEL 7 + NFS
Problem reported by Ted Zlatanov in:
http://lists.gnu.org/archive/html/emacs-devel/2017-08/msg00082.html
* src/fileio.c (Frename_file): On RHEL 7 + NFS, renameat2 can fail
with errno == EINVAL when it is not supported.  So treat that case
like errno == ENOSYS.  Also, when ok_if_already_exists is neither
nil nor an integer, just call plain rename; this avoids an extra
syscall to renameat2 when the latter fails with errno == EINVAL or
ENOSYS or ENOENT.
2017-08-03 16:19:21 -07:00
Paul Eggert
f465efe412 Port GnuTLS usage to Ubuntu 16.04.2 LTS
* src/gnutls.h (HAVE_GNUTLS3_AEAD): Define only if GnuTLS 3.5.1 or
later, as opposed to the old 3.4.0 or later.
2017-08-03 01:01:30 -07:00
Paul Eggert
a8a81df8da Simplify configuration of HAVE_GNUTLS3 etc.
There's only one GnuTLS, so configuring these symbols at
'configure' time is overkill.  Simplify things by moving their
configuration to src/gnutls.h (Bug#27708).
* configure.ac (HAVE_GNUTLS3, HAVE_GNUTLS3_HMAC, HAVE_GNUTLS3_AEAD)
(HAVE_GNUTLS3_CIPHER, HAVE_GNUTLS3_DIGEST): Move these definitions
from here ...
* src/gnutls.h: ... to here, and simplify.
2017-08-02 19:49:43 -07:00
Paul Eggert
1f9f514e7c When renaming a file, ask only if EEXIST or ENOSYS
* src/fileio.c (Frename_file): Avoid calling Ffile_directory_p
more than once on FILE.  Use renameat_noreplace, so that we can
ask the user (and unlink and retry) only if this fails with errno
== EEXIST or ENOSYS.  This avoids the need to ask the user for
permission to do an operation that will fail anyway.  Simplify
computation of ok_if_already_exists for subsidiary functions.
* src/filelock.c (rename_lock_file): Prefer renameat_noreplace
if it works, as this avoids the need to link and unlink.
* src/lisp.h (renameat_noreplace): New decl.
* src/sysdep.c [HAVE_LINUX_FS_H]: Include linux/fs.h and sys/syscall.h.
(renameat_noreplace): New function.
2017-08-02 01:59:32 -07:00
Paul Eggert
5656492d04 When creating a link, ask only if EEXIST
* src/fileio.c (Fadd_name_to_file, Fmake_symbolic_link):
Ask the user (and unlink and retry) only if link creation fails
with errno == EEXIST.  This avoids the need to ask the user for
permission to do an operation that will fail anyway.
2017-08-02 01:59:32 -07:00
Paul Eggert
1a65afb7ec Don’t worry about unlink if errno == ENOENT
* src/fileio.c (Fdelete_file):
* src/keyboard.c (Fopen_dribble_file): Do not report failure to
remove a file if unlink fails with errno == ENOENT.  This can
happen even if Emacs is the only program removing the file, in
case an NFS cache overflows.  The file does not exist if errno ==
ENOENT, so it is OK to proceed.
2017-08-01 17:24:50 -07:00
Paul Eggert
3a8d0cc825 Avoid most stat calls when completing file names
* admin/merge-gnulib (GNULIB_MODULES): Add d-type.
* lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
* m4/d-type.m4: New file, copied from gnulib.
* src/dired.c (DT_UNKNOWN, DT_DIR, DT_LINK)
[!HAVE_STRUCT_DIRENT_D_TYPE]: New constants.
(dirent_type): New function.
(file_name_completion): Use it, to avoid unnecessary calls to
stat-like functions on GNU/Linux and other platforms with d_type.
(file_name_completion_stat): Just follow the link; there is no
need to try first with AT_SYMLINK_NOFOLLOW since the directory
entry was already checked to exist.
2017-07-31 12:56:51 -07:00
Eli Zaretskii
dcfcaf40d5 ; Don't use non-ASCII quotes in comments
* src/regex.h:
* src/regex.c (re_wctype_parse): Don't use non-ASCII quotes in
comments.
2017-07-30 22:42:18 +03:00
Eli Zaretskii
dc9c6a071c Preserve this-command-keys across recursive-edit invocations
* src/minibuf.c (read_minibuf, read_minibuf_unwind): Save and
restore this-command-keys, to preserve it across recursive-edit.
(Bug#27470)
2017-07-28 15:40:25 +03:00
Andreas Schwab
7a4d9f6304 Properly align global lispsym
* lib-src/make-docfile.c (close_emacs_globals): Wrap struct
Lisp_Symbols inside struct.
* src/alloc.c (sweep_symbols): Update use of lispsym.
* src/lisp.h (builtin_lisp_symbol): Likewise.
2017-07-25 01:20:44 +02:00
Charles A. Roelli
2c87aab579 Enable GUI Emacs without 'make install' on macOS (Bug #27645)
* nextstep/INSTALL: Correct it, and mention that Emacs can be run
from 'src/emacs'.

* src/nsterm.m (applicationDidFinishLaunching:): When Emacs is
launched outside of a macOS application bundle, change its
activation policy from the default 'prohibited' to 'regular'.

; * etc/NEWS: Mention the change on macOS.
2017-07-23 16:48:33 +02:00
Noam Postavsky
8b18911a5c Signal error for symbol names with strange quotes (Bug#2967)
* src/lread.c (read1): Signal an error when a symbol starts with a
non-escaped quote-like character.
* test/src/lread-tests.el (lread-tests--funny-quote-symbols): New
test.
* etc/NEWS: Announce change.
2017-07-22 08:47:31 -04:00
Alexander Gramiak
ebb78a7bfa Add a minor mode interface for display-line-numbers
* lisp/cus-start.el: Use the new display-line-numbers group.
* lisp/display-line-numbers.el: New file.

* doc/emacs/custom.texi (Init Rebinding): Re-add entry that used to
belong to linum-mode.
* doc/emacs/modes.texi (Minor Modes): Summarize the mode.
* etc/NEWS: Document display-line-numbers-mode and its customization
variables, and mention that display-line-numbers-width is
buffer-local.

* src/xdisp.c (syms_of_xdisp) <display-line-numbers-width>: Fix a
typo.
2017-07-22 12:16:08 +03:00
Paul Eggert
ffde1e9b9e Simplify recent gnutls.c changes
* src/gnutls.c (clear_storage) [HAVE_GNUTLS3_AEAD]: Remove.
All uses replaced by calls to explicit_bzero; that’s clear enough.
(gnutls_symmetric_aead) [HAVE_GNUTLS3_AEAD]: Simplify by
coalescing duplicate actions.  There is no need to invoke
SAFE_FREE before calling ‘error’.
2017-07-20 16:22:36 -07:00
Eli Zaretskii
9c6cacd338 Fix hscrolling calculations when display-line-numbers is set
* src/xdisp.c (move_it_in_display_line_to): Account for line
numbers in hscrolled lines.  (Bug#27756)
2017-07-20 16:25:11 +03:00
Philipp Stephani
eda9aa0d31 * src/gnutls.c (clear_storage): Define only if needed. 2017-07-19 21:21:40 +02:00
Eli Zaretskii
c204948909 Avoid infloop due to Eshell's "smart" redisplay
* src/xdisp.c (pos_visible_p): Save and restore the window's
mode-line and header-line height.  (Bug#27752)
2017-07-18 19:13:58 +03:00
Eli Zaretskii
a20f4f02c6 Fix indentation when display-line-numbers is non-nil
* src/xdisp.c (x_produce_glyphs): Fix a typo in deciding whether
to go one more tab stop to display a TAB.  (Bug#27743)
2017-07-18 17:25:30 +03:00
Lars Ingebrigtsen
742caff3b8 Don't use gtk_widget_get_scale_factor on old GTK3 versions
* src/gtkutil.c (xg_get_scale): gtk_widget_get_scale_factor is
only present since GTK 3.10.
2017-07-18 15:31:46 +02:00
Paul Eggert
1a62721f2d Port gnutls.c to older (buggier?) GnuTLS
Problem reported for GnuTLS 3.2.1 by Glenn Morris in:
http://lists.gnu.org/archive/html/emacs-devel/2017-07/msg00716.html
http://lists.gnu.org/archive/html/emacs-devel/2017-07/msg00742.html
Although I don't see how this bug can occur with vanilla GnuTLS 3.2.1,
perhaps hydra was using a modified GnuTLS.
* src/gnutls.c (Fgnutls_ciphers): Don't assume GNUTLS_CIPHER_NULL
is at the end of the list returned by gnutls_cipher_list,
or that the earlier ciphers all have non-null names.
2017-07-18 00:37:32 -07:00
Lars Ingebrigtsen
727b3df056 Move comments around 2017-07-17 16:58:57 +02:00
Lars Ingebrigtsen
552c90edb8 Make scaling work (?) on pre-GTK3 systems
* src/gtkutil.c (xg_get_gdk_scale): Reinstate function.
(xg_get_scale): Use it on non-GTK3 systems.
2017-07-17 16:58:57 +02:00
Lars Ingebrigtsen
b04132754e Always return the GDK scale
* src/gtkutil.c (xg_get_scale): Return the GDK scale always.
2017-07-17 16:58:57 +02:00
Lars Ingebrigtsen
36cf0791ba Remove usage of the GDK_SCALE variable
* src/gtkutil.c (xg_get_gdk_scale): Remove.
(xg_get_default_scrollbar_height)
(xg_get_default_scrollbar_width): Pass in a frame to check for
scaling.
(xg_frame_set_char_size): Use the API for querying scale
instead of looking at the GDK_SCALE variable.
(xg_get_default_scrollbar_width): Ditto.
(xg_get_default_scrollbar_height): Ditto.
(xg_update_scrollbar_pos): Ditto.

* src/xfns.c (x_set_scroll_bar_default_height): Pass in the
frame to get the width.
2017-07-17 16:58:57 +02:00
Lars Ingebrigtsen
4198b4d985 Get positions of menus and tooltips right on HiDPI
* src/gtkutil.c (xg_get_scale): New function.
(xg_show_tooltip): Use it.

* src/xmenu.c (create_and_show_popup_menu): Put menus in the
right place.
2017-07-17 16:58:57 +02:00
Eli Zaretskii
d7f7fef1c1 Allow user control on what starts and ends a paragraph for bidi
* src/buffer.h (struct buffer): New members
bidi_paragraph_separate_re_ and bidi_paragraph_start_re_.
* src/buffer.c (bset_bidi_paragraph_start_re)
(bset_bidi_paragraph_separate_re): New setters/
(Fbuffer_swap_text): Swap the values of bidi-paragraph-start-re and
bidi-paragraph-separate-re.
(init_buffer_once): Init the values of bidi-paragraph-start-re and
bidi-paragraph-separate-re.
(syms_of_buffer) <bidi-paragraph-start-re, bidi-paragraph-separate-re>:
New per-buffer variables.
* src/bidi.c (bidi_at_paragraph_end, bidi_find_paragraph_start):
Support bidi-paragraph-start-re and bidi-paragraph-separate-re.
(bidi_move_to_visually_next): Handle correctly the case when the
separator matches an empty string.  (Bug#27526)

* doc/emacs/mule.texi (Bidirectional Editing):
* doc/lispref/display.texi (Bidirectional Display): Document
bidi-paragraph-start-re and bidi-paragraph-separate-re.

* etc/NEWS: Mention bidi-paragraph-start-re and
bidi-paragraph-separate-re.
2017-07-17 17:50:37 +03:00
Martin Rudalics
b707231833 Have Fgnutls_available_p return Qnil when GNUTLS is undefined
* src/gnutls.c (Fgnutls_available_p): Return Qnil when GNUTLS is
undefined to allow --with-gnutls=no builds to proceed.
2017-07-17 09:00:55 +02:00
Paul Eggert
8250a20f9d * src/gnutls.c: Restore some comments. 2017-07-16 17:27:30 -07:00
Paul Eggert
b740b02d23 Use memset, not bzero
* src/ftcrfont.c (ftcrfont_glyph_extents): Use memset instead
of the (less-portable) bzero.
2017-07-16 16:29:12 -07:00
Paul Eggert
59f6972134 Use explicit_bzero to clear GnuTLS keys
* admin/merge-gnulib (GNULIB_MODULES): Add explicit_bzero.
* lib/explicit_bzero.c, m4/explicit_bzero.m4: New files.
* lib/gnulib.mk.in, m4/gnulib-comp.m4: Regenerate.
* src/gnutls.c (clear_storage): New function.
(gnutls_symmetric_aead): Use it instead of memset.
2017-07-16 16:29:12 -07:00
Alan Third
30444c695a Fix some frame handling issues on NS
* lisp/frame.el (mouse-absolute-pixel-position): Use new NS function.
* src/nsfns.m (Sns_mouse_absolute_pixel_position): New function.
* src/nsterm.m (x_make_frame_visible): Re-establish parent-child
relationship if it's broken.
2017-07-15 22:12:33 +01:00
Eli Zaretskii
b30ee0c922 Avoid link errors with older versions of GnuTLS
* src/gnutls.c (Fgnutls_ciphers, gnutls_symmetric_aead)
(Fgnutls_macs, Fgnutls_digests): Conditionally compile code that
calls GnuTLS functions which might be unavailable in older
versions of GnuTLS.
2017-07-15 16:54:12 +03:00
Eli Zaretskii
cc78d5339c Improve some GnuTL error messages
* src/gnutls.c (gnutls_symmetric_aead, gnutls_symmetric):
* src/fns.c (Fsecure_hash_algorithms): Fix error messages.
2017-07-15 14:41:44 +03:00
Eli Zaretskii
178e0df2c2 Fix compilation of gnutls.c with older GnuTLS
* src/gnutrls.c (syms_of_gnutls): Condition some defsubr's
on HAVE_GNUTLS3, to avoid compilation errors when GnuTLS
v3.X is not available.  Reported by Colin Baxter <m43cap@yandex.com>.
2017-07-15 14:03:44 +03:00
Eli Zaretskii
d23f38e31d Rearrange MS-Windows code that dynamically loads GnuTLS functions
* src/gnutls.c [WINDOWSNT]: Reorganize definitions and loading
of functions using the same preprocessing directives as in the code.
2017-07-15 11:33:22 +03:00
Eli Zaretskii
55d65682ab Fix the MS-Windows build broken in gnutls.c
* src/gnutls.c (Fgnutls_available_p) [WINDOWSNT]: Move the DLL
loading code to after 'capabilities' has been calculated.  Remove
redundant comments.
2017-07-15 10:43:38 +03:00
Lars Ingebrigtsen
511fe21b88 src/image.c (compute_image_size): Remove superfluous checks.
* src/image.c (compute_image_size): Remove superfluous checks.
2017-07-15 03:21:07 +02:00
Lars Ingebrigtsen
ae56c9674b Make combinations of :width/:max-height image specs work reliably
* doc/lispref/display.texi (ImageMagick Images): Document
:width/:max-height combinations (etc) (bug #25583).

* src/image.c (compute_image_size): Handle :width/:max-height
(etc) combinations consistently (by letting "max" win and
preserve ratio).

* test/manual/image-size-tests.el (image-size-tests): Add
tests for :width/:max-height (etc) combinations.
2017-07-15 02:48:17 +02:00
Paul Eggert
05b8b86699 GnuTLS integer-overflow and style fixes
This tweaks the recently-added GnuTLS improvements so that
they avoid some integer-overflow problems and follow typical
Emacs style a bit better.
* configure.ac (HAVE_GNUTLS3_HMAC, HAVE_GNUTLS3_AEAD)
(HAVE_GNUTLS3_CIPHER): Use AC_CACHE_CHECK so that the
configure-time results are displayed.
* src/fns.c (extract_data_from_object): Return char *, not char
const *, since one gnutls caller wants a non-const pointer.  Use
CONSP rather than !NILP when testing for conses.  Use CAR_SAFE
instead of rolling our own code.  Prefer signed types to unsigned
when either will do.  Report problems for lengths out of range,
instead of silently mishandling them.
* src/gnutls.c (emacs_gnutls_strerror): New function, to simplify
callers.  All callers of gnutls_sterror changed.
(Fgnutls_boot): Check for integers out of range rather than
silently truncating them.
(gnutls_symmetric_aead): Check for integer overflow in size
calculations.
(gnutls_symmetric_aead, Fgnutls_macs, Fgnutls_digests):
Prefer signed to unsigned integers where either	will do.
(gnutls_symmetric_aead, gnutls_symmetric):
Work even if ptrdiff_t is wider than ‘long’.
(gnutls_symmetric, Fgnutls_hash_mac, Fgnutls_hash_digest):
Check for integer overflow in algorithm selection.
2017-07-14 16:36:18 -07:00
Eli Zaretskii
389fb2aebf Fix the MS-Windows build due to added GnuTLS functions
* src/gnutls.c [WINDOWSNT]: Add DEF_DLL_FN for new functions.
(init_gnutls_functions) [WINDOWSNT]: Add LOAD_DLL_FN for new
functions.  Add #define redirections for new functions.
(gnutls_symmetric_aead): Fix format specs to be more portable when
printing ptrdiff_t arguments.
* src/fns.c (gnutls_rnd) [WINDOWSNT]: Redirect to w32_gnutls_rnd
wrapper.
* src/gnutls.h [WINDOWSNT]: Add prototype for w32_gnutls_rnd.

* test/lisp/net/gnutls-tests.el (gnutls-tests-tested-macs)
(gnutls-tests-tested-digests, gnutls-tests-tested-ciphers): Call
gnutls-available-p, otherwise GnuTLS functions might not be loaded
from the DLL on MS-Windows.
2017-07-14 22:00:55 +03:00
Ted Zlatanov
583995c62d
GnuTLS HMAC and symmetric cipher support
* etc/NEWS: Add news for new feature.

    * doc/lispref/text.texi (GnuTLS Cryptography): Add
    documentation.

    * configure.ac: Add macros HAVE_GNUTLS3_DIGEST,
    HAVE_GNUTLS3_CIPHER, HAVE_GNUTLS3_AEAD, HAVE_GNUTLS3_HMAC.

    * src/fns.c (Fsecure_hash_algorithms): Add function to list
    supported `secure-hash' algorithms.
    (extract_data_from_object): Add data extraction function that
    can operate on buffers and strings.
    (secure_hash): Use it.
    (Fsecure_hash): Mention `secure-hash-algorithms'.

    * src/gnutls.h: Include gnutls/crypto.h.

    * src/gnutls.c (Fgnutls_ciphers, gnutls_symmetric_aead)
    (gnutls_symmetric, Fgnutls_symmetric_encrypt, Fgnutls_symmetric_decrypt)
    (Fgnutls_macs, Fgnutls_digests, Fgnutls_hash_mac, Fgnutls_hash_digest)
    (Fgnutls_available_p): Implement GnuTLS cryptographic integration.

    * test/lisp/net/gnutls-tests.el: Add tests.
2017-07-14 11:06:16 -04:00
Paul Eggert
9dee1c884e Improve stack-overflow heuristic on GNU/Linux
Problem reported by Steve Kemp (Bug#27585).
* src/eval.c (near_C_stack_top): Remove.  All uses replaced
by current_thread->stack_top.
(record_in_backtrace): Set current_thread->stack_top.
This is for when the Lisp interpreter calls itself.
* src/lread.c (read1): Set current_thread->stack_top.
This is for recursive s-expression reads.
* src/print.c (print_object): Set current_thread->stack_top.
This is for recursive s-expression printing.
* src/thread.c (mark_one_thread): Get stack top first.
* src/thread.h (struct thread_state.stack_top): Now void *, not char *.
2017-07-14 04:57:18 -07:00
Eli Zaretskii
037d8bdfeb Add assertion related to display-line-numbers
* src/xdisp.c (maybe_produce_line_number): Add assertion for the
condition regarding IT->glyph_row->used[TEXT_AREA] expected by the
code.  (Bug#27668)
2017-07-14 11:00:25 +03:00
Eli Zaretskii
6fa3176cca Prevent display corruption when display-line-numbers is set
* src/xdisp.c (try_window_reusing_current_matrix): If giving up
due to display-line-numbers, clear the window's desired glyph
matrix before returning, as the following call to try_window will
call display_line, which expects rows of the desired matrix
cleared.  (Bug#27668)
2017-07-14 10:53:36 +03:00
Martin Rudalics
01a98e918d Minor tweaks of new line number display variables
* src/xdisp.c (Vdisplay_line_numbers): Tweak doc-string.
(Vdisplay_line_number_width): Rename to
Vdisplay_line_numbers_width.
(maybe_produce_line_number): Comply with above rename.
* lisp/cus-start.el (standard):
* lisp/frame.el (top-level):
* etc/NEWS: Comply with renaming of
`display-line-number-width' to `display-line-numbers-width'.
2017-07-12 17:35:31 +02:00
Eli Zaretskii
4ddff36f6a Avoid assertion violations in close_infile_unwind
* src/lread.c (close_infile_unwind): A temporary band-aid solution
for bug#27642: allow 'infile' be NULL.
2017-07-12 17:49:21 +03:00
Eli Zaretskii
10b876b25b ; * src/xdisp.c (syms_of_xdisp) <display-line-numbers>: Copyedits. 2017-07-11 18:11:33 +03:00
Eli Zaretskii
373cef5fe1 Improve documentation of display-line-numbers
* src/xdisp.c (syms_of_xdisp) <display-line-numbers>: Improve the
doc string.  Suggested by Alex <agrambot@gmail.com>.
2017-07-11 18:08:46 +03:00
Nicolas Petton
0bece6c681 Add an optional testfn parameter to assoc
* src/fns.c (assoc): New optional testfn parameter used for comparison
when provided.
* test/src/fns-tests.el (test-assoc-testfn): Add tests for the new
'testfn' parameter.
* src/buffer.c:
* src/coding.c:
* src/dbusbind.c:
* src/font.c:
* src/fontset.c:
* src/gfilenotify.c:
* src/image.c:
* src/keymap.c:
* src/process.c:
* src/w32fns.c:
* src/w32font.c:
* src/w32notify.c:
* src/w32term.c:
* src/xdisp.c:
* src/xfont.c: Add a third argument to Fassoc calls.
* etc/NEWS:
* doc/lispref/lists.texi: Document the new 'testfn' parameter.
2017-07-11 10:07:16 +02:00