mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-23 10:34:07 +00:00
Merge from origin/emacs-28
1ccd3eb721
(origin/emacs-28) ; Fix typo in etc/NEWS0f28ee94ac
* NEWS: Mention rcirc connects to #emacs by defaultaacafbe267
Refactor mh-utils-tests macro 'with-mh-test-env'ead5c5cc51
Avoid using variable before it has been initializedb2c50d7cf3
Clarify docstring of blink-matching-parend2a34cabcf
; Very minor touch-up to a recent change36a7ce4393
; * doc/emacs/trouble.texi (After a Crash): Fix typo.1cd1b2835b
* doc/misc/gnus.texi (Loose Threads): Use regexp-opt in ex...9f041cdfac
Bump project.el versionad2287e659
Retain compatibility with older project.el projectsd86b2e59c7
native-comp-available-p is the definitive test1b383ac424
Minor fix of a recently installed documentation change4d76765b6c
Fix md5 issue in recent Gnulib merge18308b739a
Tweak recent 'configure' fix # Conflicts: # etc/NEWS
This commit is contained in:
commit
1b11fcae92
@ -30,7 +30,8 @@ GNULIB_MODULES='
|
||||
canonicalize-lgpl
|
||||
careadlinkat close-stream copy-file-range
|
||||
count-leading-zeros count-one-bits count-trailing-zeros
|
||||
crypto/md5-buffer crypto/sha1-buffer crypto/sha256-buffer crypto/sha512-buffer
|
||||
crypto/md5 crypto/md5-buffer
|
||||
crypto/sha1-buffer crypto/sha256-buffer crypto/sha512-buffer
|
||||
d-type diffseq double-slash-root dtoastr dtotimespec dup2
|
||||
environ execinfo explicit_bzero faccessat
|
||||
fchmodat fcntl fcntl-h fdopendir file-has-acl
|
||||
@ -49,7 +50,7 @@ GNULIB_MODULES='
|
||||
'
|
||||
|
||||
AVOIDED_MODULES='
|
||||
btowc close dup fchdir fstat langinfo lock
|
||||
btowc close crypto/af_alg dup fchdir fstat langinfo lock
|
||||
mbrtowc mbsinit memchr mkdir msvc-inval msvc-nothrow nl_langinfo
|
||||
openat-die opendir pthread-h raise
|
||||
save-cwd select setenv sigprocmask stat stdarg stdbool
|
||||
|
@ -874,9 +874,6 @@ for func in $ac_func_list; do
|
||||
done
|
||||
ac_func_list=$funcs
|
||||
# Emacs does not use the wchar or wctype-h modules.
|
||||
AC_DEFUN([gt_TYPE_WINT_T],
|
||||
[GNULIB_OVERRIDES_WINT_T=0
|
||||
AC_SUBST([GNULIB_OVERRIDES_WINT_T])])
|
||||
AC_DEFUN([gt_TYPE_WINT_T],
|
||||
[GNULIBHEADERS_OVERRIDE_WINT_T=0
|
||||
AC_SUBST([GNULIBHEADERS_OVERRIDE_WINT_T])])
|
||||
|
@ -1331,8 +1331,8 @@ matches @w{@samp{foo bar}}, @w{@samp{foo@ @ bar}},
|
||||
precisely, Emacs matches each sequence of space characters in the
|
||||
search string to a regular expression specified by the variable
|
||||
@code{search-whitespace-regexp}. For example, to make spaces match
|
||||
sequences of newlines as well as spaces, set it to
|
||||
@samp{"[[:space:]\n]+"}. The default value of this variable considers
|
||||
sequences of newlines as well as spaces, set it to the regular expression
|
||||
@samp{[[:space:]\n]+}. The default value of this variable considers
|
||||
any sequence of spaces and tab characters as whitespace.
|
||||
|
||||
If you want whitespace characters to match exactly, you can turn lax
|
||||
|
@ -393,7 +393,7 @@ this---saving them---updates the files themselves.
|
||||
associated with any files, or if the autosave was not recent enough to
|
||||
have recorded important changes, you can use the
|
||||
@file{etc/emacs-buffer.gdb} script with GDB (the GNU Debugger) to
|
||||
retrieve them from a core dump--provided that a core dump was saved,
|
||||
retrieve them from a core dump---provided that a core dump was saved,
|
||||
and that the Emacs executable was not stripped of its debugging
|
||||
symbols.
|
||||
|
||||
|
@ -13475,7 +13475,7 @@ What we need to do is fill in the slots.
|
||||
|
||||
The name of the function should be self-explanatory and easy
|
||||
to remember. @code{count-words-region} is the obvious choice. Since
|
||||
that name is now used for the standard Emacs command to count words, we
|
||||
that name is used for the standard Emacs command to count words, we
|
||||
will name our implementation @code{@value{COUNT-WORDS}}.
|
||||
|
||||
The function counts words within a region. This means that the
|
||||
|
@ -811,8 +811,7 @@ for you to be able to native-compile Lisp code.
|
||||
|
||||
@vindex native-compile@r{, a Lisp feature}
|
||||
To determine whether the current Emacs process can produce and load
|
||||
natively-compiled Lisp code, test whether the @code{native-compile}
|
||||
feature is available (@pxref{Named Features}). Alternatively, call
|
||||
natively-compiled Lisp code, call
|
||||
@code{native-comp-available-p} (@pxref{Native-Compilation Functions}).
|
||||
|
||||
Unlike byte-compiled code, natively-compiled Lisp code is executed
|
||||
|
@ -7130,20 +7130,15 @@ as 10, you might consider setting this variable to something sensible:
|
||||
(setq gnus-simplify-ignored-prefixes
|
||||
(concat
|
||||
"\\`\\[?\\("
|
||||
(mapconcat
|
||||
'identity
|
||||
'("looking"
|
||||
"wanted" "followup" "summary\\( of\\)?"
|
||||
"help" "query" "problem" "question"
|
||||
"answer" "reference" "announce"
|
||||
"How can I" "How to" "Comparison of"
|
||||
;; ...
|
||||
)
|
||||
"\\|")
|
||||
(regexp-opt '("looking"
|
||||
"wanted" "followup" "summary" "summary of"
|
||||
"help" "query" "problem" "question"
|
||||
"answer" "reference" "announce"
|
||||
"How can I" "How to" "Comparison of"
|
||||
;; ...
|
||||
))
|
||||
"\\)\\s *\\("
|
||||
(mapconcat 'identity
|
||||
'("for" "for reference" "with" "about")
|
||||
"\\|")
|
||||
(regexp-opt '("for" "for reference" "with" "about"))
|
||||
"\\)?\\]?:?[ \t]*"))
|
||||
@end lisp
|
||||
|
||||
|
@ -1168,7 +1168,7 @@ search string is at least this long. 'lazy-highlight-initial-delay'
|
||||
still applies for shorter search strings, which avoids flicker in the
|
||||
search buffer due to too many matches being highlighted.
|
||||
|
||||
---
|
||||
+++
|
||||
*** The default 'search-whitespace-regexp' value has changed.
|
||||
This used to be "\\s-+", which meant that it was mode-dependent whether
|
||||
newlines were included in the whitespace set. This has now been
|
||||
@ -3031,6 +3031,9 @@ Face 'mh-folder-whitelisted' is renamed 'mh-folder-allowlisted'.
|
||||
+++
|
||||
*** rcirc now supports SASL authentication.
|
||||
|
||||
---
|
||||
*** #emacs on Libera.chat has been added to 'rcirc-server-alist'.
|
||||
|
||||
---
|
||||
*** rcirc connects asynchronously.
|
||||
|
||||
|
@ -36,6 +36,7 @@
|
||||
# --no-vc-files \
|
||||
# --avoid=btowc \
|
||||
# --avoid=close \
|
||||
# --avoid=crypto/af_alg \
|
||||
# --avoid=dup \
|
||||
# --avoid=fchdir \
|
||||
# --avoid=fstat \
|
||||
@ -79,6 +80,7 @@
|
||||
# count-leading-zeros \
|
||||
# count-one-bits \
|
||||
# count-trailing-zeros \
|
||||
# crypto/md5 \
|
||||
# crypto/md5-buffer \
|
||||
# crypto/sha1-buffer \
|
||||
# crypto/sha256-buffer \
|
||||
@ -544,8 +546,8 @@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@
|
||||
GL_GNULIB__EXIT = @GL_GNULIB__EXIT@
|
||||
GMALLOC_OBJ = @GMALLOC_OBJ@
|
||||
GMP_H = @GMP_H@
|
||||
GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
|
||||
GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@
|
||||
GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
|
||||
GNULIB_WARN_CFLAGS = @GNULIB_WARN_CFLAGS@
|
||||
GNUSTEP_CFLAGS = @GNUSTEP_CFLAGS@
|
||||
GNU_OBJC_CFLAGS = @GNU_OBJC_CFLAGS@
|
||||
@ -1473,6 +1475,14 @@ EXTRA_DIST += count-trailing-zeros.h
|
||||
endif
|
||||
## end gnulib module count-trailing-zeros
|
||||
|
||||
## begin gnulib module crypto/md5
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_crypto/md5))
|
||||
|
||||
libgnu_a_SOURCES += md5-stream.c
|
||||
|
||||
endif
|
||||
## end gnulib module crypto/md5
|
||||
|
||||
## begin gnulib module crypto/md5-buffer
|
||||
ifeq (,$(OMIT_GNULIB_MODULE_crypto/md5-buffer))
|
||||
|
||||
|
141
lib/md5-stream.c
Normal file
141
lib/md5-stream.c
Normal file
@ -0,0 +1,141 @@
|
||||
/* Functions to compute MD5 message digest of files or memory blocks.
|
||||
according to the definition of MD5 in RFC 1321 from April 1992.
|
||||
Copyright (C) 1995-1997, 1999-2001, 2005-2006, 2008-2021 Free Software
|
||||
Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as
|
||||
published by the Free Software Foundation; either version 2.1 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This file is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
/* Specification. */
|
||||
#if HAVE_OPENSSL_MD5
|
||||
# define GL_OPENSSL_INLINE _GL_EXTERN_INLINE
|
||||
#endif
|
||||
#include "md5.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#if USE_UNLOCKED_IO
|
||||
# include "unlocked-io.h"
|
||||
#endif
|
||||
|
||||
#include "af_alg.h"
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <endian.h>
|
||||
# if __BYTE_ORDER == __BIG_ENDIAN
|
||||
# define WORDS_BIGENDIAN 1
|
||||
# endif
|
||||
/* We need to keep the namespace clean so define the MD5 function
|
||||
protected using leading __ . */
|
||||
# define md5_init_ctx __md5_init_ctx
|
||||
# define md5_process_block __md5_process_block
|
||||
# define md5_process_bytes __md5_process_bytes
|
||||
# define md5_finish_ctx __md5_finish_ctx
|
||||
# define md5_stream __md5_stream
|
||||
#endif
|
||||
|
||||
#define BLOCKSIZE 32768
|
||||
#if BLOCKSIZE % 64 != 0
|
||||
# error "invalid BLOCKSIZE"
|
||||
#endif
|
||||
|
||||
/* Compute MD5 message digest for bytes read from STREAM. The
|
||||
resulting message digest number will be written into the 16 bytes
|
||||
beginning at RESBLOCK. */
|
||||
int
|
||||
md5_stream (FILE *stream, void *resblock)
|
||||
{
|
||||
switch (afalg_stream (stream, "md5", resblock, MD5_DIGEST_SIZE))
|
||||
{
|
||||
case 0: return 0;
|
||||
case -EIO: return 1;
|
||||
}
|
||||
|
||||
char *buffer = malloc (BLOCKSIZE + 72);
|
||||
if (!buffer)
|
||||
return 1;
|
||||
|
||||
struct md5_ctx ctx;
|
||||
md5_init_ctx (&ctx);
|
||||
size_t sum;
|
||||
|
||||
/* Iterate over full file contents. */
|
||||
while (1)
|
||||
{
|
||||
/* We read the file in blocks of BLOCKSIZE bytes. One call of the
|
||||
computation function processes the whole buffer so that with the
|
||||
next round of the loop another block can be read. */
|
||||
size_t n;
|
||||
sum = 0;
|
||||
|
||||
/* Read block. Take care for partial reads. */
|
||||
while (1)
|
||||
{
|
||||
/* Either process a partial fread() from this loop,
|
||||
or the fread() in afalg_stream may have gotten EOF.
|
||||
We need to avoid a subsequent fread() as EOF may
|
||||
not be sticky. For details of such systems, see:
|
||||
https://sourceware.org/bugzilla/show_bug.cgi?id=1190 */
|
||||
if (feof (stream))
|
||||
goto process_partial_block;
|
||||
|
||||
n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
|
||||
|
||||
sum += n;
|
||||
|
||||
if (sum == BLOCKSIZE)
|
||||
break;
|
||||
|
||||
if (n == 0)
|
||||
{
|
||||
/* Check for the error flag IFF N == 0, so that we don't
|
||||
exit the loop after a partial read due to e.g., EAGAIN
|
||||
or EWOULDBLOCK. */
|
||||
if (ferror (stream))
|
||||
{
|
||||
free (buffer);
|
||||
return 1;
|
||||
}
|
||||
goto process_partial_block;
|
||||
}
|
||||
}
|
||||
|
||||
/* Process buffer with BLOCKSIZE bytes. Note that
|
||||
BLOCKSIZE % 64 == 0
|
||||
*/
|
||||
md5_process_block (buffer, BLOCKSIZE, &ctx);
|
||||
}
|
||||
|
||||
process_partial_block:
|
||||
|
||||
/* Process any remaining bytes. */
|
||||
if (sum > 0)
|
||||
md5_process_bytes (buffer, sum, &ctx);
|
||||
|
||||
/* Construct result in desired memory. */
|
||||
md5_finish_ctx (&ctx, resblock);
|
||||
free (buffer);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Hey Emacs!
|
||||
* Local Variables:
|
||||
* coding: utf-8
|
||||
* End:
|
||||
*/
|
@ -1081,8 +1081,7 @@ This assumes that `pkg-desc' has already been activated with
|
||||
"Native compile installed package PKG-DESC asynchronously.
|
||||
This assumes that `pkg-desc' has already been activated with
|
||||
`package-activate-1'."
|
||||
(when (and (featurep 'native-compile)
|
||||
(native-comp-available-p))
|
||||
(when (native-comp-available-p)
|
||||
(let ((warning-minimum-level :error))
|
||||
(native-compile-async (package-desc-dir pkg-desc) t))))
|
||||
|
||||
|
@ -1079,7 +1079,8 @@ a new window in the current frame, splitting vertically."
|
||||
;; Make sure that redisplay is performed, otherwise there can be a
|
||||
;; bad interaction with code in the window-scroll-functions hook
|
||||
(redisplay t)
|
||||
(when (buffer-local-value 'ibuffer-auto-mode (window-buffer))
|
||||
(when (and (boundp 'ibuffer-auto-mode) ; ibuf-ext.el might not be loaded yet
|
||||
(buffer-local-value 'ibuffer-auto-mode (window-buffer)))
|
||||
(fit-window-to-buffer
|
||||
nil (and owin
|
||||
(/ (frame-height)
|
||||
|
@ -1,7 +1,7 @@
|
||||
;;; project.el --- Operations on the current project -*- lexical-binding: t; -*-
|
||||
|
||||
;; Copyright (C) 2015-2021 Free Software Foundation, Inc.
|
||||
;; Version: 0.7.1
|
||||
;; Version: 0.8.0
|
||||
;; Package-Requires: ((emacs "26.1") (xref "1.0.2"))
|
||||
|
||||
;; This is a GNU ELPA :core package. Avoid using functionality that
|
||||
|
@ -1025,7 +1025,7 @@ Return an alist of the form ((GROUP . (XREF ...)) ...)."
|
||||
(eq xref-file-name-display 'project-relative)
|
||||
(project-current)))
|
||||
(project-root (and project
|
||||
(expand-file-name (project-root project)))))
|
||||
(expand-file-name (xref--project-root project)))))
|
||||
(mapcar
|
||||
(lambda (pair)
|
||||
(cons (xref--group-name-for-display (car pair) project-root)
|
||||
|
@ -8429,11 +8429,16 @@ presented."
|
||||
|
||||
(defcustom blink-matching-paren t
|
||||
"Non-nil means show matching open-paren when close-paren is inserted.
|
||||
If t, highlight the paren. If `jump', briefly move cursor to its
|
||||
position. If `jump-offscreen', move cursor there even if the
|
||||
position is off screen. With any other non-nil value, the
|
||||
off-screen position of the opening paren will be shown in the
|
||||
echo area."
|
||||
In addition, if the opening paren is not visible on screen, show
|
||||
its position in the echo area.
|
||||
|
||||
The valid values are:
|
||||
|
||||
nil Disable.
|
||||
non-nil Highlight the opening paren.
|
||||
`jump' Briefly move cursor to its position.
|
||||
`jump-offscreen' Briefly move cursor to its position,
|
||||
even if the opening paren is not on screen."
|
||||
:type '(choice
|
||||
(const :tag "Disable" nil)
|
||||
(const :tag "Highlight" t)
|
||||
|
@ -63,6 +63,7 @@ AC_DEFUN([gl_EARLY],
|
||||
# Code from module count-leading-zeros:
|
||||
# Code from module count-one-bits:
|
||||
# Code from module count-trailing-zeros:
|
||||
# Code from module crypto/md5:
|
||||
# Code from module crypto/md5-buffer:
|
||||
# Code from module crypto/sha1-buffer:
|
||||
# Code from module crypto/sha256-buffer:
|
||||
@ -1207,6 +1208,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
||||
lib/malloc/scratch_buffer_grow.c
|
||||
lib/malloc/scratch_buffer_grow_preserve.c
|
||||
lib/malloc/scratch_buffer_set_array_size.c
|
||||
lib/md5-stream.c
|
||||
lib/md5.c
|
||||
lib/md5.h
|
||||
lib/memmem.c
|
||||
|
@ -95,26 +95,28 @@ install an MH variant and test it interactively."
|
||||
(mh-sub-folders-cache (make-hash-table :test #'equal))
|
||||
;; remember the original value
|
||||
(original-mh-envvar (getenv "MH")))
|
||||
(unless mh-test-variant-logged-already
|
||||
(mh-variant-set mh-variant)
|
||||
(setq mh-test-variant-logged-already t))
|
||||
(unwind-protect
|
||||
(progn
|
||||
(if mh-variant-in-use
|
||||
(setq temp-home-dir (mh-test-utils-setup-with-variant))
|
||||
(mh-test-utils-setup-with-mocks))
|
||||
(setq temp-home-dir (mh-test-utils-setup))
|
||||
,@body)
|
||||
(if temp-home-dir (delete-directory temp-home-dir t))
|
||||
(setenv "MH" original-mh-envvar))))
|
||||
|
||||
(defun mh-ensure-native-trampolines ()
|
||||
"Build head of time the trampolines we'll need.
|
||||
As `call-process'' and `file-directory-p' will be redefined, the
|
||||
native compiler will invoke `call-process' to compile the
|
||||
respective trampolines. To avoid interferences with the
|
||||
`call-process' mocking we build these AOT."
|
||||
(when (featurep 'native-compile)
|
||||
(mapc #'comp-subr-trampoline-install '(call-process file-directory-p))))
|
||||
(defun mh-test-utils-setup ()
|
||||
"Set dynamically bound variables needed by mock and/or variants.
|
||||
Return the name of the root of the created directory tree, if any."
|
||||
(unless mh-test-variant-logged-already
|
||||
(mh-variant-set mh-variant)
|
||||
(setq mh-test-variant-logged-already t))
|
||||
;; As `call-process'' and `file-directory-p' will be redefined, the
|
||||
;; native compiler will invoke `call-process' to compile the
|
||||
;; respective trampolines. To avoid interference with the
|
||||
;; `call-process' mocking, we build these ahead of time.
|
||||
(when (native-comp-available-p)
|
||||
(mapc #'comp-subr-trampoline-install '(call-process file-directory-p)))
|
||||
(if mh-variant-in-use
|
||||
(mh-test-utils-setup-with-variant)
|
||||
(mh-test-utils-setup-with-mocks)))
|
||||
|
||||
(defun mh-test-utils-setup-with-mocks ()
|
||||
"Set dynamically bound variables so that MH programs are mocked out.
|
||||
@ -125,9 +127,10 @@ The tests use this method if no configured MH variant is found."
|
||||
(mh-populate-sub-folders-cache "+rela-folder/bar")
|
||||
(mh-populate-sub-folders-cache "+rela-folder/foo")
|
||||
(mh-populate-sub-folders-cache "+rela-folder/food")
|
||||
(mh-ensure-native-trampolines)
|
||||
(fset 'call-process #'mh-test-utils-mock-call-process)
|
||||
(fset 'file-directory-p #'mh-test-utils-mock-file-directory-p))
|
||||
(fset 'file-directory-p #'mh-test-utils-mock-file-directory-p)
|
||||
;; no temp directory created
|
||||
nil)
|
||||
|
||||
(defun mh-test-utils-mock-call-process (program
|
||||
&optional _infile _destination _display
|
||||
@ -196,7 +199,7 @@ Return the name of the root of the created directory tree.
|
||||
Set dynamically bound variables so that MH programs may log.
|
||||
The tests use this method if a configured MH variant is found."
|
||||
(let* ((temp-home-dir
|
||||
(make-temp-file "emacs-mh-e-unit-test" t))
|
||||
(make-temp-file "emacs-mh-e-unit-test-" t))
|
||||
(profile (expand-file-name
|
||||
".mh_profile" temp-home-dir))
|
||||
(mail-dir (expand-file-name "Mail" temp-home-dir))
|
||||
@ -215,7 +218,6 @@ The tests use this method if a configured MH variant is found."
|
||||
(make-directory (expand-file-name "foo" abso-folder) t)
|
||||
(make-directory (expand-file-name "food" abso-folder) t)
|
||||
(setq mh-test-abs-folder abso-folder)
|
||||
(mh-ensure-native-trampolines)
|
||||
(fset 'call-process #'mh-test-utils-log-call-process)
|
||||
(fset 'file-directory-p #'mh-test-utils-log-file-directory-p)
|
||||
temp-home-dir))
|
||||
|
Loading…
Reference in New Issue
Block a user