aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoakim Verona2015-01-16 22:29:10 +0100
committerJoakim Verona2015-01-16 22:29:10 +0100
commit5e2255017323c54feeaaee220175d7761a3b6ed1 (patch)
tree3f843af60b826b63e12482301ce20745a95ede3e
parentb64675500decba1c707bc5d5c6d57f633934778f (diff)
parent78e6ccc4a5006272b14f352e459a6d3bf52ed07b (diff)
downloademacs-5e2255017323c54feeaaee220175d7761a3b6ed1.tar.gz
emacs-5e2255017323c54feeaaee220175d7761a3b6ed1.zip
merge master
-rw-r--r--ChangeLog8
-rw-r--r--admin/ChangeLog5
-rw-r--r--admin/unidata/uvs.el1
-rw-r--r--configure.ac5
-rw-r--r--doc/lispref/ChangeLog6
-rw-r--r--doc/lispref/streams.texi24
-rw-r--r--doc/lispref/text.texi3
-rw-r--r--etc/ChangeLog4
-rw-r--r--etc/NEWS4
-rw-r--r--lib-src/ChangeLog12
-rw-r--r--lib-src/Makefile.in7
-rw-r--r--lib-src/make-docfile.c12
-rw-r--r--lisp/ChangeLog47
-rw-r--r--lisp/calc/calc-units.el16
-rw-r--r--lisp/cus-start.el6
-rw-r--r--lisp/dom.el8
-rw-r--r--lisp/emacs-lisp/package.el96
-rw-r--r--lisp/files.el11
-rw-r--r--lisp/gnus/ChangeLog4
-rw-r--r--lisp/gnus/nntp.el19
-rw-r--r--lisp/pcomplete.el3
-rw-r--r--lisp/vc/vc-svn.el3
-rw-r--r--nt/ChangeLog9
-rw-r--r--nt/Makefile.in28
-rw-r--r--src/ChangeLog56
-rw-r--r--src/alloc.c64
-rw-r--r--src/decompress.c3
-rw-r--r--src/fileio.c50
-rw-r--r--src/fns.c9
-rw-r--r--src/font.c20
-rw-r--r--src/font.h113
-rw-r--r--src/frame.c7
-rw-r--r--src/ftfont.c9
-rw-r--r--src/gnutls.c20
-rw-r--r--src/gtkutil.h2
-rw-r--r--src/lisp.h37
-rw-r--r--src/macfont.m10
-rw-r--r--src/process.c15
-rw-r--r--src/terminal.c9
-rw-r--r--src/w32uniscribe.c8
-rw-r--r--src/window.c11
-rw-r--r--src/xdisp.c3
-rw-r--r--src/xftfont.c6
-rw-r--r--src/xmenu.c2
-rw-r--r--test/ChangeLog16
-rw-r--r--test/automated/Makefile.in2
-rw-r--r--test/automated/calc-tests.el52
-rw-r--r--test/automated/package-test.el17
48 files changed, 655 insertions, 227 deletions
diff --git a/ChangeLog b/ChangeLog
index cca9100ddf7..309b04f26ab 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
12015-01-16 Paul Eggert <eggert@cs.ucla.edu>
2
3 Give up on -Wsuggest-attribute=const
4 The attribute doesn't help performance significantly, and the
5 warning seems to be more trouble than it's worth. See the thread at:
6 http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00361.html
7 * configure.ac (WERROR_CFLAGS): Don't use -Wsuggest-attribute=const.
8
12015-01-11 Paul Eggert <eggert@cs.ucla.edu> 92015-01-11 Paul Eggert <eggert@cs.ucla.edu>
2 10
3 Default to 'configure --enable-silent-rules' 11 Default to 'configure --enable-silent-rules'
diff --git a/admin/ChangeLog b/admin/ChangeLog
index 2b04281f400..70d1714f8eb 100644
--- a/admin/ChangeLog
+++ b/admin/ChangeLog
@@ -1,3 +1,8 @@
12015-01-15 Eli Zaretskii <eliz@gnu.org>
2
3 * unidata/uvs.el (uvs-print-table-ivd): Call set-binary-mode on
4 stdout.
5
12015-01-12 Paul Eggert <eggert@cs.ucla.edu> 62015-01-12 Paul Eggert <eggert@cs.ucla.edu>
2 7
3 Say "ELC foo.elc" instead of "GEN foo.elc" 8 Say "ELC foo.elc" instead of "GEN foo.elc"
diff --git a/admin/unidata/uvs.el b/admin/unidata/uvs.el
index 8bad523ce35..a6beac97db4 100644
--- a/admin/unidata/uvs.el
+++ b/admin/unidata/uvs.el
@@ -200,6 +200,7 @@ corresponding number."
200 (insert-file-contents filename) 200 (insert-file-contents filename)
201 (uvs-alist-from-ivd collection-id 201 (uvs-alist-from-ivd collection-id
202 sequence-id-to-glyph-func)))) 202 sequence-id-to-glyph-func))))
203 (set-binary-mode 'stdout t)
203 (princ "/* Automatically generated by uvs.el. */\n") 204 (princ "/* Automatically generated by uvs.el. */\n")
204 (princ 205 (princ
205 (format "static const unsigned char mac_uvs_table_%s_bytes[] =\n {\n" 206 (format "static const unsigned char mac_uvs_table_%s_bytes[] =\n {\n"
diff --git a/configure.ac b/configure.ac
index 1b2dd3dbd31..1d206dbc5a0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -894,6 +894,10 @@ else
894 # Emacs's use of alloca inhibits protecting the stack. 894 # Emacs's use of alloca inhibits protecting the stack.
895 nw="$nw -Wstack-protector" 895 nw="$nw -Wstack-protector"
896 896
897 # Emacs's use of partly-const functions such as Fgnutls_available_p
898 # make this option problematic.
899 nw="$nw -Wsuggest-attribute=const"
900
897 # Emacs's use of partly-pure functions such as CHECK_TYPE make this 901 # Emacs's use of partly-pure functions such as CHECK_TYPE make this
898 # option problematic. 902 # option problematic.
899 nw="$nw -Wsuggest-attribute=pure" 903 nw="$nw -Wsuggest-attribute=pure"
@@ -1976,7 +1980,6 @@ fi
1976if test "$window_system" = none && test "$gl_gcc_warnings" = yes; then 1980if test "$window_system" = none && test "$gl_gcc_warnings" = yes; then
1977 # Too many warnings for now. 1981 # Too many warnings for now.
1978 nw= 1982 nw=
1979 nw="$nw -Wsuggest-attribute=const"
1980 nw="$nw -Wsuggest-attribute=noreturn" 1983 nw="$nw -Wsuggest-attribute=noreturn"
1981 gl_MANYWARN_COMPLEMENT([WARN_CFLAGS], [$WARN_CFLAGS], [$nw]) 1984 gl_MANYWARN_COMPLEMENT([WARN_CFLAGS], [$WARN_CFLAGS], [$nw])
1982 1985
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog
index 941be3cf582..4c0c116ba5a 100644
--- a/doc/lispref/ChangeLog
+++ b/doc/lispref/ChangeLog
@@ -1,3 +1,9 @@
12015-01-15 Eli Zaretskii <eliz@gnu.org>
2
3 * streams.texi (Input Functions): Document 'set-binary-mode'.
4 (Output Functions): Cross-reference to documentation of
5 'set-binary-mode'.
6
12015-01-04 Paul Eggert <eggert@cs.ucla.edu> 72015-01-04 Paul Eggert <eggert@cs.ucla.edu>
2 8
3 batch write-region no longer says "Wrote FOO" 9 batch write-region no longer says "Wrote FOO"
diff --git a/doc/lispref/streams.texi b/doc/lispref/streams.texi
index 5e4df009b73..e52a543110b 100644
--- a/doc/lispref/streams.texi
+++ b/doc/lispref/streams.texi
@@ -339,6 +339,25 @@ shared structures. @xref{Circular Objects}. Its default value is
339@code{t}. 339@code{t}.
340@end defvar 340@end defvar
341 341
342@cindex binary I/O in batch mode
343When reading or writing from the standard input/output streams of the
344Emacs process in batch mode, it is sometimes required to make sure any
345arbitrary binary data will be read/written verbatim, and/or that no
346translation of newlines to or from CR-LF pairs are performed. This
347issue does not exist on Posix hosts, only on MS-Windows and MS-DOS.
348The following function allows to control the I/O mode of any standard
349stream of the Emacs process.
350
351@defun set-binary-mode stream mode
352Switch @var{stream} into binary or text I/O mode. If @var{mode} is
353non-@code{nil}, switch to binary mode, otherwise switch to text mode.
354The value of @var{stream} can be one of @code{stdin}, @code{stdout},
355or @code{stderr}. This function flushes any pending output data of
356@var{stream} as a side effect, and returns the previous value of I/O
357mode for @var{stream}. On Posix hosts, it always returns a
358non-@code{nil} value and does nothing except flushing pending output.
359@end defun
360
342@node Output Streams 361@node Output Streams
343@section Output Streams 362@section Output Streams
344@cindex stream (for printing) 363@cindex stream (for printing)
@@ -686,6 +705,11 @@ This function outputs @var{object} to @var{stream}, just like
686indent and fill the object to make it more readable for humans. 705indent and fill the object to make it more readable for humans.
687@end defun 706@end defun
688 707
708If you need to use binary I/O in batch mode, e.g., use the functions
709described in this section to write out arbitrary binary data or avoid
710conversion of newlines on non-Posix hosts, see @ref{Input Functions,
711set-binary-mode}.
712
689@node Output Variables 713@node Output Variables
690@section Variables Affecting Output 714@section Variables Affecting Output
691@cindex output-controlling variables 715@cindex output-controlling variables
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index 472aedb8ee4..1b8897f59e7 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -4507,6 +4507,9 @@ which is a regular expression.
4507Return all nodes in @var{dom} that have IDs that match @var{match}, 4507Return all nodes in @var{dom} that have IDs that match @var{match},
4508which is a regular expression. 4508which is a regular expression.
4509 4509
4510@item dom-strings @var{dom}
4511Return all strings in @var{DOM}.
4512
4510@end table 4513@end table
4511 4514
4512Utility functions: 4515Utility functions:
diff --git a/etc/ChangeLog b/etc/ChangeLog
index 20f88bdecc3..681858e5977 100644
--- a/etc/ChangeLog
+++ b/etc/ChangeLog
@@ -1,3 +1,7 @@
12015-01-15 Eli Zaretskii <eliz@gnu.org>
2
3 * NEWS: Mention 'set-binary-mode'.
4
12015-01-11 Paul Eggert <eggert@cs.ucla.edu> 52015-01-11 Paul Eggert <eggert@cs.ucla.edu>
2 6
3 Default to 'configure --enable-silent-rules' 7 Default to 'configure --enable-silent-rules'
diff --git a/etc/NEWS b/etc/NEWS
index f291c0c9ad9..0bfd3fd2a2d 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -588,6 +588,10 @@ been obsoleted.
588undocumented integer-pair format. Instead, they return a list of two 588undocumented integer-pair format. Instead, they return a list of two
589integers. 589integers.
590 590
591+++
592** New function `set-binary-mode' allows to switch a standard stream
593of the Emacs process to binary I/O mode.
594
591 595
592* Changes in Frames and Windows Code in Emacs 25.1 596* Changes in Frames and Windows Code in Emacs 25.1
593 597
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index e9205fdd12a..37f037ef324 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -1,3 +1,15 @@
12015-01-16 Eli Zaretskii <eliz@gnu.org>
2
3 * Makefile.in (AM_V_RC, am__v_RC_, am__v_RC_0, am__v_RC_1): New
4 macros.
5 (emacsclient.res): Use $(AM_V_RC).
6
72015-01-16 Paul Eggert <eggert@cs.ucla.edu>
8
9 Give up on -Wsuggest-attribute=const
10 * make-docfile.c (write_globals):
11 Remove special hack for Fnext_read_file_uses_dialog_p
12
12015-01-13 Paul Eggert <eggert@cs.ucla.edu> 132015-01-13 Paul Eggert <eggert@cs.ucla.edu>
2 14
3 Don't say Fnext_read_file_uses_dialog_p is const 15 Don't say Fnext_read_file_uses_dialog_p is const
diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in
index 22a5ecad8d8..01592bd21a5 100644
--- a/lib-src/Makefile.in
+++ b/lib-src/Makefile.in
@@ -58,6 +58,11 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
58am__v_CCLD_0 = @echo " CCLD " $@; 58am__v_CCLD_0 = @echo " CCLD " $@;
59am__v_CCLD_1 = 59am__v_CCLD_1 =
60 60
61AM_V_RC = $(am__v_RC_@AM_V@)
62am__v_RC_ = $(am__v_RC_@AM_DEFAULT_V@)
63am__v_RC_0 = @echo " RC " $@;
64am__v_RC_1 =
65
61# ==================== Where To Install Things ==================== 66# ==================== Where To Install Things ====================
62 67
63# Location to install Emacs.app under GNUstep / Mac OS X. 68# Location to install Emacs.app under GNUstep / Mac OS X.
@@ -381,6 +386,6 @@ update-game-score${EXEEXT}: ${srcdir}/update-game-score.c $(NTLIB) $(config_h)
381 $< $(NTLIB) $(LOADLIBES) -o $@ 386 $< $(NTLIB) $(LOADLIBES) -o $@
382 387
383emacsclient.res: ../nt/emacsclient.rc $(NTINC)/../icons/emacs.ico 388emacsclient.res: ../nt/emacsclient.rc $(NTINC)/../icons/emacs.ico
384 $(WINDRES) -O coff --include-dir=$(NTINC)/.. -o $@ $< 389 $(AM_V_RC)$(WINDRES) -O coff --include-dir=$(NTINC)/.. -o $@ $<
385 390
386## Makefile ends here. 391## Makefile ends here.
diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c
index 741fa4bfa42..79d421a0a8e 100644
--- a/lib-src/make-docfile.c
+++ b/lib-src/make-docfile.c
@@ -729,18 +729,6 @@ write_globals (void)
729 729
730 if (globals[i].flags & DEFUN_const) 730 if (globals[i].flags & DEFUN_const)
731 fputs (" ATTRIBUTE_CONST", stdout); 731 fputs (" ATTRIBUTE_CONST", stdout);
732 else if (strcmp (globals[i].name, "Fnext_read_file_uses_dialog_p")
733 == 0)
734 {
735 /* It would be nice to have a cleaner way to deal with this
736 special hack. */
737 fputs (("\n"
738 "#if ! (defined USE_GTK || defined USE_MOTIF \\\n"
739 " || defined HAVE_NS || defined HAVE_NTGUI)\n"
740 "\tATTRIBUTE_CONST\n"
741 "#endif\n"),
742 stdout);
743 }
744 732
745 puts (";"); 733 puts (";");
746 } 734 }
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index b7a38af9609..57aaea0f4ce 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,41 @@
12015-01-16 Jorgen Schaefer <contact@jorgenschaefer.de>
2
3 * emacs-lisp/package.el: Provide repository priorities.
4 (package-archive-priorities): New variable.
5 (package--add-to-alist): New function.
6 (package--add-to-archive-contents): Use it.
7 (package-menu--find-upgrades): Use it as well. Small clean up to
8 make the use of the package name here explicit.
9 (package-archive-priority): New function.
10 (package-desc-priority-version): New function.
11
122015-01-16 Daniel Colascione <dancol@dancol.org>
13
14 * cus-start.el (all): Make `ring-bell-function' customizable.
15
162015-01-16 Dmitry Gutov <dgutov@yandex.ru>
17
18 * vc/vc-svn.el (vc-svn-dir-status-files): Pass t as
19 vc-svn-after-dir-status's second argument. (Bug#19429)
20
212015-01-16 Samer Masterson <samer@samertm.com> (tiny change)
22
23 * pcomplete.el (pcomplete-parse-arguments): Parse arguments
24 regardless of pcomplete-cycle-completions's value. (Bug#18950)
25
262015-01-16 Lars Magne Ingebrigtsen <larsi@gnus.org>
27
28 * dom.el (dom-strings): New function.
29
30 * files.el (directory-files-recursively): Don't use the word
31 "path" for a file name.
32
332015-01-15 Wolfgang Jenkner <wjenkner@inode.at>
34
35 * calc/calc-units.el (math-units-in-expr-p)
36 (math-single-units-in-expr-p, math-find-compatible-unit-rec)
37 (math-extract-units): Handle the `neg' operator. (Bug#19582)
38
12015-01-15 Stefan Monnier <monnier@iro.umontreal.ca> 392015-01-15 Stefan Monnier <monnier@iro.umontreal.ca>
2 40
3 * emacs-lisp/eieio-core.el: Provide support for cl-generic. 41 * emacs-lisp/eieio-core.el: Provide support for cl-generic.
@@ -28,27 +66,22 @@
28 66
292015-01-13 Alan Mackenzie <acm@muc.de> 672015-01-13 Alan Mackenzie <acm@muc.de>
30 68
31 Allow compilation during loading of Modes derived from a CC Mode mode. 69 Allow compilation during loading of CC Mode-derived modes (bug#19206).
32 Fixes debbugs#19206.
33
34 * progmodes/cc-bytecomp.el (cc-bytecomp-compiling-or-loading): 70 * progmodes/cc-bytecomp.el (cc-bytecomp-compiling-or-loading):
35 New function which walks the stack to discover whether we're compiling 71 New function which walks the stack to discover whether we're compiling
36 or loading. 72 or loading.
37 (cc-bytecomp-is-compiling): Reformulate, and move towards 73 (cc-bytecomp-is-compiling): Reformulate, and move towards beginning.
38 beginning.
39 (cc-bytecomp-is-loading): New defsubst. 74 (cc-bytecomp-is-loading): New defsubst.
40 (cc-bytecomp-setup-environment, cc-bytecomp-restore-environment): 75 (cc-bytecomp-setup-environment, cc-bytecomp-restore-environment):
41 Use the above defsubsts. 76 Use the above defsubsts.
42 (cc-require-when-compile, cc-bytecomp-defvar) 77 (cc-require-when-compile, cc-bytecomp-defvar)
43 (cc-bytecomp-defun): Simplify conditionals. 78 (cc-bytecomp-defun): Simplify conditionals.
44
45 * progmodes/cc-defs.el (cc-bytecomp-compiling-or-loading): 79 * progmodes/cc-defs.el (cc-bytecomp-compiling-or-loading):
46 "Borrow" this function from cc-bytecomp.el. 80 "Borrow" this function from cc-bytecomp.el.
47 (c-get-current-file): Reformulate using the above. 81 (c-get-current-file): Reformulate using the above.
48 (c-lang-defconst): Prevent duplicate entries of file names in a 82 (c-lang-defconst): Prevent duplicate entries of file names in a
49 symbol's 'source property. 83 symbol's 'source property.
50 (c-lang-const): Use cc-bytecomp-is-compiling. 84 (c-lang-const): Use cc-bytecomp-is-compiling.
51
52 * progmodes/cc-langs.el (c-make-init-lang-vars-fun): 85 * progmodes/cc-langs.el (c-make-init-lang-vars-fun):
53 Use cc-bytecomp-is-compiling. 86 Use cc-bytecomp-is-compiling.
54 87
diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el
index 26a644a29ba..05950864a52 100644
--- a/lisp/calc/calc-units.el
+++ b/lisp/calc/calc-units.el
@@ -904,10 +904,12 @@ If COMP or STD is non-nil, put that in the units table instead."
904 (and (consp expr) 904 (and (consp expr)
905 (if (eq (car expr) 'var) 905 (if (eq (car expr) 'var)
906 (math-check-unit-name expr) 906 (math-check-unit-name expr)
907 (and (or sub-exprs 907 (if (eq (car expr) 'neg)
908 (memq (car expr) '(* / ^))) 908 (math-units-in-expr-p (nth 1 expr) sub-exprs)
909 (or (math-units-in-expr-p (nth 1 expr) sub-exprs) 909 (and (or sub-exprs
910 (math-units-in-expr-p (nth 2 expr) sub-exprs)))))) 910 (memq (car expr) '(* / ^)))
911 (or (math-units-in-expr-p (nth 1 expr) sub-exprs)
912 (math-units-in-expr-p (nth 2 expr) sub-exprs)))))))
911 913
912(defun math-only-units-in-expr-p (expr) 914(defun math-only-units-in-expr-p (expr)
913 (and (consp expr) 915 (and (consp expr)
@@ -924,6 +926,8 @@ If COMP or STD is non-nil, put that in the units table instead."
924 (cond ((math-scalarp expr) nil) 926 (cond ((math-scalarp expr) nil)
925 ((eq (car expr) 'var) 927 ((eq (car expr) 'var)
926 (math-check-unit-name expr)) 928 (math-check-unit-name expr))
929 ((eq (car expr) 'neg)
930 (math-single-units-in-expr-p (nth 1 expr)))
927 ((eq (car expr) '*) 931 ((eq (car expr) '*)
928 (let ((u1 (math-single-units-in-expr-p (nth 1 expr))) 932 (let ((u1 (math-single-units-in-expr-p (nth 1 expr)))
929 (u2 (math-single-units-in-expr-p (nth 2 expr)))) 933 (u2 (math-single-units-in-expr-p (nth 2 expr))))
@@ -1079,6 +1083,8 @@ If COMP or STD is non-nil, put that in the units table instead."
1079 ((eq (car-safe expr) '/) 1083 ((eq (car-safe expr) '/)
1080 (or (math-find-compatible-unit-rec (nth 1 expr) pow) 1084 (or (math-find-compatible-unit-rec (nth 1 expr) pow)
1081 (math-find-compatible-unit-rec (nth 2 expr) (- pow)))) 1085 (math-find-compatible-unit-rec (nth 2 expr) (- pow))))
1086 ((eq (car-safe expr) 'neg)
1087 (math-find-compatible-unit-rec (nth 1 expr) pow))
1082 ((and (eq (car-safe expr) '^) 1088 ((and (eq (car-safe expr) '^)
1083 (integerp (nth 2 expr))) 1089 (integerp (nth 2 expr)))
1084 (math-find-compatible-unit-rec (nth 1 expr) (* pow (nth 2 expr)))) 1090 (math-find-compatible-unit-rec (nth 1 expr) (* pow (nth 2 expr))))
@@ -1497,6 +1503,8 @@ If COMP or STD is non-nil, put that in the units table instead."
1497 ((memq (car-safe expr) '(* /)) 1503 ((memq (car-safe expr) '(* /))
1498 (cons (car expr) 1504 (cons (car expr)
1499 (mapcar 'math-extract-units (cdr expr)))) 1505 (mapcar 'math-extract-units (cdr expr))))
1506 ((eq (car-safe expr) 'neg)
1507 (math-extract-units (nth 1 expr)))
1500 ((eq (car-safe expr) '^) 1508 ((eq (car-safe expr) '^)
1501 (list '^ (math-extract-units (nth 1 expr)) (nth 2 expr))) 1509 (list '^ (math-extract-units (nth 1 expr)) (nth 2 expr)))
1502 ((math-check-unit-name expr) expr) 1510 ((math-check-unit-name expr) expr)
diff --git a/lisp/cus-start.el b/lisp/cus-start.el
index 299b18d0118..71506cb680e 100644
--- a/lisp/cus-start.el
+++ b/lisp/cus-start.el
@@ -421,6 +421,12 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of
421 "21.1") 421 "21.1")
422 ;; term.c 422 ;; term.c
423 (visible-cursor cursor boolean "22.1") 423 (visible-cursor cursor boolean "22.1")
424 ;; terminal.c
425 (ring-bell-function display
426 (choice
427 (const :tag "Default" nil)
428 (const :tag "Silent" ignore)
429 function))
424 ;; undo.c 430 ;; undo.c
425 (undo-limit undo integer) 431 (undo-limit undo integer)
426 (undo-strong-limit undo integer) 432 (undo-strong-limit undo integer)
diff --git a/lisp/dom.el b/lisp/dom.el
index 527b8e61f2e..11357e88804 100644
--- a/lisp/dom.el
+++ b/lisp/dom.el
@@ -103,6 +103,14 @@ A name is a symbol like `td'."
103 (cons dom matches) 103 (cons dom matches)
104 matches))) 104 matches)))
105 105
106(defun dom-strings (dom)
107 "Return elements in DOM that are strings."
108 (cl-loop for child in (dom-children dom)
109 if (stringp child)
110 collect child
111 else
112 append (dom-strings child)))
113
106(defun dom-by-class (dom match) 114(defun dom-by-class (dom match)
107 "Return elements in DOM that have a class name that matches regexp MATCH." 115 "Return elements in DOM that have a class name that matches regexp MATCH."
108 (dom-elements dom 'class match)) 116 (dom-elements dom 'class match))
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 79f8b65d43c..5336271b65b 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -228,6 +228,22 @@ a package can run arbitrary code."
228 :group 'package 228 :group 'package
229 :version "24.1") 229 :version "24.1")
230 230
231(defcustom package-archive-priorities nil
232 "An alist of priorities for packages.
233
234Each element has the form (ARCHIVE-ID . PRIORITY).
235
236When installing packages, the package with the highest version
237number from the archive with the highest priority is
238selected. When higher versions are available from archives with
239lower priorities, the user has to select those manually.
240
241Archives not in this list have the priority 0."
242 :type 'integer
243 :risky t
244 :group 'package
245 :version "25.1")
246
231(defcustom package-pinned-packages nil 247(defcustom package-pinned-packages nil
232 "An alist of packages that are pinned to specific archives. 248 "An alist of packages that are pinned to specific archives.
233This can be useful if you have multiple package archives enabled, 249This can be useful if you have multiple package archives enabled,
@@ -1114,23 +1130,32 @@ Also, add the originating archive to the `package-desc' structure."
1114 ;; Older archive-contents files have only 4 1130 ;; Older archive-contents files have only 4
1115 ;; elements here. 1131 ;; elements here.
1116 (package--ac-desc-extras (cdr package))))) 1132 (package--ac-desc-extras (cdr package)))))
1117 (existing-packages (assq name package-archive-contents))
1118 (pinned-to-archive (assoc name package-pinned-packages))) 1133 (pinned-to-archive (assoc name package-pinned-packages)))
1119 (cond 1134 ;; Skip entirely if pinned to another archive.
1120 ;; Skip entirely if pinned to another archive. 1135 (when (not (and pinned-to-archive
1121 ((and pinned-to-archive 1136 (not (equal (cdr pinned-to-archive) archive))))
1122 (not (equal (cdr pinned-to-archive) archive))) 1137 (setq package-archive-contents
1123 nil) 1138 (package--add-to-alist pkg-desc package-archive-contents)))))
1124 ((not existing-packages) 1139
1125 (push (list name pkg-desc) package-archive-contents)) 1140(defun package--add-to-alist (pkg-desc alist)
1126 (t 1141 "Add PKG-DESC to ALIST.
1127 (while 1142
1128 (if (and (cdr existing-packages) 1143Packages are grouped by name. The package descriptions are sorted
1129 (version-list-< 1144by version number."
1130 version (package-desc-version (cadr existing-packages)))) 1145 (let* ((name (package-desc-name pkg-desc))
1131 (setq existing-packages (cdr existing-packages)) 1146 (priority-version (package-desc-priority-version pkg-desc))
1132 (push pkg-desc (cdr existing-packages)) 1147 (existing-packages (assq name alist)))
1133 nil)))))) 1148 (if (not existing-packages)
1149 (cons (list name pkg-desc)
1150 alist)
1151 (while (if (and (cdr existing-packages)
1152 (version-list-< priority-version
1153 (package-desc-priority-version
1154 (cadr existing-packages))))
1155 (setq existing-packages (cdr existing-packages))
1156 (push pkg-desc (cdr existing-packages))
1157 nil))
1158 alist)))
1134 1159
1135(defun package-download-transaction (packages) 1160(defun package-download-transaction (packages)
1136 "Download and install all the packages in PACKAGES. 1161 "Download and install all the packages in PACKAGES.
@@ -1319,6 +1344,25 @@ The file can either be a tar file or an Emacs Lisp file."
1319 "Return the archive containing the package NAME." 1344 "Return the archive containing the package NAME."
1320 (cdr (assoc (package-desc-archive desc) package-archives))) 1345 (cdr (assoc (package-desc-archive desc) package-archives)))
1321 1346
1347(defun package-archive-priority (archive)
1348 "Return the priority of ARCHIVE.
1349
1350The archive priorities are specified in
1351`package-archive-priorities'. If not given there, the priority
1352defaults to 0."
1353 (or (cdr (assoc archive package-archive-priorities))
1354 0))
1355
1356(defun package-desc-priority-version (pkg-desc)
1357 "Return the version PKG-DESC with the archive priority prepended.
1358
1359This allows for easy comparison of package versions from
1360different archives if archive priorities are meant to be taken in
1361consideration."
1362 (cons (package-archive-priority
1363 (package-desc-archive pkg-desc))
1364 (package-desc-version pkg-desc)))
1365
1322(defun package--download-one-archive (archive file) 1366(defun package--download-one-archive (archive file)
1323 "Retrieve an archive file FILE from ARCHIVE, and cache it. 1367 "Retrieve an archive file FILE from ARCHIVE, and cache it.
1324ARCHIVE should be a cons cell of the form (NAME . LOCATION), 1368ARCHIVE should be a cons cell of the form (NAME . LOCATION),
@@ -1991,18 +2035,18 @@ If optional arg BUTTON is non-nil, describe its associated package."
1991 ;; ENTRY is (PKG-DESC [NAME VERSION STATUS DOC]) 2035 ;; ENTRY is (PKG-DESC [NAME VERSION STATUS DOC])
1992 (let ((pkg-desc (car entry)) 2036 (let ((pkg-desc (car entry))
1993 (status (aref (cadr entry) 2))) 2037 (status (aref (cadr entry) 2)))
1994 (cond ((member status '("installed" "unsigned")) 2038 (cond ((member status '("installed" "unsigned"))
1995 (push pkg-desc installed)) 2039 (push pkg-desc installed))
1996 ((member status '("available" "new")) 2040 ((member status '("available" "new"))
1997 (push (cons (package-desc-name pkg-desc) pkg-desc) 2041 (setq available (package--add-to-alist pkg-desc available))))))
1998 available)))))
1999 ;; Loop through list of installed packages, finding upgrades. 2042 ;; Loop through list of installed packages, finding upgrades.
2000 (dolist (pkg-desc installed) 2043 (dolist (pkg-desc installed)
2001 (let ((avail-pkg (assq (package-desc-name pkg-desc) available))) 2044 (let* ((name (package-desc-name pkg-desc))
2002 (and avail-pkg 2045 (avail-pkg (cadr (assq name available))))
2003 (version-list-< (package-desc-version pkg-desc) 2046 (and avail-pkg
2004 (package-desc-version (cdr avail-pkg))) 2047 (version-list-< (package-desc-priority-version pkg-desc)
2005 (push avail-pkg upgrades)))) 2048 (package-desc-priority-version avail-pkg))
2049 (push (cons name avail-pkg) upgrades))))
2006 upgrades)) 2050 upgrades))
2007 2051
2008(defun package-menu-mark-upgrades () 2052(defun package-menu-mark-upgrades ()
diff --git a/lisp/files.el b/lisp/files.el
index 175f85b29d0..f8318d8a34d 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -749,14 +749,15 @@ If INCLUDE-DIRECTORIES, also include directories that have matching names."
749 (unless (member file '("./" "../")) 749 (unless (member file '("./" "../"))
750 (if (directory-name-p file) 750 (if (directory-name-p file)
751 (let* ((leaf (substring file 0 (1- (length file)))) 751 (let* ((leaf (substring file 0 (1- (length file))))
752 (path (expand-file-name leaf dir))) 752 (full-file (expand-file-name leaf dir)))
753 ;; Don't follow symlinks to other directories. 753 ;; Don't follow symlinks to other directories.
754 (unless (file-symlink-p path) 754 (unless (file-symlink-p full-file)
755 (setq result (nconc result (directory-files-recursively 755 (setq result
756 path match include-directories)))) 756 (nconc result (directory-files-recursively
757 full-file match include-directories))))
757 (when (and include-directories 758 (when (and include-directories
758 (string-match match leaf)) 759 (string-match match leaf))
759 (setq result (nconc result (list path))))) 760 (setq result (nconc result (list full-file)))))
760 (when (string-match match file) 761 (when (string-match match file)
761 (push (expand-file-name file dir) files))))) 762 (push (expand-file-name file dir) files)))))
762 (nconc result (nreverse files)))) 763 (nconc result (nreverse files))))
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 20de9aea136..5a61a211661 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,7 @@
12015-01-15 Lars Magne Ingebrigtsen <larsi@gnus.org>
2
3 * nntp.el (nntp-send-authinfo): Error out if the password is wrong.
4
12015-01-08 Stefan Monnier <monnier@iro.umontreal.ca> 52015-01-08 Stefan Monnier <monnier@iro.umontreal.ca>
2 6
3 * registry.el: Don't use <class> as a variable. 7 * registry.el: Don't use <class> as a variable.
diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el
index e071368401b..0891dba0387 100644
--- a/lisp/gnus/nntp.el
+++ b/lisp/gnus/nntp.el
@@ -1219,14 +1219,17 @@ If SEND-IF-FORCE, only send authinfo to the server if the
1219 nntp-authinfo-user user)) 1219 nntp-authinfo-user user))
1220 (unless (member user '(nil "")) 1220 (unless (member user '(nil ""))
1221 (nntp-send-command "^3.*\r?\n" "AUTHINFO USER" user) 1221 (nntp-send-command "^3.*\r?\n" "AUTHINFO USER" user)
1222 (when t ;???Should check if AUTHINFO succeeded 1222 (let ((result
1223 (nntp-send-command 1223 (nntp-send-command
1224 "^2.*\r?\n" "AUTHINFO PASS" 1224 "^2.*\r?\n" "AUTHINFO PASS"
1225 (or passwd 1225 (or passwd
1226 nntp-authinfo-password 1226 nntp-authinfo-password
1227 (setq nntp-authinfo-password 1227 (setq nntp-authinfo-password
1228 (read-passwd (format "NNTP (%s@%s) password: " 1228 (read-passwd (format "NNTP (%s@%s) password: "
1229 user nntp-address)))))))))) 1229 user nntp-address)))))))
1230 (if (not result)
1231 (signal 'nntp-authinfo-rejected "Password rejected")
1232 result))))))
1230 1233
1231;;; Internal functions. 1234;;; Internal functions.
1232 1235
diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el
index 17327ea5c95..7bcf2c1759e 100644
--- a/lisp/pcomplete.el
+++ b/lisp/pcomplete.el
@@ -755,8 +755,7 @@ this is `comint-dynamic-complete-functions'."
755 pcomplete-index 0 755 pcomplete-index 0
756 pcomplete-stub (pcomplete-arg 'last)) 756 pcomplete-stub (pcomplete-arg 'last))
757 (let ((begin (pcomplete-begin 'last))) 757 (let ((begin (pcomplete-begin 'last)))
758 (if (and pcomplete-cycle-completions 758 (if (and (listp pcomplete-stub) ;??
759 (listp pcomplete-stub) ;??
760 (not pcomplete-expand-only-p)) 759 (not pcomplete-expand-only-p))
761 (let* ((completions pcomplete-stub) ;?? 760 (let* ((completions pcomplete-stub) ;??
762 (common-stub (car completions)) 761 (common-stub (car completions))
diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el
index bae178df3f7..d74daf9c36f 100644
--- a/lisp/vc/vc-svn.el
+++ b/lisp/vc/vc-svn.el
@@ -164,6 +164,7 @@ If you want to force an empty list of arguments, use t."
164 164
165;; FIXME it would be better not to have the "remote" argument, 165;; FIXME it would be better not to have the "remote" argument,
166;; but to distinguish the two output formats based on content. 166;; but to distinguish the two output formats based on content.
167;; FIXME: the local format isn't used by the (sole) caller anymore.
167(defun vc-svn-after-dir-status (callback &optional remote) 168(defun vc-svn-after-dir-status (callback &optional remote)
168 (let ((state-map '((?A . added) 169 (let ((state-map '((?A . added)
169 (?C . conflict) 170 (?C . conflict)
@@ -208,7 +209,7 @@ CALLBACK is called as (CALLBACK RESULT BUFFER), where
208RESULT is a list of conses (FILE . STATE) for directory DIR." 209RESULT is a list of conses (FILE . STATE) for directory DIR."
209 ;; FIXME shouldn't this rather default to all the files in dir? 210 ;; FIXME shouldn't this rather default to all the files in dir?
210 (apply #'vc-svn-command (current-buffer) 'async nil "status" "-u" files) 211 (apply #'vc-svn-command (current-buffer) 'async nil "status" "-u" files)
211 (vc-run-delayed (vc-svn-after-dir-status callback))) 212 (vc-run-delayed (vc-svn-after-dir-status callback t)))
212 213
213(defun vc-svn-dir-extra-headers (_dir) 214(defun vc-svn-dir-extra-headers (_dir)
214 "Generate extra status headers for a Subversion working copy." 215 "Generate extra status headers for a Subversion working copy."
diff --git a/nt/ChangeLog b/nt/ChangeLog
index 5f6104296c8..b9966fb27d8 100644
--- a/nt/ChangeLog
+++ b/nt/ChangeLog
@@ -1,3 +1,12 @@
12015-01-16 Eli Zaretskii <eliz@gnu.org>
2
3 * Makefile.in (AM_V_CC, am__v_CC_, am__v_CC_0, am__v_CC_1)
4 (AM_V_CCLD, am__v_CCLD_, am__v_CCLD_0, am__v_CCLD_1, AM_V_RC)
5 (am__v_RC_, am__v_RC_0, am__v_RC_1): New macros.
6 (addpm${EXEEXT}, ddeclient${EXEEXT}, cmdproxy${EXEEXT})
7 (runemacs${EXEEXT}): Use $(AM_V_CCLD).
8 (emacs.res, ../src/emacs.res): Use $(AM_V_RC).
9
12014-12-26 Eli Zaretskii <eliz@gnu.org> 102014-12-26 Eli Zaretskii <eliz@gnu.org>
2 11
3 * gnulib.mk (stpcpy, string): Sync with the latest change in 12 * gnulib.mk (stpcpy, string): Sync with the latest change in
diff --git a/nt/Makefile.in b/nt/Makefile.in
index 01631d8ba3f..fc6887f163e 100644
--- a/nt/Makefile.in
+++ b/nt/Makefile.in
@@ -41,6 +41,24 @@ WERROR_CFLAGS = @WERROR_CFLAGS@
41# Program name transformation. 41# Program name transformation.
42TRANSFORM = @program_transform_name@ 42TRANSFORM = @program_transform_name@
43 43
44# 'make' verbosity.
45AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
46
47AM_V_CC = $(am__v_CC_@AM_V@)
48am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
49am__v_CC_0 = @echo " CC " $@;
50am__v_CC_1 =
51
52AM_V_CCLD = $(am__v_CCLD_@AM_V@)
53am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
54am__v_CCLD_0 = @echo " CCLD " $@;
55am__v_CCLD_1 =
56
57AM_V_RC = $(am__v_RC_@AM_V@)
58am__v_RC_ = $(am__v_RC_@AM_DEFAULT_V@)
59am__v_RC_0 = @echo " RC " $@;
60am__v_RC_1 =
61
44# ==================== Where To Install Things ==================== 62# ==================== Where To Install Things ====================
45 63
46# The default location for installation. Everything is placed in 64# The default location for installation. Everything is placed in
@@ -213,18 +231,18 @@ TAGS: ${EXE_FILES:${EXEEXT}=.c}
213 231
214## Build the programs 232## Build the programs
215addpm${EXEEXT}: ${srcdir}/addpm.c ../src/epaths.h 233addpm${EXEEXT}: ${srcdir}/addpm.c ../src/epaths.h
216 $(CC) ${ALL_CFLAGS} $< $(LIBS_ADDPM) -o $@ 234 $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< $(LIBS_ADDPM) -o $@
217 235
218ddeclient${EXEEXT}: ${srcdir}/ddeclient.c 236ddeclient${EXEEXT}: ${srcdir}/ddeclient.c
219 $(CC) ${ALL_CFLAGS} $< -o $@ 237 $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< -o $@
220 238
221cmdproxy${EXEEXT}: ${srcdir}/cmdproxy.c 239cmdproxy${EXEEXT}: ${srcdir}/cmdproxy.c
222 $(CC) ${ALL_CFLAGS} $< -o $@ 240 $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< -o $@
223 241
224runemacs${EXEEXT}: ${srcdir}/runemacs.c $(EMACSRES) 242runemacs${EXEEXT}: ${srcdir}/runemacs.c $(EMACSRES)
225 $(CC) ${ALL_CFLAGS} $^ -mwindows -o $@ 243 $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $^ -mwindows -o $@
226 244
227## Also used in ../src/Makefile. 245## Also used in ../src/Makefile.
228emacs.res ../src/emacs.res: emacs.rc ${srcdir}/icons/emacs.ico \ 246emacs.res ../src/emacs.res: emacs.rc ${srcdir}/icons/emacs.ico \
229 ${srcdir}/icons/hand.cur ${srcdir}/$(EMACS_MANIFEST) 247 ${srcdir}/icons/hand.cur ${srcdir}/$(EMACS_MANIFEST)
230 ${WINDRES} -I ${srcdir} -O coff -o $@ $< 248 $(AM_V_RC)${WINDRES} -I ${srcdir} -O coff -o $@ $<
diff --git a/src/ChangeLog b/src/ChangeLog
index b2588f1451f..16e2fa19626 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,59 @@
12015-01-16 Dmitry Antipov <dmantipov@yandex.ru>
2
3 Tune pseudovector allocation assuming Qnil == 0.
4 * alloc.c (allocate_pseudovector): Use memset for both
5 Lisp_Objects and regular slots. Add zerolen arg.
6 * lisp.h (allocate_pseudovector): Adjust prototype.
7 (ALLOCATE_PSEUDOVECTOR): Adjust user.
8 (ALLOCATE_ZEROED_PSEUDOVECTOR): New macro.
9 (allocate_hash_table, allocate_window, allocate_frame)
10 (allocate_process, allocate_terminal): Remove prototypes.
11 * fns.c (allocate_hash_table): Now static here.
12 * frame.c (allocate_frame):
13 * process.c (allocate_process):
14 * terminal.c (allocate_terminal):
15 * window.c (allocate_window): Now static here.
16 Use ALLOCATE_ZEROED_PSEUDOVECTOR. Add comment.
17
18 * lisp.h (XTERMINAL): Add eassert.
19 * process.c (make_lisp_proc): Now static here.
20
21 Prefer INLINE functions in font.h to match style used in lisp.h.
22 * font.h (FONTP, FONT_SPEC_P, FONT_ENTITY_P, FONT_OBJECT_P)
23 (CHECK_FONT, CHECK_FONT_SPEC, CHECK_FONT_ENTITY, CHECK_FONT_OBJECT)
24 (XFONT_SPEC, XFONT_ENTITY, XFONT_OBJECT, CHECK_FONT_GET_OBJECT):
25 Now functions.
26 * font.c (Ffont_otf_alternates, Fquery_font, Ffont_get_glyphs):
27 * ftfont.c (ftfont_shape):
28 * macfont.m (macfont_shape):
29 * w32uniscribe.c (uniscribe_shape):
30 * xftfont.c (xftfont_shape): Adjust CHECK_FONT_GET_OBJECT users.
31
322015-01-16 Paul Eggert <eggert@cs.ucla.edu>
33
34 Give up on -Wsuggest-attribute=const
35 * decompress.c (Fzlib_available_p):
36 * gnutls.c (Fgnutls_available_p):
37 * gtkutil.h (xg_uses_old_file_dialog):
38 * xdisp.c (Ftool_bar_height):
39 * xmenu.c (popup_activated):
40 No longer const, since it's not const on at lest some
41 configurations, and we shouldn't lie to the compiler.
42
432015-01-15 Eli Zaretskii <eliz@gnu.org>
44
45 * fileio.c: Include binary-io.h.
46 (Fset_binary_mode): New function.
47 (syms_of_fileio): Defsubr it.
48 (syms_of_fileio) <Qstdin, Qstdout, Qstderr>: DEFSYM them.
49
502015-01-15 Teodor Zlatanov <tzz@lifelogs.com>
51
52 * gnutls.c (init_gnutls_functions): Import gnutls_x509_crt_check_issuer.
53 (Fgnutls_peer_status): Use it to set the :self-signed flag.
54 Rename the previous :self-signed to :unknown-ca. (Bug#19404)
55 (Fgnutls_peer_status_warning_describe): Explain :unknown-ca flag.
56
12015-01-14 Eli Zaretskii <eliz@gnu.org> 572015-01-14 Eli Zaretskii <eliz@gnu.org>
2 58
3 * w32fns.c (w32_wnd_proc): Ignore MENUITEMINFO's dwItemData data 59 * w32fns.c (w32_wnd_proc): Ignore MENUITEMINFO's dwItemData data
diff --git a/src/alloc.c b/src/alloc.c
index 7c937332407..22a15b4ac59 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3163,19 +3163,19 @@ allocate_vector (EMACS_INT len)
3163/* Allocate other vector-like structures. */ 3163/* Allocate other vector-like structures. */
3164 3164
3165struct Lisp_Vector * 3165struct Lisp_Vector *
3166allocate_pseudovector (int memlen, int lisplen, enum pvec_type tag) 3166allocate_pseudovector (int memlen, int lisplen,
3167 int zerolen, enum pvec_type tag)
3167{ 3168{
3168 struct Lisp_Vector *v = allocate_vectorlike (memlen); 3169 struct Lisp_Vector *v = allocate_vectorlike (memlen);
3169 int i;
3170 3170
3171 /* Catch bogus values. */ 3171 /* Catch bogus values. */
3172 eassert (tag <= PVEC_FONT); 3172 eassert (tag <= PVEC_FONT);
3173 eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1); 3173 eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1);
3174 eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1); 3174 eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1);
3175 3175
3176 /* Only the first lisplen slots will be traced normally by the GC. */ 3176 /* Only the first lisplen slots will be traced normally by the GC.
3177 for (i = 0; i < lisplen; ++i) 3177 But since Qnil == 0, we can memset Lisp_Object slots as well. */
3178 v->contents[i] = Qnil; 3178 memset (v->contents, 0, zerolen * word_size);
3179 3179
3180 XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen); 3180 XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen);
3181 return v; 3181 return v;
@@ -3194,60 +3194,6 @@ allocate_buffer (void)
3194 return b; 3194 return b;
3195} 3195}
3196 3196
3197struct Lisp_Hash_Table *
3198allocate_hash_table (void)
3199{
3200 return ALLOCATE_PSEUDOVECTOR (struct Lisp_Hash_Table, count, PVEC_HASH_TABLE);
3201}
3202
3203struct window *
3204allocate_window (void)
3205{
3206 struct window *w;
3207
3208 w = ALLOCATE_PSEUDOVECTOR (struct window, current_matrix, PVEC_WINDOW);
3209 /* Users assumes that non-Lisp data is zeroed. */
3210 memset (&w->current_matrix, 0,
3211 sizeof (*w) - offsetof (struct window, current_matrix));
3212 return w;
3213}
3214
3215struct terminal *
3216allocate_terminal (void)
3217{
3218 struct terminal *t;
3219
3220 t = ALLOCATE_PSEUDOVECTOR (struct terminal, next_terminal, PVEC_TERMINAL);
3221 /* Users assumes that non-Lisp data is zeroed. */
3222 memset (&t->next_terminal, 0,
3223 sizeof (*t) - offsetof (struct terminal, next_terminal));
3224 return t;
3225}
3226
3227struct frame *
3228allocate_frame (void)
3229{
3230 struct frame *f;
3231
3232 f = ALLOCATE_PSEUDOVECTOR (struct frame, face_cache, PVEC_FRAME);
3233 /* Users assumes that non-Lisp data is zeroed. */
3234 memset (&f->face_cache, 0,
3235 sizeof (*f) - offsetof (struct frame, face_cache));
3236 return f;
3237}
3238
3239struct Lisp_Process *
3240allocate_process (void)
3241{
3242 struct Lisp_Process *p;
3243
3244 p = ALLOCATE_PSEUDOVECTOR (struct Lisp_Process, pid, PVEC_PROCESS);
3245 /* Users assumes that non-Lisp data is zeroed. */
3246 memset (&p->pid, 0,
3247 sizeof (*p) - offsetof (struct Lisp_Process, pid));
3248 return p;
3249}
3250
3251DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0, 3197DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0,
3252 doc: /* Return a newly created vector of length LENGTH, with each element being INIT. 3198 doc: /* Return a newly created vector of length LENGTH, with each element being INIT.
3253See also the function `vector'. */) 3199See also the function `vector'. */)
diff --git a/src/decompress.c b/src/decompress.c
index b78dacee207..b14f0a2cd79 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -88,8 +88,7 @@ unwind_decompress (void *ddata)
88} 88}
89 89
90DEFUN ("zlib-available-p", Fzlib_available_p, Szlib_available_p, 0, 0, 0, 90DEFUN ("zlib-available-p", Fzlib_available_p, Szlib_available_p, 0, 0, 0,
91 doc: /* Return t if zlib decompression is available in this instance of Emacs. */ 91 doc: /* Return t if zlib decompression is available in this instance of Emacs. */)
92 attributes: const)
93 (void) 92 (void)
94{ 93{
95#ifdef WINDOWSNT 94#ifdef WINDOWSNT
diff --git a/src/fileio.c b/src/fileio.c
index 6c443c91db7..dc67a00ed2a 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -86,6 +86,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
86#include <careadlinkat.h> 86#include <careadlinkat.h>
87#include <stat-time.h> 87#include <stat-time.h>
88 88
89#include <binary-io.h>
90
89#ifdef HPUX 91#ifdef HPUX
90#include <netio.h> 92#include <netio.h>
91#endif 93#endif
@@ -5754,6 +5756,48 @@ before any other event (mouse or keypress) is handled. */)
5754 return Qnil; 5756 return Qnil;
5755} 5757}
5756 5758
5759
5760DEFUN ("set-binary-mode", Fset_binary_mode, Sset_binary_mode, 2, 2, 0,
5761 doc: /* Switch STREAM to binary I/O mode or text I/O mode.
5762STREAM can be one of the symbols `stdin', `stdout', or `stderr'.
5763If MODE is non-nil, switch STREAM to binary mode, otherwise switch
5764it to text mode.
5765
5766As a side effect, this function flushes any pending STREAM's data.
5767
5768Value is the previous value of STREAM's I/O mode, nil for text mode,
5769non-nil for binary mode.
5770
5771On MS-Windows and MS-DOS, binary mode is needed to read or write
5772arbitrary binary data, and for disabling translation between CR-LF
5773pairs and a single newline character. Examples include generation
5774of text files with Unix-style end-of-line format using `princ' in
5775batch mode, with standard output redirected to a file.
5776
5777On Posix systems, this function always returns non-nil, and has no
5778effect except for flushing STREAM's data. */)
5779 (Lisp_Object stream, Lisp_Object mode)
5780{
5781 FILE *fp = NULL;
5782 int binmode;
5783
5784 CHECK_SYMBOL (stream);
5785 if (EQ (stream, Qstdin))
5786 fp = stdin;
5787 else if (EQ (stream, Qstdout))
5788 fp = stdout;
5789 else if (EQ (stream, Qstderr))
5790 fp = stderr;
5791 else
5792 xsignal2 (Qerror, build_string ("unsupported stream"), stream);
5793
5794 binmode = NILP (mode) ? O_TEXT : O_BINARY;
5795 if (fp != stdin)
5796 fflush (fp);
5797
5798 return (set_binary_mode (fileno (fp), binmode) == O_BINARY) ? Qt : Qnil;
5799}
5800
5757void 5801void
5758init_fileio (void) 5802init_fileio (void)
5759{ 5803{
@@ -6040,6 +6084,10 @@ This includes interactive calls to `delete-file' and
6040 DEFSYM (Qsubstitute_env_in_file_name, "substitute-env-in-file-name"); 6084 DEFSYM (Qsubstitute_env_in_file_name, "substitute-env-in-file-name");
6041 DEFSYM (Qget_buffer_window_list, "get-buffer-window-list"); 6085 DEFSYM (Qget_buffer_window_list, "get-buffer-window-list");
6042 6086
6087 DEFSYM (Qstdin, "stdin");
6088 DEFSYM (Qstdout, "stdout");
6089 DEFSYM (Qstderr, "stderr");
6090
6043 defsubr (&Sfind_file_name_handler); 6091 defsubr (&Sfind_file_name_handler);
6044 defsubr (&Sfile_name_directory); 6092 defsubr (&Sfile_name_directory);
6045 defsubr (&Sfile_name_nondirectory); 6093 defsubr (&Sfile_name_nondirectory);
@@ -6089,6 +6137,8 @@ This includes interactive calls to `delete-file' and
6089 6137
6090 defsubr (&Snext_read_file_uses_dialog_p); 6138 defsubr (&Snext_read_file_uses_dialog_p);
6091 6139
6140 defsubr (&Sset_binary_mode);
6141
6092#ifdef HAVE_SYNC 6142#ifdef HAVE_SYNC
6093 defsubr (&Sunix_sync); 6143 defsubr (&Sunix_sync);
6094#endif 6144#endif
diff --git a/src/fns.c b/src/fns.c
index 91cd5132546..ca3d98b23dd 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -3814,6 +3814,15 @@ hashfn_user_defined (struct hash_table_test *ht, Lisp_Object key)
3814 return hashfn_eq (ht, hash); 3814 return hashfn_eq (ht, hash);
3815} 3815}
3816 3816
3817/* Allocate basically initialized hash table. */
3818
3819static struct Lisp_Hash_Table *
3820allocate_hash_table (void)
3821{
3822 return ALLOCATE_PSEUDOVECTOR (struct Lisp_Hash_Table,
3823 count, PVEC_HASH_TABLE);
3824}
3825
3817/* An upper bound on the size of a hash table index. It must fit in 3826/* An upper bound on the size of a hash table index. It must fit in
3818 ptrdiff_t and be a valid Emacs fixnum. */ 3827 ptrdiff_t and be a valid Emacs fixnum. */
3819#define INDEX_SIZE_BOUND \ 3828#define INDEX_SIZE_BOUND \
diff --git a/src/font.c b/src/font.c
index a68c3c707c8..56a27821718 100644
--- a/src/font.c
+++ b/src/font.c
@@ -156,7 +156,7 @@ font_make_spec (void)
156 struct font_spec *spec 156 struct font_spec *spec
157 = ((struct font_spec *) 157 = ((struct font_spec *)
158 allocate_pseudovector (VECSIZE (struct font_spec), 158 allocate_pseudovector (VECSIZE (struct font_spec),
159 FONT_SPEC_MAX, PVEC_FONT)); 159 FONT_SPEC_MAX, FONT_SPEC_MAX, PVEC_FONT));
160 XSETFONT (font_spec, spec); 160 XSETFONT (font_spec, spec);
161 return font_spec; 161 return font_spec;
162} 162}
@@ -168,7 +168,7 @@ font_make_entity (void)
168 struct font_entity *entity 168 struct font_entity *entity
169 = ((struct font_entity *) 169 = ((struct font_entity *)
170 allocate_pseudovector (VECSIZE (struct font_entity), 170 allocate_pseudovector (VECSIZE (struct font_entity),
171 FONT_ENTITY_MAX, PVEC_FONT)); 171 FONT_ENTITY_MAX, FONT_ENTITY_MAX, PVEC_FONT));
172 XSETFONT (font_entity, entity); 172 XSETFONT (font_entity, entity);
173 return font_entity; 173 return font_entity;
174} 174}
@@ -181,7 +181,8 @@ font_make_object (int size, Lisp_Object entity, int pixelsize)
181{ 181{
182 Lisp_Object font_object; 182 Lisp_Object font_object;
183 struct font *font 183 struct font *font
184 = (struct font *) allocate_pseudovector (size, FONT_OBJECT_MAX, PVEC_FONT); 184 = (struct font *) allocate_pseudovector (size, FONT_OBJECT_MAX,
185 FONT_OBJECT_MAX, PVEC_FONT);
185 int i; 186 int i;
186 187
187 /* GC can happen before the driver is set up, 188 /* GC can happen before the driver is set up,
@@ -4532,12 +4533,11 @@ character code corresponding to the glyph or nil if there's no
4532corresponding character. */) 4533corresponding character. */)
4533 (Lisp_Object font_object, Lisp_Object character, Lisp_Object otf_features) 4534 (Lisp_Object font_object, Lisp_Object character, Lisp_Object otf_features)
4534{ 4535{
4535 struct font *font; 4536 struct font *font = CHECK_FONT_GET_OBJECT (font_object);
4536 Lisp_Object gstring_in, gstring_out, g; 4537 Lisp_Object gstring_in, gstring_out, g;
4537 Lisp_Object alternates; 4538 Lisp_Object alternates;
4538 int i, num; 4539 int i, num;
4539 4540
4540 CHECK_FONT_GET_OBJECT (font_object, font);
4541 if (! font->driver->otf_drive) 4541 if (! font->driver->otf_drive)
4542 error ("Font backend %s can't drive OpenType GSUB table", 4542 error ("Font backend %s can't drive OpenType GSUB table",
4543 SDATA (SYMBOL_NAME (font->driver->type))); 4543 SDATA (SYMBOL_NAME (font->driver->type)));
@@ -4647,12 +4647,9 @@ FEATURE is a symbol representing OpenType feature tag.
4647If the font is not OpenType font, CAPABILITY is nil. */) 4647If the font is not OpenType font, CAPABILITY is nil. */)
4648 (Lisp_Object font_object) 4648 (Lisp_Object font_object)
4649{ 4649{
4650 struct font *font; 4650 struct font *font = CHECK_FONT_GET_OBJECT (font_object);
4651 Lisp_Object val; 4651 Lisp_Object val = make_uninit_vector (9);
4652 4652
4653 CHECK_FONT_GET_OBJECT (font_object, font);
4654
4655 val = make_uninit_vector (9);
4656 ASET (val, 0, AREF (font_object, FONT_NAME_INDEX)); 4653 ASET (val, 0, AREF (font_object, FONT_NAME_INDEX));
4657 ASET (val, 1, AREF (font_object, FONT_FILE_INDEX)); 4654 ASET (val, 1, AREF (font_object, FONT_FILE_INDEX));
4658 ASET (val, 2, make_number (font->pixel_size)); 4655 ASET (val, 2, make_number (font->pixel_size));
@@ -4691,12 +4688,11 @@ the corresponding element is nil. */)
4691 (Lisp_Object font_object, Lisp_Object from, Lisp_Object to, 4688 (Lisp_Object font_object, Lisp_Object from, Lisp_Object to,
4692 Lisp_Object object) 4689 Lisp_Object object)
4693{ 4690{
4694 struct font *font; 4691 struct font *font = CHECK_FONT_GET_OBJECT (font_object);
4695 ptrdiff_t i, len; 4692 ptrdiff_t i, len;
4696 Lisp_Object *chars, vec; 4693 Lisp_Object *chars, vec;
4697 USE_SAFE_ALLOCA; 4694 USE_SAFE_ALLOCA;
4698 4695
4699 CHECK_FONT_GET_OBJECT (font_object, font);
4700 if (NILP (object)) 4696 if (NILP (object))
4701 { 4697 {
4702 ptrdiff_t charpos, bytepos; 4698 ptrdiff_t charpos, bytepos;
diff --git a/src/font.h b/src/font.h
index 5a3e38a2a6e..efc184eef77 100644
--- a/src/font.h
+++ b/src/font.h
@@ -413,46 +413,91 @@ struct font_bitmap
413/* Predicates to check various font-related objects. */ 413/* Predicates to check various font-related objects. */
414 414
415/* True iff X is one of font-spec, font-entity, and font-object. */ 415/* True iff X is one of font-spec, font-entity, and font-object. */
416#define FONTP(x) PSEUDOVECTORP (x, PVEC_FONT) 416INLINE bool
417FONTP (Lisp_Object x)
418{
419 return PSEUDOVECTORP (x, PVEC_FONT);
420}
421
417/* True iff X is font-spec. */ 422/* True iff X is font-spec. */
418#define FONT_SPEC_P(x) \ 423INLINE bool
419 (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX) 424FONT_SPEC_P (Lisp_Object x)
425{
426 return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX;
427}
428
420/* True iff X is font-entity. */ 429/* True iff X is font-entity. */
421#define FONT_ENTITY_P(x) \ 430INLINE bool
422 (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX) 431FONT_ENTITY_P (Lisp_Object x)
432{
433 return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX;
434}
435
423/* True iff X is font-object. */ 436/* True iff X is font-object. */
424#define FONT_OBJECT_P(x) \ 437INLINE bool
425 (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX) 438FONT_OBJECT_P (Lisp_Object x)
426 439{
427/* Check macros for various font-related objects. */ 440 return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX;
428 441}
429#define CHECK_FONT(x) \ 442
430 do { if (! FONTP (x)) wrong_type_argument (Qfont, x); } while (false) 443/* Type checking functions for various font-related objects. */
431#define CHECK_FONT_SPEC(x) \ 444
432 do { if (! FONT_SPEC_P (x)) wrong_type_argument (Qfont_spec, x); } \ 445INLINE void
433 while (false) 446CHECK_FONT (Lisp_Object x)
434#define CHECK_FONT_ENTITY(x) \ 447{
435 do { if (! FONT_ENTITY_P (x)) wrong_type_argument (Qfont_entity, x); } \ 448 CHECK_TYPE (FONTP (x), Qfont, x);
436 while (false) 449}
437#define CHECK_FONT_OBJECT(x) \ 450
438 do { if (! FONT_OBJECT_P (x)) wrong_type_argument (Qfont_object, x); } \ 451INLINE void
439 while (false) 452CHECK_FONT_SPEC (Lisp_Object x)
440 453{
441#define CHECK_FONT_GET_OBJECT(x, font) \ 454 CHECK_TYPE (FONT_SPEC_P (x), Qfont_spec, x);
442 do { \ 455}
443 CHECK_FONT_OBJECT (x); \ 456
444 font = XFONT_OBJECT (x); \ 457INLINE void
445 } while (false) 458CHECK_FONT_ENTITY (Lisp_Object x)
459{
460 CHECK_TYPE (FONT_ENTITY_P (x), Qfont_entity, x);
461}
462
463INLINE void
464CHECK_FONT_OBJECT (Lisp_Object x)
465{
466 CHECK_TYPE (FONT_OBJECT_P (x), Qfont_object, x);
467}
468
469/* C pointer extraction functions for various font-related objects. */
470
471INLINE struct font_spec *
472XFONT_SPEC (Lisp_Object p)
473{
474 eassert (FONT_SPEC_P (p));
475 return XUNTAG (p, Lisp_Vectorlike);
476}
477
478INLINE struct font_entity *
479XFONT_ENTITY (Lisp_Object p)
480{
481 eassert (FONT_ENTITY_P (p));
482 return XUNTAG (p, Lisp_Vectorlike);
483}
484
485INLINE struct font *
486XFONT_OBJECT (Lisp_Object p)
487{
488 eassert (FONT_OBJECT_P (p));
489 return XUNTAG (p, Lisp_Vectorlike);
490}
446 491
447#define XFONT_SPEC(p) \
448 (eassert (FONT_SPEC_P (p)), (struct font_spec *) XUNTAG (p, Lisp_Vectorlike))
449#define XFONT_ENTITY(p) \
450 (eassert (FONT_ENTITY_P (p)), \
451 (struct font_entity *) XUNTAG (p, Lisp_Vectorlike))
452#define XFONT_OBJECT(p) \
453 (eassert (FONT_OBJECT_P (p)), (struct font *) XUNTAG (p, Lisp_Vectorlike))
454#define XSETFONT(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FONT)) 492#define XSETFONT(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FONT))
455 493
494INLINE struct font *
495CHECK_FONT_GET_OBJECT (Lisp_Object x)
496{
497 CHECK_FONT_OBJECT (x);
498 return XFONT_OBJECT (x);
499}
500
456/* Number of pt per inch (from the TeXbook). */ 501/* Number of pt per inch (from the TeXbook). */
457#define PT_PER_INCH 72.27 502#define PT_PER_INCH 72.27
458 503
diff --git a/src/frame.c b/src/frame.c
index ec580f37c5b..2ce5a623853 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -570,6 +570,13 @@ adjust_frame_size (struct frame *f, int new_width, int new_height, int inhibit,
570 run_window_configuration_change_hook (f); 570 run_window_configuration_change_hook (f);
571} 571}
572 572
573/* Allocate basically initialized frame. */
574
575static struct frame *
576allocate_frame (void)
577{
578 return ALLOCATE_ZEROED_PSEUDOVECTOR (struct frame, face_cache, PVEC_FRAME);
579}
573 580
574struct frame * 581struct frame *
575make_frame (bool mini_p) 582make_frame (bool mini_p)
diff --git a/src/ftfont.c b/src/ftfont.c
index 9707b6c1b71..053b95fc69f 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -2576,13 +2576,10 @@ ftfont_shape_by_flt (Lisp_Object lgstring, struct font *font,
2576Lisp_Object 2576Lisp_Object
2577ftfont_shape (Lisp_Object lgstring) 2577ftfont_shape (Lisp_Object lgstring)
2578{ 2578{
2579 struct font *font; 2579 struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
2580 struct ftfont_info *ftfont_info; 2580 struct ftfont_info *ftfont_info = (struct ftfont_info *) font;
2581 OTF *otf; 2581 OTF *otf = ftfont_get_otf (ftfont_info);
2582 2582
2583 CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font);
2584 ftfont_info = (struct ftfont_info *) font;
2585 otf = ftfont_get_otf (ftfont_info);
2586 if (! otf) 2583 if (! otf)
2587 return make_number (0); 2584 return make_number (0);
2588 return ftfont_shape_by_flt (lgstring, font, ftfont_info->ft_size->face, otf, 2585 return ftfont_shape_by_flt (lgstring, font, ftfont_info->ft_size->face, otf,
diff --git a/src/gnutls.c b/src/gnutls.c
index 5e6c6353b45..35f0eb48bc1 100644
--- a/src/gnutls.c
+++ b/src/gnutls.c
@@ -122,6 +122,8 @@ DEF_DLL_FN (void, gnutls_transport_set_push_function,
122 (gnutls_session_t, gnutls_push_func)); 122 (gnutls_session_t, gnutls_push_func));
123DEF_DLL_FN (int, gnutls_x509_crt_check_hostname, 123DEF_DLL_FN (int, gnutls_x509_crt_check_hostname,
124 (gnutls_x509_crt_t, const char *)); 124 (gnutls_x509_crt_t, const char *));
125DEF_DLL_FN (int, gnutls_x509_crt_check_issuer,
126 (gnutls_x509_crt_t, gnutls_x509_crt_t));
125DEF_DLL_FN (void, gnutls_x509_crt_deinit, (gnutls_x509_crt_t)); 127DEF_DLL_FN (void, gnutls_x509_crt_deinit, (gnutls_x509_crt_t));
126DEF_DLL_FN (int, gnutls_x509_crt_import, 128DEF_DLL_FN (int, gnutls_x509_crt_import,
127 (gnutls_x509_crt_t, const gnutls_datum_t *, 129 (gnutls_x509_crt_t, const gnutls_datum_t *,
@@ -236,6 +238,7 @@ init_gnutls_functions (void)
236 LOAD_DLL_FN (library, gnutls_transport_set_pull_function); 238 LOAD_DLL_FN (library, gnutls_transport_set_pull_function);
237 LOAD_DLL_FN (library, gnutls_transport_set_push_function); 239 LOAD_DLL_FN (library, gnutls_transport_set_push_function);
238 LOAD_DLL_FN (library, gnutls_x509_crt_check_hostname); 240 LOAD_DLL_FN (library, gnutls_x509_crt_check_hostname);
241 LOAD_DLL_FN (library, gnutls_x509_crt_check_issuer);
239 LOAD_DLL_FN (library, gnutls_x509_crt_deinit); 242 LOAD_DLL_FN (library, gnutls_x509_crt_deinit);
240 LOAD_DLL_FN (library, gnutls_x509_crt_import); 243 LOAD_DLL_FN (library, gnutls_x509_crt_import);
241 LOAD_DLL_FN (library, gnutls_x509_crt_init); 244 LOAD_DLL_FN (library, gnutls_x509_crt_init);
@@ -329,6 +332,7 @@ init_gnutls_functions (void)
329# define gnutls_transport_set_pull_function fn_gnutls_transport_set_pull_function 332# define gnutls_transport_set_pull_function fn_gnutls_transport_set_pull_function
330# define gnutls_transport_set_push_function fn_gnutls_transport_set_push_function 333# define gnutls_transport_set_push_function fn_gnutls_transport_set_push_function
331# define gnutls_x509_crt_check_hostname fn_gnutls_x509_crt_check_hostname 334# define gnutls_x509_crt_check_hostname fn_gnutls_x509_crt_check_hostname
335# define gnutls_x509_crt_check_issuer fn_gnutls_x509_crt_check_issuer
332# define gnutls_x509_crt_deinit fn_gnutls_x509_crt_deinit 336# define gnutls_x509_crt_deinit fn_gnutls_x509_crt_deinit
333# define gnutls_x509_crt_get_activation_time fn_gnutls_x509_crt_get_activation_time 337# define gnutls_x509_crt_get_activation_time fn_gnutls_x509_crt_get_activation_time
334# define gnutls_x509_crt_get_dn fn_gnutls_x509_crt_get_dn 338# define gnutls_x509_crt_get_dn fn_gnutls_x509_crt_get_dn
@@ -982,6 +986,10 @@ DEFUN ("gnutls-peer-status-warning-describe", Fgnutls_peer_status_warning_descri
982 if (EQ (status_symbol, intern (":self-signed"))) 986 if (EQ (status_symbol, intern (":self-signed")))
983 return build_string ("certificate signer was not found (self-signed)"); 987 return build_string ("certificate signer was not found (self-signed)");
984 988
989 if (EQ (status_symbol, intern (":unknown-ca")))
990 return build_string ("the certificate was signed by an unknown "
991 "and therefore untrusted authority");
992
985 if (EQ (status_symbol, intern (":not-ca"))) 993 if (EQ (status_symbol, intern (":not-ca")))
986 return build_string ("certificate signer is not a CA"); 994 return build_string ("certificate signer is not a CA");
987 995
@@ -1026,7 +1034,7 @@ The return value is a property list with top-level keys :warnings and
1026 warnings = Fcons (intern (":revoked"), warnings); 1034 warnings = Fcons (intern (":revoked"), warnings);
1027 1035
1028 if (verification & GNUTLS_CERT_SIGNER_NOT_FOUND) 1036 if (verification & GNUTLS_CERT_SIGNER_NOT_FOUND)
1029 warnings = Fcons (intern (":self-signed"), warnings); 1037 warnings = Fcons (intern (":unknown-ca"), warnings);
1030 1038
1031 if (verification & GNUTLS_CERT_SIGNER_NOT_CA) 1039 if (verification & GNUTLS_CERT_SIGNER_NOT_CA)
1032 warnings = Fcons (intern (":not-ca"), warnings); 1040 warnings = Fcons (intern (":not-ca"), warnings);
@@ -1044,6 +1052,13 @@ The return value is a property list with top-level keys :warnings and
1044 CERTIFICATE_NOT_MATCHING) 1052 CERTIFICATE_NOT_MATCHING)
1045 warnings = Fcons (intern (":no-host-match"), warnings); 1053 warnings = Fcons (intern (":no-host-match"), warnings);
1046 1054
1055 /* This could get called in the INIT stage, when the certificate is
1056 not yet set. */
1057 if (XPROCESS (proc)->gnutls_certificate != NULL &&
1058 gnutls_x509_crt_check_issuer(XPROCESS (proc)->gnutls_certificate,
1059 XPROCESS (proc)->gnutls_certificate))
1060 warnings = Fcons (intern (":self-signed"), warnings);
1061
1047 if (!NILP (warnings)) 1062 if (!NILP (warnings))
1048 result = list2 (intern (":warnings"), warnings); 1063 result = list2 (intern (":warnings"), warnings);
1049 1064
@@ -1604,8 +1619,7 @@ This function may also return `gnutls-e-again', or
1604#endif /* HAVE_GNUTLS */ 1619#endif /* HAVE_GNUTLS */
1605 1620
1606DEFUN ("gnutls-available-p", Fgnutls_available_p, Sgnutls_available_p, 0, 0, 0, 1621DEFUN ("gnutls-available-p", Fgnutls_available_p, Sgnutls_available_p, 0, 0, 0,
1607 doc: /* Return t if GnuTLS is available in this instance of Emacs. */ 1622 doc: /* Return t if GnuTLS is available in this instance of Emacs. */)
1608 attributes: const)
1609 (void) 1623 (void)
1610{ 1624{
1611#ifdef HAVE_GNUTLS 1625#ifdef HAVE_GNUTLS
diff --git a/src/gtkutil.h b/src/gtkutil.h
index 7d712c92e0d..0ac49ca7db5 100644
--- a/src/gtkutil.h
+++ b/src/gtkutil.h
@@ -78,7 +78,7 @@ typedef struct xg_menu_item_cb_data_
78 78
79} xg_menu_item_cb_data; 79} xg_menu_item_cb_data;
80 80
81extern bool xg_uses_old_file_dialog (void) ATTRIBUTE_CONST; 81extern bool xg_uses_old_file_dialog (void);
82 82
83extern char *xg_get_file_name (struct frame *f, 83extern char *xg_get_file_name (struct frame *f,
84 char *prompt, 84 char *prompt,
diff --git a/src/lisp.h b/src/lisp.h
index b6608daa20e..e94e39a5d01 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -608,6 +608,7 @@ INLINE bool SUBRP (Lisp_Object);
608INLINE bool (SYMBOLP) (Lisp_Object); 608INLINE bool (SYMBOLP) (Lisp_Object);
609INLINE bool (VECTORLIKEP) (Lisp_Object); 609INLINE bool (VECTORLIKEP) (Lisp_Object);
610INLINE bool WINDOWP (Lisp_Object); 610INLINE bool WINDOWP (Lisp_Object);
611INLINE bool TERMINALP (Lisp_Object);
611INLINE struct Lisp_Save_Value *XSAVE_VALUE (Lisp_Object); 612INLINE struct Lisp_Save_Value *XSAVE_VALUE (Lisp_Object);
612INLINE struct Lisp_Symbol *(XSYMBOL) (Lisp_Object); 613INLINE struct Lisp_Symbol *(XSYMBOL) (Lisp_Object);
613INLINE void *(XUNTAG) (Lisp_Object, int); 614INLINE void *(XUNTAG) (Lisp_Object, int);
@@ -1003,6 +1004,7 @@ XWINDOW (Lisp_Object a)
1003INLINE struct terminal * 1004INLINE struct terminal *
1004XTERMINAL (Lisp_Object a) 1005XTERMINAL (Lisp_Object a)
1005{ 1006{
1007 eassert (TERMINALP (a));
1006 return XUNTAG (a, Lisp_Vectorlike); 1008 return XUNTAG (a, Lisp_Vectorlike);
1007} 1009}
1008 1010
@@ -1065,12 +1067,6 @@ builtin_lisp_symbol (int index)
1065 return make_lisp_symbol (lispsym + index); 1067 return make_lisp_symbol (lispsym + index);
1066} 1068}
1067 1069
1068INLINE Lisp_Object
1069make_lisp_proc (struct Lisp_Process *p)
1070{
1071 return make_lisp_ptr (p, Lisp_Vectorlike);
1072}
1073
1074#define XSETINT(a, b) ((a) = make_number (b)) 1070#define XSETINT(a, b) ((a) = make_number (b))
1075#define XSETFASTINT(a, b) ((a) = make_natnum (b)) 1071#define XSETFASTINT(a, b) ((a) = make_natnum (b))
1076#define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Lisp_Cons)) 1072#define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Lisp_Cons))
@@ -3785,16 +3781,25 @@ make_uninit_sub_char_table (int depth, int min_char)
3785 return v; 3781 return v;
3786} 3782}
3787 3783
3788extern struct Lisp_Vector *allocate_pseudovector (int, int, enum pvec_type); 3784extern struct Lisp_Vector *allocate_pseudovector (int, int, int,
3789#define ALLOCATE_PSEUDOVECTOR(typ,field,tag) \ 3785 enum pvec_type);
3790 ((typ*) \ 3786
3791 allocate_pseudovector \ 3787/* Allocate partially initialized pseudovector where all Lisp_Object
3792 (VECSIZE (typ), PSEUDOVECSIZE (typ, field), tag)) 3788 slots are set to Qnil but the rest (if any) is left uninitialized. */
3793extern struct Lisp_Hash_Table *allocate_hash_table (void); 3789
3794extern struct window *allocate_window (void); 3790#define ALLOCATE_PSEUDOVECTOR(type, field, tag) \
3795extern struct frame *allocate_frame (void); 3791 ((type *) allocate_pseudovector (VECSIZE (type), \
3796extern struct Lisp_Process *allocate_process (void); 3792 PSEUDOVECSIZE (type, field), \
3797extern struct terminal *allocate_terminal (void); 3793 PSEUDOVECSIZE (type, field), tag))
3794
3795/* Allocate fully initialized pseudovector where all Lisp_Object
3796 slots are set to Qnil and the rest (if any) is zeroed. */
3797
3798#define ALLOCATE_ZEROED_PSEUDOVECTOR(type, field, tag) \
3799 ((type *) allocate_pseudovector (VECSIZE (type), \
3800 PSEUDOVECSIZE (type, field), \
3801 VECSIZE (type), tag))
3802
3798extern bool gc_in_progress; 3803extern bool gc_in_progress;
3799extern bool abort_on_gc; 3804extern bool abort_on_gc;
3800extern Lisp_Object make_float (double); 3805extern Lisp_Object make_float (double);
diff --git a/src/macfont.m b/src/macfont.m
index f569934128f..cbf1b07bc94 100644
--- a/src/macfont.m
+++ b/src/macfont.m
@@ -2788,9 +2788,9 @@ macfont_draw (struct glyph_string *s, int from, int to, int x, int y,
2788static Lisp_Object 2788static Lisp_Object
2789macfont_shape (Lisp_Object lgstring) 2789macfont_shape (Lisp_Object lgstring)
2790{ 2790{
2791 struct font *font; 2791 struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
2792 struct macfont_info *macfont_info; 2792 struct macfont_info *macfont_info = (struct macfont_info *) font;
2793 FontRef macfont; 2793 FontRef macfont = macfont_info->macfont;
2794 ptrdiff_t glyph_len, len, i, j; 2794 ptrdiff_t glyph_len, len, i, j;
2795 CFIndex nonbmp_len; 2795 CFIndex nonbmp_len;
2796 UniChar *unichars; 2796 UniChar *unichars;
@@ -2799,10 +2799,6 @@ macfont_shape (Lisp_Object lgstring)
2799 CFIndex used = 0; 2799 CFIndex used = 0;
2800 struct mac_glyph_layout *glyph_layouts; 2800 struct mac_glyph_layout *glyph_layouts;
2801 2801
2802 CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font);
2803 macfont_info = (struct macfont_info *) font;
2804 macfont = macfont_info->macfont;
2805
2806 glyph_len = LGSTRING_GLYPH_LEN (lgstring); 2802 glyph_len = LGSTRING_GLYPH_LEN (lgstring);
2807 nonbmp_len = 0; 2803 nonbmp_len = 0;
2808 for (i = 0; i < glyph_len; i++) 2804 for (i = 0; i < glyph_len; i++)
diff --git a/src/process.c b/src/process.c
index 77c94f29211..0789f20f1d2 100644
--- a/src/process.c
+++ b/src/process.c
@@ -422,6 +422,11 @@ pset_write_queue (struct Lisp_Process *p, Lisp_Object val)
422} 422}
423 423
424 424
425static Lisp_Object
426make_lisp_proc (struct Lisp_Process *p)
427{
428 return make_lisp_ptr (p, Lisp_Vectorlike);
429}
425 430
426static struct fd_callback_data 431static struct fd_callback_data
427{ 432{
@@ -687,7 +692,15 @@ allocate_pty (char pty_name[PTY_NAME_SIZE])
687#endif /* HAVE_PTYS */ 692#endif /* HAVE_PTYS */
688 return -1; 693 return -1;
689} 694}
690 695
696/* Allocate basically initialized process. */
697
698static struct Lisp_Process *
699allocate_process (void)
700{
701 return ALLOCATE_ZEROED_PSEUDOVECTOR (struct Lisp_Process, pid, PVEC_PROCESS);
702}
703
691static Lisp_Object 704static Lisp_Object
692make_process (Lisp_Object name) 705make_process (Lisp_Object name)
693{ 706{
diff --git a/src/terminal.c b/src/terminal.c
index 92befd28543..b48d0623e12 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -254,6 +254,15 @@ get_named_terminal (const char *name)
254 return NULL; 254 return NULL;
255} 255}
256 256
257/* Allocate basically initialized terminal. */
258
259static struct terminal *
260allocate_terminal (void)
261{
262 return ALLOCATE_ZEROED_PSEUDOVECTOR
263 (struct terminal, next_terminal, PVEC_TERMINAL);
264}
265
257/* Create a new terminal object of TYPE and add it to the terminal list. RIF 266/* Create a new terminal object of TYPE and add it to the terminal list. RIF
258 may be NULL if this terminal type doesn't support window-based redisplay. */ 267 may be NULL if this terminal type doesn't support window-based redisplay. */
259 268
diff --git a/src/w32uniscribe.c b/src/w32uniscribe.c
index 2a7fe2e6f91..9cd97e28616 100644
--- a/src/w32uniscribe.c
+++ b/src/w32uniscribe.c
@@ -183,8 +183,9 @@ uniscribe_otf_capability (struct font *font)
183static Lisp_Object 183static Lisp_Object
184uniscribe_shape (Lisp_Object lgstring) 184uniscribe_shape (Lisp_Object lgstring)
185{ 185{
186 struct font * font; 186 struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
187 struct uniscribe_font_info * uniscribe_font; 187 struct uniscribe_font_info *uniscribe_font
188 = (struct uniscribe_font_info *) font;
188 EMACS_UINT nchars; 189 EMACS_UINT nchars;
189 int nitems, max_items, i, max_glyphs, done_glyphs; 190 int nitems, max_items, i, max_glyphs, done_glyphs;
190 wchar_t *chars; 191 wchar_t *chars;
@@ -199,9 +200,6 @@ uniscribe_shape (Lisp_Object lgstring)
199 HDC context = NULL; 200 HDC context = NULL;
200 HFONT old_font = NULL; 201 HFONT old_font = NULL;
201 202
202 CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font);
203 uniscribe_font = (struct uniscribe_font_info *) font;
204
205 /* Get the chars from lgstring in a form we can use with uniscribe. */ 203 /* Get the chars from lgstring in a form we can use with uniscribe. */
206 max_glyphs = nchars = LGSTRING_GLYPH_LEN (lgstring); 204 max_glyphs = nchars = LGSTRING_GLYPH_LEN (lgstring);
207 done_glyphs = 0; 205 done_glyphs = 0;
diff --git a/src/window.c b/src/window.c
index 60ba3750f5b..d14a0f74fa0 100644
--- a/src/window.c
+++ b/src/window.c
@@ -3645,7 +3645,16 @@ temp_output_buffer_show (register Lisp_Object buf)
3645 } 3645 }
3646 } 3646 }
3647} 3647}
3648 3648
3649/* Allocate basically initialized window. */
3650
3651static struct window *
3652allocate_window (void)
3653{
3654 return ALLOCATE_ZEROED_PSEUDOVECTOR
3655 (struct window, current_matrix, PVEC_WINDOW);
3656}
3657
3649/* Make new window, have it replace WINDOW in window-tree, and make 3658/* Make new window, have it replace WINDOW in window-tree, and make
3650 WINDOW its only vertical child (HORFLAG 1 means make WINDOW its only 3659 WINDOW its only vertical child (HORFLAG 1 means make WINDOW its only
3651 horizontal child). */ 3660 horizontal child). */
diff --git a/src/xdisp.c b/src/xdisp.c
index a37575778e8..b38e8a64c5d 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -12332,8 +12332,7 @@ DEFUN ("tool-bar-height", Ftool_bar_height, Stool_bar_height,
12332 0, 2, 0, 12332 0, 2, 0,
12333 doc: /* Return the number of lines occupied by the tool bar of FRAME. 12333 doc: /* Return the number of lines occupied by the tool bar of FRAME.
12334If FRAME is nil or omitted, use the selected frame. Optional argument 12334If FRAME is nil or omitted, use the selected frame. Optional argument
12335PIXELWISE non-nil means return the height of the tool bar in pixels. */ 12335PIXELWISE non-nil means return the height of the tool bar in pixels. */)
12336 attributes: const)
12337 (Lisp_Object frame, Lisp_Object pixelwise) 12336 (Lisp_Object frame, Lisp_Object pixelwise)
12338{ 12337{
12339 int height = 0; 12338 int height = 0;
diff --git a/src/xftfont.c b/src/xftfont.c
index c587d814efa..054b38e120f 100644
--- a/src/xftfont.c
+++ b/src/xftfont.c
@@ -640,13 +640,11 @@ xftfont_draw (struct glyph_string *s, int from, int to, int x, int y,
640static Lisp_Object 640static Lisp_Object
641xftfont_shape (Lisp_Object lgstring) 641xftfont_shape (Lisp_Object lgstring)
642{ 642{
643 struct font *font; 643 struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring));
644 struct xftfont_info *xftfont_info; 644 struct xftfont_info *xftfont_info = (struct xftfont_info *) font;
645 FT_Face ft_face; 645 FT_Face ft_face;
646 Lisp_Object val; 646 Lisp_Object val;
647 647
648 CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font);
649 xftfont_info = (struct xftfont_info *) font;
650 ft_face = XftLockFace (xftfont_info->xftfont); 648 ft_face = XftLockFace (xftfont_info->xftfont);
651 xftfont_info->ft_size = ft_face->size; 649 xftfont_info->ft_size = ft_face->size;
652 val = ftfont_driver.shape (lgstring); 650 val = ftfont_driver.shape (lgstring);
diff --git a/src/xmenu.c b/src/xmenu.c
index 9063a8a2a52..fdf1f6f4d84 100644
--- a/src/xmenu.c
+++ b/src/xmenu.c
@@ -2288,7 +2288,7 @@ x_menu_show (struct frame *f, int x, int y, int menuflags,
2288/* Detect if a dialog or menu has been posted. MSDOS has its own 2288/* Detect if a dialog or menu has been posted. MSDOS has its own
2289 implementation on msdos.c. */ 2289 implementation on msdos.c. */
2290 2290
2291int ATTRIBUTE_CONST 2291int
2292popup_activated (void) 2292popup_activated (void)
2293{ 2293{
2294 return popup_activated_flag; 2294 return popup_activated_flag;
diff --git a/test/ChangeLog b/test/ChangeLog
index a33ec8793f4..8ed02ee341b 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,19 @@
12015-01-16 Jorgen Schaefer <contact@jorgenschaefer.de>
2
3 * automated/package-test.el (package-test-install-prioritized):
4 New test.
5
62015-01-15 Wolfgang Jenkner <wjenkner@inode.at>
7
8 * automated/calc-tests.el (calc-tests-equal, calc-tests-simple):
9 New functions.
10 (test-calc-remove-units, test-calc-extract-units)
11 (test-calc-convert-units): New tests.
12
132015-01-15 Wolfgang Jenkner <wjenkner@inode.at>
14
15 * automated/Makefile.in (WRITE_LOG): Use POSIX redirection.
16
12015-01-15 Stefan Monnier <monnier@iro.umontreal.ca> 172015-01-15 Stefan Monnier <monnier@iro.umontreal.ca>
2 18
3 * automated/eieio-test-methodinvoke.el (eieio-test-method-store): Add 19 * automated/eieio-test-methodinvoke.el (eieio-test-method-store): Add
diff --git a/test/automated/Makefile.in b/test/automated/Makefile.in
index ed757817ae0..7243e8af14a 100644
--- a/test/automated/Makefile.in
+++ b/test/automated/Makefile.in
@@ -64,7 +64,7 @@ all: check
64 64
65## Ignore any test errors so we can continue to test other files. 65## Ignore any test errors so we can continue to test other files.
66## But compilation errors are always fatal. 66## But compilation errors are always fatal.
67WRITE_LOG = >& $@ || { stat=ERROR; cat $@; }; echo $$stat: $@ 67WRITE_LOG = > $@ 2>&1 || { stat=ERROR; cat $@; }; echo $$stat: $@
68 68
69## I'd prefer to use -emacs -f ert-run-tests-batch-and-exit rather 69## I'd prefer to use -emacs -f ert-run-tests-batch-and-exit rather
70## than || true, since the former makes problems more obvious. 70## than || true, since the former makes problems more obvious.
diff --git a/test/automated/calc-tests.el b/test/automated/calc-tests.el
index 331e01e4640..d5252ea62a9 100644
--- a/test/automated/calc-tests.el
+++ b/test/automated/calc-tests.el
@@ -27,6 +27,40 @@
27(require 'cl-lib) 27(require 'cl-lib)
28(require 'ert) 28(require 'ert)
29(require 'calc) 29(require 'calc)
30(require 'calc-ext)
31(require 'calc-units)
32
33;; XXX The order in which calc libraries (in particular calc-units)
34;; are loaded influences whether a calc integer in an expression
35;; involving units is represented as a lisp integer or a calc float,
36;; see bug#19582. Until this will be fixed the following function can
37;; be used to compare such calc expressions.
38(defun calc-tests-equal (a b)
39 "Like `equal' but allow for different representations of numbers.
40For example: (calc-tests-equal 10 '(float 1 1)) => t.
41A and B should be calc expressions."
42 (cond ((math-numberp a)
43 (and (math-numberp b)
44 (math-equal a b)))
45 ((atom a)
46 (equal a b))
47 ((consp b)
48 ;; Can't be dotted or circular.
49 (and (= (length a) (length b))
50 (equal (car a) (car b))
51 (cl-every #'calc-tests-equal (cdr a) (cdr b))))))
52
53(defun calc-tests-simple (fun string &rest args)
54 "Push STRING on the calc stack, then call FUN and return the new top.
55The result is a calc (i.e., lisp) expression, not its string representation.
56Also pop the entire stack afterwards.
57An existing calc stack is reused, otherwise a new one is created."
58 (calc-eval string 'push)
59 (prog1
60 (ignore-errors
61 (apply fun args)
62 (calc-top-n 1))
63 (calc-pop 0)))
30 64
31(ert-deftest test-math-bignum () 65(ert-deftest test-math-bignum ()
32 ;; bug#17556 66 ;; bug#17556
@@ -34,6 +68,24 @@
34 (should (math-negp n)) 68 (should (math-negp n))
35 (should (cl-notany #'cl-minusp (cdr n))))) 69 (should (cl-notany #'cl-minusp (cdr n)))))
36 70
71(ert-deftest test-calc-remove-units ()
72 (should (calc-tests-equal (calc-tests-simple #'calc-remove-units "-1 m") -1)))
73
74(ert-deftest test-calc-extract-units ()
75 (should (calc-tests-equal (calc-tests-simple #'calc-extract-units "-1 m")
76 '(var m var-m)))
77 (should (calc-tests-equal (calc-tests-simple #'calc-extract-units "-1 m*cm")
78 '(* (float 1 -2) (^ (var m var-m) 2)))))
79
80(ert-deftest test-calc-convert-units ()
81 ;; Used to ask for `(The expression is unitless when simplified) Old Units: '.
82 (should (calc-tests-equal (calc-tests-simple #'calc-convert-units "-1 m" nil "cm")
83 '(* -100 (var cm var-cm))))
84 ;; Gave wrong result.
85 (should (calc-tests-equal (calc-tests-simple #'calc-convert-units "-1 m"
86 (math-read-expr "1m") "cm")
87 '(* -100 (var cm var-cm)))))
88
37(provide 'calc-tests) 89(provide 'calc-tests)
38;;; calc-tests.el ends here 90;;; calc-tests.el ends here
39 91
diff --git a/test/automated/package-test.el b/test/automated/package-test.el
index 27a71c528c6..c33a1ba0232 100644
--- a/test/automated/package-test.el
+++ b/test/automated/package-test.el
@@ -230,6 +230,23 @@ Must called from within a `tar-mode' buffer."
230 (package-refresh-contents) 230 (package-refresh-contents)
231 (package-install 'simple-single))) 231 (package-install 'simple-single)))
232 232
233(ert-deftest package-test-install-prioritized ()
234 "Install a lower version from a higher-prioritized archive."
235 (with-package-test ()
236 (let* ((newer-version (expand-file-name "data/package/newer-versions"
237 package-test-file-dir))
238 (package-archives `(("older" . ,package-test-data-dir)
239 ("newer" . ,newer-version)))
240 (package-archive-priorities '(("newer" . 100))))
241
242 (package-initialize)
243 (package-refresh-contents)
244 (package-install 'simple-single)
245
246 (let ((installed (cadr (assq 'simple-single package-alist))))
247 (should (version-list-= '(1 3)
248 (package-desc-version installed)))))))
249
233(ert-deftest package-test-install-multifile () 250(ert-deftest package-test-install-multifile ()
234 "Check properties of the installed multi-file package." 251 "Check properties of the installed multi-file package."
235 (with-package-test (:basedir "data/package" :install '(multi-file)) 252 (with-package-test (:basedir "data/package" :install '(multi-file))