emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 2d116c4: Merge from origin/emacs-28


From: Stefan Kangas
Subject: master 2d116c4: Merge from origin/emacs-28
Date: Sun, 12 Dec 2021 00:48:03 -0500 (EST)

branch: master
commit 2d116c432d2a561fac69916d78b7a70dd6144ac7
Merge: 4b29468 8a07343
Author: Stefan Kangas <stefan@marxist.se>
Commit: Stefan Kangas <stefan@marxist.se>

    Merge from origin/emacs-28
    
    8a0734329a Avoid undefined behavior in 'send-process-region' (Bug#523...
    30dd5c9acc Update to Org 9.5.1-25-g9ca3bc
    a374849926 Fix the DJGPP port
---
 config.bat                 |   7 +++-
 lisp/loadup.el             |   4 +-
 lisp/org/oc-basic.el       |  32 +++++++++-----
 lisp/org/oc-csl.el         |   4 +-
 lisp/org/oc.el             |   2 +-
 lisp/org/org-keys.el       |   2 +-
 lisp/org/org-macro.el      |   2 +-
 lisp/org/org-version.el    |   2 +-
 lisp/org/org.el            |  15 +++----
 lisp/org/ox-beamer.el      |   2 +-
 lisp/org/ox-icalendar.el   |   4 +-
 lisp/org/ox-koma-letter.el |   2 +-
 lisp/org/ox-man.el         |   2 +-
 lisp/org/ox-texinfo.el     |   2 +-
 lisp/org/ox.el             |  11 ++++-
 msdos/langinfo.h           |  20 +++++++++
 msdos/sed1v2.inp           |  24 ++++++++++-
 msdos/sed2v2.inp           |   1 +
 msdos/sed3v2.inp           |   1 +
 msdos/sedlibmk.inp         |  63 +++++++++++++++++-----------
 src/callproc.c             |  27 ++++++++++++
 src/fileio.c               |   2 +
 src/msdos.c                | 102 +++++++++++++++++++++++++++++++++++++++++++++
 src/msdos.h                |   2 +
 src/process.c              |  20 +++++++--
 src/thread.h               |   1 +
 26 files changed, 293 insertions(+), 63 deletions(-)

diff --git a/config.bat b/config.bat
index cba7336..e4332cd 100644
--- a/config.bat
+++ b/config.bat
@@ -283,6 +283,7 @@ If Exist execinfo.in.h update execinfo.in.h execinfo.in-h
 If Exist fcntl.in.h update fcntl.in.h fcntl.in-h
 If Exist getopt.in.h update getopt.in.h getopt.in-h
 If Exist getopt-cdefs.in.h update getopt-cdefs.in.h getopt-cdefs.in-h
+If Exist ieee754.in.h update ieee754.in.h ieee754.in-h
 If Exist inttypes.in.h update inttypes.in.h inttypes.in-h
 If Exist limits.in.h update limits.in.h limits.in-h
 If Exist signal.in.h update signal.in.h signal.in-h
@@ -293,6 +294,7 @@ If Exist stdint.in.h update stdint.in.h  stdint.in-h
 If Exist stdio.in.h update stdio.in.h stdio.in-h
 If Exist stdlib.in.h update stdlib.in.h stdlib.in-h
 If Exist string.in.h update string.in.h string.in-h
+If Exist sys_random.in.h update sys_random.in.h sys_random.in-h
 If Exist sys_select.in.h update sys_select.in.h sys_select.in-h
 If Exist sys_stat.in.h update sys_stat.in.h sys_stat.in-h
 If Exist sys_time.in.h update sys_time.in.h sys_time.in-h
@@ -308,10 +310,13 @@ rm -f makefile.tmp
 sed -f ../msdos/sedlibcf.inp < gnulib.mk-in > gnulib.tmp
 sed -f ../msdos/sedlibmk.inp < gnulib.tmp > gnulib.mk
 rm -f gnulib.tmp
-Rem Create .d files for new files in lib/
+Rem Create .d files for new files in lib/ and lib/malloc/
 If Not Exist deps\stamp mkdir deps
 for %%f in (*.c) do @call ..\msdos\depfiles.bat %%f
 echo deps-stamp > deps\stamp
+If Not Exist deps\malloc\stamp mkdir deps\malloc
+for %%f in (malloc\*.c) do @call ..\msdos\depfiles.bat %%f
+echo deps-stamp > deps\malloc\stamp
 cd ..
 rem   ----------------------------------------------------------------------
 Echo Configuring the lisp directory...
diff --git a/lisp/loadup.el b/lisp/loadup.el
index ed1570e..71d6a50 100644
--- a/lisp/loadup.el
+++ b/lisp/loadup.el
@@ -555,7 +555,9 @@ lost after dumping")))
                    (lexical-binding nil))
                (if (member tmp-dump-mode '("pdump" "pbootstrap"))
                    (dump-emacs-portable (expand-file-name output 
invocation-directory))
-                 (dump-emacs output "temacs")
+                 (dump-emacs output (if (eq system-type 'ms-dos)
+                                        "temacs.exe"
+                                      "temacs"))
                  (message "%d pure bytes used" pure-bytes-used))
                (setq success t))
           (unless success
diff --git a/lisp/org/oc-basic.el b/lisp/org/oc-basic.el
index 7b09db5..7c83bdc 100644
--- a/lisp/org/oc-basic.el
+++ b/lisp/org/oc-basic.el
@@ -68,6 +68,7 @@
 
 (require 'bibtex)
 (require 'json)
+(require 'map)
 (require 'oc)
 (require 'seq)
 
@@ -704,11 +705,18 @@ Return chosen style as a string."
 
 (defun org-cite-basic--key-completion-table ()
   "Return completion table for cite keys, as a hash table.
-In this hash table, keys are a strings with author, date, and title of the
-reference.  Values are the cite key."
-  (let ((cache-key (mapcar #'car org-cite-basic--bibliography-cache)))
-    (if (gethash cache-key org-cite-basic--completion-cache)
-        org-cite-basic--completion-cache
+
+In this hash table, keys are a strings with author, date, and
+title of the reference.  Values are the cite keys.
+
+Return nil if there are no bibliography files or no entries."
+  ;; Populate bibliography cache.
+  (let ((entries (org-cite-basic--parse-bibliography)))
+    (cond
+     ((null entries) nil)               ;no bibliography files
+     ((gethash entries org-cite-basic--completion-cache)
+      org-cite-basic--completion-cache)
+     (t
       (clrhash org-cite-basic--completion-cache)
       (dolist (key (org-cite-basic--all-keys))
         (let ((completion
@@ -725,14 +733,16 @@ reference.  Values are the cite key."
                 org-cite-basic-column-separator
                 (org-cite-basic--get-field 'title key nil t))))
           (puthash completion key org-cite-basic--completion-cache)))
-      (puthash cache-key t org-cite-basic--completion-cache)
-      org-cite-basic--completion-cache)))
+      (unless (map-empty-p org-cite-basic--completion-cache) ;no key
+        (puthash entries t org-cite-basic--completion-cache)
+        org-cite-basic--completion-cache)))))
 
 (defun org-cite-basic--complete-key (&optional multiple)
   "Prompt for a reference key and return a citation reference string.
 
-When optional argument MULTIPLE is non-nil, prompt for multiple keys, until one
-of them is nil.  Then return the list of reference strings selected.
+When optional argument MULTIPLE is non-nil, prompt for multiple
+keys, until one of them is nil.  Then return the list of
+reference strings selected.
 
 Raise an error when no bibliography is set in the buffer."
   (let* ((table
@@ -748,9 +758,9 @@ Raise an error when no bibliography is set in the buffer."
              (build-prompt
               (lambda ()
                 (if keys
-                    (format "Key (\"\" to exit) %s: "
+                    (format "Key (empty input exits) %s: "
                             (mapconcat #'identity (reverse keys) ";"))
-                  "Key (\"\" to exit): "))))
+                  "Key (empty input exits): "))))
         (let ((key (funcall prompt (funcall build-prompt))))
           (while (org-string-nw-p key)
             (push (gethash key table) keys)
diff --git a/lisp/org/oc-csl.el b/lisp/org/oc-csl.el
index 7f078d1..a92ea8a 100644
--- a/lisp/org/oc-csl.el
+++ b/lisp/org/oc-csl.el
@@ -605,10 +605,10 @@ property list."
     (with-temp-buffer
       (save-excursion (insert output))
       (when (search-forward "\\begin{document}" nil t)
-        ;; Ensure that \citeprocitem is defined for citeproc-el
+        (goto-char (match-beginning 0))
+        ;; Ensure that \citeprocitem is defined for citeproc-el.
         (insert 
"\\makeatletter\n\\newcommand{\\citeprocitem}[2]{\\hyper@linkstart{cite}{citeproc_bib_item_#1}#2\\hyper@linkend}\n\\makeatother\n\n")
         ;; Ensure there is a \usepackage{hanging} somewhere or add one.
-        (goto-char (match-beginning 0))
         (let ((re (rx "\\usepackage" (opt "[" (*? nonl) "]") "{hanging}")))
           (unless (re-search-backward re nil t)
             (insert "\\usepackage[notquote]{hanging}\n"))))
diff --git a/lisp/org/oc.el b/lisp/org/oc.el
index 427c087..a77daa7 100644
--- a/lisp/org/oc.el
+++ b/lisp/org/oc.el
@@ -1540,7 +1540,7 @@ The generated function inserts or edit a citation at 
point.  More specifically,
 
   On a citation reference:
 
-    - on the prefix or right before th \"@\" character, insert a new reference
+    - on the prefix or right before the \"@\" character, insert a new reference
       before the current one,
     - on the suffix, insert it after the reference,
     - otherwise, update the cite key, preserving both affixes.
diff --git a/lisp/org/org-keys.el b/lisp/org/org-keys.el
index a10db7e..a3d9576 100644
--- a/lisp/org/org-keys.el
+++ b/lisp/org/org-keys.el
@@ -444,7 +444,7 @@ COMMANDS is a list of alternating OLDDEF NEWDEF command 
names."
 
 ;;;; TAB key with modifiers
 (org-defkey org-mode-map (kbd "TAB") #'org-cycle)
-(org-defkey org-mode-map (kbd "C-c C-TAB") #'org-force-cycle-archived)
+(org-defkey org-mode-map (kbd "C-c C-<tab>") #'org-force-cycle-archived)
 ;; Override text-mode binding to expose `complete-symbol' for
 ;; pcomplete functionality.
 (org-defkey org-mode-map (kbd "M-TAB") nil)
diff --git a/lisp/org/org-macro.el b/lisp/org/org-macro.el
index c38a07b..c0287a2 100644
--- a/lisp/org/org-macro.el
+++ b/lisp/org/org-macro.el
@@ -368,7 +368,7 @@ Return value as a string."
            date)
        (unwind-protect
            (progn
-             (vc-call print-log file buf nil nil 1)
+             (vc-call print-log (list file) buf nil nil 1)
              (with-current-buffer buf
                (vc-exec-after
                 (lambda ()
diff --git a/lisp/org/org-version.el b/lisp/org/org-version.el
index de75519..b009b96 100644
--- a/lisp/org/org-version.el
+++ b/lisp/org/org-version.el
@@ -11,7 +11,7 @@ Inserted by installing Org mode or when a release is made."
 (defun org-git-version ()
   "The Git version of Org mode.
 Inserted by installing Org or when a release is made."
-   (let ((org-git-version "release_9.5.1-15-gdb4805"))
+   (let ((org-git-version "release_9.5.1-25-g9ca3bc"))
      org-git-version))
 
 (provide 'org-version)
diff --git a/lisp/org/org.el b/lisp/org/org.el
index df79d57..00bbc07 100644
--- a/lisp/org/org.el
+++ b/lisp/org/org.el
@@ -11323,13 +11323,14 @@ or a character."
            (setq
             new
             (if nump
-                 (let ((msg (format "Priority %s-%s, SPC to remove: "
-                                   (number-to-string org-priority-highest)
-                                   (number-to-string org-priority-lowest))))
-                   (if (< 9 org-priority-lowest)
-                      (string-to-number (read-string msg))
-                     (message msg)
-                     (string-to-number (char-to-string 
(read-char-exclusive)))))
+                 (let* ((msg (format "Priority %s-%s, SPC to remove: "
+                                     (number-to-string org-priority-highest)
+                                     (number-to-string org-priority-lowest)))
+                        (s (if (< 9 org-priority-lowest)
+                               (read-string msg)
+                             (message msg)
+                             (char-to-string (read-char-exclusive)))))
+                   (if (equal s " ") ?\s (string-to-number s)))
               (progn (message "Priority %c-%c, SPC to remove: "
                               org-priority-highest org-priority-lowest)
                      (save-match-data
diff --git a/lisp/org/ox-beamer.el b/lisp/org/ox-beamer.el
index ca0f1c7..77de0aa 100644
--- a/lisp/org/ox-beamer.el
+++ b/lisp/org/ox-beamer.el
@@ -1059,7 +1059,7 @@ Return PDF file's name."
   (let ((file (org-export-output-file-name ".tex" subtreep)))
     (org-export-to-file 'beamer file
       async subtreep visible-only body-only ext-plist
-      (lambda (file) (org-latex-compile file)))))
+      #'org-latex-compile)))
 
 ;;;###autoload
 (defun org-beamer-select-environment ()
diff --git a/lisp/org/ox-icalendar.el b/lisp/org/ox-icalendar.el
index 081a283..16c3dc9 100644
--- a/lisp/org/ox-icalendar.el
+++ b/lisp/org/ox-icalendar.el
@@ -888,8 +888,8 @@ Return ICS file name."
     (org-export-to-file 'icalendar outfile
       async subtreep visible-only body-only
       '(:ascii-charset utf-8 :ascii-links-to-notes nil)
-      (lambda (file)
-       (run-hook-with-args 'org-icalendar-after-save-hook file) nil))))
+      '(lambda (file)
+        (run-hook-with-args 'org-icalendar-after-save-hook file) nil))))
 
 ;;;###autoload
 (defun org-icalendar-export-agenda-files (&optional async)
diff --git a/lisp/org/ox-koma-letter.el b/lisp/org/ox-koma-letter.el
index 6a895a6..978e4e4 100644
--- a/lisp/org/ox-koma-letter.el
+++ b/lisp/org/ox-koma-letter.el
@@ -982,7 +982,7 @@ Return PDF file's name."
         (org-koma-letter-special-contents))
     (org-export-to-file 'koma-letter file
       async subtreep visible-only body-only ext-plist
-      (lambda (file) (org-latex-compile file)))))
+      #'org-latex-compile)))
 
 
 (provide 'ox-koma-letter)
diff --git a/lisp/org/ox-man.el b/lisp/org/ox-man.el
index 6d3476c..9a1f00f 100644
--- a/lisp/org/ox-man.el
+++ b/lisp/org/ox-man.el
@@ -1117,7 +1117,7 @@ Return PDF file's name."
   (let ((outfile (org-export-output-file-name ".man" subtreep)))
     (org-export-to-file 'man outfile
       async subtreep visible-only body-only ext-plist
-      (lambda (file) (org-latex-compile file)))))
+      #'org-latex-compile)))
 
 (defun org-man-compile (file)
   "Compile a Groff file.
diff --git a/lisp/org/ox-texinfo.el b/lisp/org/ox-texinfo.el
index 8b949b3..46077ec 100644
--- a/lisp/org/ox-texinfo.el
+++ b/lisp/org/ox-texinfo.el
@@ -1701,7 +1701,7 @@ Return INFO file's name."
        (org-export-coding-system org-texinfo-coding-system))
     (org-export-to-file 'texinfo outfile
       async subtreep visible-only body-only ext-plist
-      (lambda (file) (org-texinfo-compile file)))))
+      #'org-texinfo-compile)))
 
 ;;;###autoload
 (defun org-texinfo-publish-to-texinfo (plist filename pub-dir)
diff --git a/lisp/org/ox.el b/lisp/org/ox.el
index b27ec56..80202b0 100644
--- a/lisp/org/ox.el
+++ b/lisp/org/ox.el
@@ -6373,7 +6373,11 @@ use it to set a major mode there, e.g,
     (&optional async subtreep visible-only body-only ext-plist)
     (interactive)
     (org-export-to-buffer \\='latex \"*Org LATEX Export*\"
-      async subtreep visible-only body-only ext-plist (lambda () 
(LaTeX-mode))))
+      async subtreep visible-only body-only ext-plist
+      #'LaTeX-mode))
+
+When expressed as an anonymous function, using `lambda',
+POST-PROCESS needs to be quoted.
 
 This function returns BUFFER."
   (declare (indent 2))
@@ -6436,7 +6440,10 @@ to send the output file through additional processing, 
e.g,
     (let ((outfile (org-export-output-file-name \".tex\" subtreep)))
       (org-export-to-file \\='latex outfile
         async subtreep visible-only body-only ext-plist
-        (lambda (file) (org-latex-compile file)))
+        #'org-latex-compile)))
+
+When expressed as an anonymous function, using `lambda',
+POST-PROCESS needs to be quoted.
 
 The function returns either a file name returned by POST-PROCESS,
 or FILE."
diff --git a/msdos/langinfo.h b/msdos/langinfo.h
new file mode 100644
index 0000000..a74c3f7
--- /dev/null
+++ b/msdos/langinfo.h
@@ -0,0 +1,20 @@
+/* Replacement langinfo.h file for building GNU Emacs on MS-DOS with DJGPP.
+
+Copyright (C) 2021 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
+
+GNU Emacs 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
+
+#define nl_langinfo(ignore)  "cp437"
diff --git a/msdos/sed1v2.inp b/msdos/sed1v2.inp
index 5d82af6..60f67e4 100644
--- a/msdos/sed1v2.inp
+++ b/msdos/sed1v2.inp
@@ -55,6 +55,10 @@ s/ *@LIBJPEG@//
 s/ *@LIBPNG@//
 s/ *@LIBGIF@//
 s/ *@LIBXPM@//
+/^HAVE_NATIVE_COMP *=/s/@HAVE_NATIVE_COMP@/no/
+/^HAVE_PDUMPER *=/s/@HAVE_PDUMPER@/no/
+/^CHECK_STRUCTS *=/s/@CHECK_STRUCTS@//
+/^RUN_TEMACS \=/s/temacs/temacs.exe/
 /^XFT_LIBS *=/s/@XFT_LIBS@//
 /^XCB_LIBS *=/s/@XCB_LIBS@//
 /^FONTCONFIG_CFLAGS *=/s/@FONTCONFIG_CFLAGS@//
@@ -150,6 +154,18 @@ s/ *@LIBXPM@//
 /^CANNOT_DUMP *=/s/@CANNOT_DUMP@/no/
 /^W32_OBJ *=/s/@W32_OBJ@//
 /^W32_LIBS *=/s/@W32_LIBS@//
+/^JSON_OBJ *=/s/@JSON_OBJ@//
+/^JSON_CFLAGS *=/s/@JSON_CFLAGS@//
+/^JSON_LIBS *=/s/@JSON_LIBS@//
+/^LIBGCCJIT_OBJ *=/s/@LIBGCCJIT_OBJ@//
+/^LIBGCCJIT_CFLAGS *=/s/@LIBGCCJIT_CFLAGS@//
+/^LIBGCCJIT_LIBS *=/s/@LIBGCCJIT_LIBS@//
+/^HARFBUZZ_CFLAGS *=/s/@HARFBUZZ_CFLAGS@//
+/^HARFBUZZ_LIBS *=/s/@HARFBUZZ_LIBS@//
+/^LCMS2_CFLAGS *=/s/@LCMS2_CFLAGS@//
+/^LCMS2_LIBS *=/s/@LCMS2_LIBS@//
+/^LIBGMP *=/s/@LIBGMP@//
+/^DYNLIB_OBJ *=/s/@DYNLIB_OBJ@//
 /^version *=/s/@[^@\n]*@//
 /^EMACSRES *=/s/@EMACSRES@//
 /^W32_RES_LINK *=/s/@W32_RES_LINK@//
@@ -162,6 +178,7 @@ s/ *@LIBXPM@//
 /^AUTO_DEPEND *=/s/@AUTO_DEPEND@/yes/
 /^PAXCTL_dumped *=/s/=.*$/=/
 /^PAXCTL_notdumped *=/s/=.*$/=/
+/^DUMPING *=/s/@DUMPING@/unexec/
 /^lisp\.mk:/,/^$/c\
 lisp.mk: $(lispsource)/loadup.el\
        @rm -f $@\
@@ -183,6 +200,7 @@ lisp.mk: $(lispsource)/loadup.el\
 /^      *ifneq (\$(PAXCTL_dumped),)/,/^         *endif/d
 /^      *ln /s/ln /cp /
 /^     fi/d
+/ifeq (\$(HAVE_NATIVE_COMP):\$(NATIVE_DISABLED),yes:)/,/endif/d
 /^      *\$(RUN_TEMACS) /i\
        stubedit temacs.exe minstack=1024k
 /^      *LC_ALL=C \$(RUN_TEMACS)/i\
@@ -214,8 +232,8 @@ s/echo.*buildobj.lst/dj&/
 /^     -\{0,1\}rm -f/s/\\#/#/
 /^     echo.* buildobj.h/s|echo |djecho |
 /^buildobj\.h:/,/^      *\$(AM_V_at)mv /{
-  /^    *\$(AM_V_GEN)for /,/^   *done /c\
-       djecho "$(ALLOBJS)" | sed -e 's/^ */"/' -e 's/ *$$/"/' -e 's/  */", 
"/g' >>$@.tmp
+  /^    *\$(AM_V_GEN)for /,/mv \$@.tmp \$@/c\
+       djecho "$(ALLOBJS)" | sed -e 's/^ */"/' -e 's/ *$$/"/' -e 's/  */", 
"/g' >>$@
 }
 # Remove or replace dependencies we cannot have
 /^\.PRECIOUS: /s!\.\./config.status !!
@@ -236,3 +254,5 @@ s| -I\$(srcdir)/\.\./lib||
 s| -I\$(top_srcdir)/lib||
 s| -I\. -I\$(srcdir)| -I.|
 /^      *test "X/d
+/\$(CC) -o \$@.tmp/s/\$@.tmp/\$@/
+/mv \$@.tmp \$@/d
\ No newline at end of file
diff --git a/msdos/sed2v2.inp b/msdos/sed2v2.inp
index ef4bc24..52fbd4e 100644
--- a/msdos/sed2v2.inp
+++ b/msdos/sed2v2.inp
@@ -37,6 +37,7 @@
 /^#undef HAVE_STRUCT_UTIMBUF *$/s/^.*$/#define HAVE_STRUCT_UTIMBUF 1/
 /^#undef LOCALTIME_CACHE *$/s/^.*$/#define LOCALTIME_CACHE 1/
 /^#undef HAVE_TZSET *$/s/^.*$/#define HAVE_TZSET 1/
+/^#undef HAVE_UNEXEC *$/s/^.*$/#define HAVE_UNEXEC 1/
 /^#undef HAVE_RINT *$/s/^.*$/#define HAVE_RINT 1/
 /^#undef HAVE_C99_STRTOLD *$/s/^.*$/#define HAVE_C99_STRTOLD 1/
 /^#undef HAVE_DIFFTIME *$/s/^.*$/#define HAVE_DIFFTIME 1/
diff --git a/msdos/sed3v2.inp b/msdos/sed3v2.inp
index 8b9bb06..f7c9eb0 100644
--- a/msdos/sed3v2.inp
+++ b/msdos/sed3v2.inp
@@ -34,6 +34,7 @@
 /^LIBS_SYSTEM *=/s/@[^@\n]*@//g
 /^LIB_CLOCK_GETTIME *=/s/@[^@\n]*@//g
 /^LIB_TIMER_TIME *=/s/@[^@\n]*@//g
+/^LIB_GETRANDOM *=/s/@[^@\n]*@//g
 /^CFLAGS *=/s!=.*$!=-O2 -g!
 /^CPPFLAGS *=/s/@CPPFLAGS@//
 /^LDFLAGS *=/s/@LDFLAGS@//
diff --git a/msdos/sedlibmk.inp b/msdos/sedlibmk.inp
index 825be84..b3b9429 100644
--- a/msdos/sedlibmk.inp
+++ b/msdos/sedlibmk.inp
@@ -144,7 +144,7 @@ s/@PACKAGE@/emacs/
 /^CPP *=/s/@[^@\n]*@/gcc -e/
 /^CPPFLAGS *=/s/@[^@\n]*@//
 /^CCDEPMODE *=/s/@[^@\n]*@/depmode=gcc3/
-/^CFLAGS *=/s/@[^@\n]*@/-g -O2/
+/^CFLAGS *=/s/@[^@\n]*@/-g -O2 -I$\(srcdir\)\/..\/msdos/
 /^CYGPATH_W *=/s/@[^@\n]*@//
 /^CYGWIN_OBJ *=/s/@[^@\n]*@//
 /^C_SWITCH_MACHINE *=/s/@C_SWITCH_MACHINE@//
@@ -170,28 +170,28 @@ s/@PACKAGE@/emacs/
 /^BITSIZEOF_WCHAR_T *=/s/@BITSIZEOF_WCHAR_T@/16/
 /^BITSIZEOF_WINT_T *=/s/@BITSIZEOF_WINT_T@/32/
 /^APPLE_UNIVERSAL_BUILD *=/s/@APPLE_UNIVERSAL_BUILD@/0/
-#
-# Most GNULIB_* are replaced with zero even though DJGPP does not have
-# these features.  That's because the gnulib replacements cannot
+# Most GL_GNULIB_* are replaced with zero even though DJGPP does not
+# have these features.  That's because the gnulib replacements cannot
 # possibly work for DJGPP, so we prefer to fail the link than have a
 # subtly botched executable.  Those replacements that _are_ needed
 # should be before the last catch-all rule.
-/^GNULIB_ATOLL *=/s/@GNULIB_ATOLL@/1/
-/^GNULIB_DUP3 *=/s/@GNULIB_DUP3@/1/
-/^GNULIB_ENVIRON *=/s/@GNULIB_ENVIRON@/1/
-/^GNULIB_FDATASYNC *=/s/@GNULIB_FDATASYNC@/1/
-/^GNULIB_GETLOADAVG *=/s/@GNULIB_GETLOADAVG@/1/
-/^GNULIB_GL_UNISTD_H_GETOPT *=/s/@GNULIB_GL_UNISTD_H_GETOPT@/1/
-/^GNULIB_MEMRCHR *=/s/@GNULIB_MEMRCHR@/1/
-/^GNULIB_MKOSTEMP *=/s/@GNULIB_MKOSTEMP@/1/
-/^GNULIB_MKTIME *=/s/@GNULIB_MKTIME@/1/
-/^GNULIB_TIME_R *=/s/@GNULIB_TIME_R@/1/
-/^GNULIB_TIMEGM *=/s/@GNULIB_TIMEGM@/1/
-/^GNULIB_TIME_RZ *=/s/@GNULIB_TIME_RZ@/1/
-/^GNULIB_UNSETENV *=/s/@GNULIB_UNSETENV@/1/
-/^GNULIB_[^ =]* *= *@/s/@[^@\n]*@/0/
-/^GSETTINGS_CFLAGS *=/s/@[^@\n]*@//
-/^GSETTINGS_LIBS *=/s/@[^@\n]*@//
+/^GL_GNULIB_ATOLL *=/s/@GL_GNULIB_ATOLL@/1/
+/^GL_GNULIB_DUP3 *=/s/@GL_GNULIB_DUP3@/1/
+/^GL_GNULIB_ENVIRON *=/s/@GL_GNULIB_ENVIRON@/1/
+/^GL_GNULIB_FDATASYNC *=/s/@GL_GNULIB_FDATASYNC@/1/
+/^GL_GNULIB_GETLOADAVG *=/s/@GL_GNULIB_GETLOADAVG@/1/
+/^GL_GNULIB_UNISTD_H_GETOPT *=/s/@GL_GNULIB_UNISTD_H_GETOPT@/1/
+/^GL_GNULIB_MEMRCHR *=/s/@GL_GNULIB_MEMRCHR@/1/
+/^GL_GNULIB_MEMPCPY *=/s/@GL_GNULIB_MEMPCPY@/1/
+/^GL_GNULIB_MKOSTEMP *=/s/@GL_GNULIB_MKOSTEMP@/1/
+/^GL_GNULIB_MKTIME *=/s/@GL_GNULIB_MKTIME@/1/
+/^GL_GNULIB_TIME_R *=/s/@GL_GNULIB_TIME_R@/1/
+/^GL_GNULIB_TIMEGM *=/s/@GL_GNULIB_TIMEGM@/1/
+/^GL_GNULIB_TIME_RZ *=/s/@GL_GNULIB_TIME_RZ@/1/
+/^GL_GNULIB_UNSETENV *=/s/@GL_GNULIB_UNSETENV@/1/
+/^GL_GNULIB_[^ =]* *= *@/s/@[^@\n]*@/0/
+/^GL_GSETTINGS_CFLAGS *=/s/@[^@\n]*@//
+/^GL_GSETTINGS_LIBS *=/s/@[^@\n]*@//
 #
 # Edit the HAVE_foo variables
 /^HAVE_ATOLL *=/s/@HAVE_ATOLL@/0/
@@ -253,6 +253,7 @@ s/@PACKAGE@/emacs/
 /^HAVE_USLEEP *=/s/@HAVE_USLEEP@/1/
 /^HAVE_WCHAR_H *=/s/@HAVE_WCHAR_H@/1/
 /^HAVE_WCHAR_T *=/s/@HAVE_WCHAR_T@/1/
+/^HAVE_LIBGMP *=/s/@HAVE_LIBGMP@/0/
 /^HAVE__BOOL *=/s/@HAVE__BOOL@/1/
 /^HAVE__EXIT *=/s/@HAVE__EXIT@/1/
 /^HAVE_[^ =]* *= *@/s/@[^@\n]*@/0/
@@ -265,7 +266,9 @@ s/@PACKAGE@/emacs/
 /^LIBS *=/s/@[^@\n]*@//
 /^MAKEINFO *=/s/@MAKEINFO@/makeinfo/
 # MKDIR_P lines are edited further below
-/^MKDIR_P *=/s/@MKDIR_P@//
+# MKDIR_P is only used to create lib/malloc, and the folder is
+# already present in the distribution, so this should work fine.
+/^MKDIR_P *=/s/@MKDIR_P@/echo/
 /^NEXT_AS_FIRST_DIRECTIVE_DIRENT_H *=/s/@[^@\n]*@/<dirent.h>/
 /^NEXT_AS_FIRST_DIRECTIVE_ERRNO_H *=/s/@[^@\n]*@//
 /^NEXT_AS_FIRST_DIRECTIVE_FCNTL_H *=/s/@[^@\n]*@/<fcntl.h>/
@@ -309,6 +312,7 @@ s/@PACKAGE@/emacs/
 /^REPLACE_MKTIME *=/s/@[^@\n]*@/1/
 # We don't want any other gnulib replacement functions
 /^REPLACE_[^ =]* *= *@/s/@[^@\n]*@/0/
+/^LIB_GETRANDOM[^ =]* *= *@/s/@[^@\n]*@//
 /^SIG_ATOMIC_T_SUFFIX *=/s/@SIG_ATOMIC_T_SUFFIX@//
 /^SIZE_T_SUFFIX *=/s/@SIZE_T_SUFFIX@/u/
 /^ALLOCA_H *=/s/@[^@\n]*@/alloca.h/
@@ -317,18 +321,23 @@ s/@PACKAGE@/emacs/
 /^ERRNO_H *=/s/@[^@\n]*@//
 /^EXECINFO_H *=/s/@[^@\n]*@/execinfo.h/
 /^GETOPT_CDEFS_H *=/s/@[^@\n]*@/getopt-cdefs.h/
+/^GMP_H *=/s/@[^@\n]*@/gmp.h/
 /^LIMITS_H *=/s/@[^@\n]*@/limits.h/
+/^IEEE754_H *=/s/@[^@\n]*@/ieee754.h/
 /^STDALIGN_H *=/s/@[^@\n]*@/stdalign.h/
 /^STDDEF_H *=/s/@[^@\n]*@/stddef.h/
 /^STDINT_H *=/s/@[^@\n]*@/stdint.h/
 /^SYS_TIME_H_DEFINES_STRUCT_TIMESPEC *=/s/@[^@\n]*@/0/
 /^TIME_H_DEFINES_STRUCT_TIMESPEC *=/s/@[^@\n]*@/0/
+/^TIME_H_DEFINES_TIME_UTC *=/s/@[^@\n]*@/0/
+/^UNISTD_H_HAVE_SYS_RANDOM_H *=/s/@[^@\n]*@/0/
 /^UNISTD_H_HAVE_WINSOCK2_H *=/s/@[^@\n]*@/0/
 /^UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS *=/s/@[^@\n]*@/0/
 /^UNISTD_H_DEFINES_STRUCT_TIMESPEC *=/s/@[^@\n]*@/0/
 /^UNDEFINE_STRTOK_R *=/s/@UNDEFINE_STRTOK_R@/0/
 /^WCHAR_T_SUFFIX *=/s/@WCHAR_T_SUFFIX@/h/
 /^WINT_T_SUFFIX *=/s/@WINT_T_SUFFIX@//
+/^GNULIBHEADERS_OVERRIDE_WINT_T *=/s/@[^@\n]*@/0/
 /^WINDOWS_64_BIT_OFF_T *=/s/@WINDOWS_64_BIT_OFF_T@/0/
 /^WINDOWS_64_BIT_ST_SIZE *=/s/@WINDOWS_64_BIT_ST_SIZE@/0/
 /^WINDOWS_STAT_INODES *=/s/@WINDOWS_STAT_INODES@/0/
@@ -337,7 +346,7 @@ s/@PACKAGE@/emacs/
 /am__append_[1-9][0-9]* *=.*gettext\.h/s/@[^@\n]*@/\#/
 /am__append_2 *=.*verify\.h/s/@[^@\n]*@//
 /^@gl_GNULIB_ENABLED_tempname_TRUE@/s/@[^@\n]*@//
-/^gl_LIBOBJS *=/s/@[^@\n]*@/getopt.o getopt1.o memrchr.o sig2str.o time_r.o 
time_rz.o timegm.o mktime.o getloadavg.o pthread_sigmask.o mkostemp.o 
fpending.o fdatasync.o execinfo.o/
+/^gl_LIBOBJS *=/s/@[^@\n]*@/getopt.o getopt1.o getrandom.o memrchr.o mempcpy.o 
regex.o memmem.o sig2str.o sigdescr_np.o time_r.o time_rz.o timegm.o mktime.o 
mini-gmp-gnulib.o getloadavg.o pthread_sigmask.o mkostemp.o fpending.o 
execinfo.o tempname.o/
 /^am__append_[1-9][0-9]* *=/,/^[^      ]/{
   s/ *inttypes\.h//
   s| *sys/select\.h||
@@ -394,15 +403,19 @@ s/^       -*test -z.*|| rm/        -rm/
 s/@echo /@djecho /
 #
 # Determine which headers to generate
-s/= @GL_GENERATE_ALLOCA_H@/= 1/
+s/= @GL_GENERATE_ALLOCA_H_TRUE@/= 1/
 s/= @GL_GENERATE_BYTESWAP_H@/= 1/
 s/= @GL_GENERATE_EXECINFO_H@/= 1/
+s/= @GL_GENERATE_IEEE754_H@/= 1/
 s/= @GL_GENERATE_STDALIGN_H@/= 1/
 s/= @GL_GENERATE_STDDEF_H@/= 1/
 s/= @GL_GENERATE_STDINT_H@/= 1/
 s/= @GL_GENERATE_LIMITS_H@/= 1/
 s/= @GL_GENERATE_ERRNO_H@/= /
 s/= @GL_GENERATE_LIMITS_H@/= /
+s/= @GL_GENERATE_GMP_GMP_H@/= 1/
+s/= @GL_GENERATE_MINI_GMP_H@/= 1/
+s/\$\(MKDIR_P\) malloc//
 #
 # Determine which modules to build and which to omit
 /^noinst_LIBRARIES /a\
@@ -413,6 +426,7 @@ OMIT_GNULIB_MODULE_careadlinkat = true\
 OMIT_GNULIB_MODULE_cloexec = true\
 OMIT_GNULIB_MODULE_dirent = true\
 OMIT_GNULIB_MODULE_dirfd = true\
+OMIT_GNULIB_MODULE_scratch_buffer = true\
 OMIT_GNULIB_MODULE_dup2 = true\
 OMIT_GNULIB_MODULE_errno = true\
 OMIT_GNULIB_MODULE_euidaccess = true\
@@ -439,7 +453,8 @@ OMIT_GNULIB_MODULE_strtoimax = true\
 OMIT_GNULIB_MODULE_strtoll = true\
 OMIT_GNULIB_MODULE_symlink = true\
 OMIT_GNULIB_MODULE_sys_select = true\
-OMIT_GNULIB_MODULE_sys_time = true
+OMIT_GNULIB_MODULE_sys_time = true\
+OMIT_GNULIB_MODULE_crypto\/md5 = true
 /^arg-nonnull\.h:/,/^[         ][      ]*mv /c\
 arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h\
        sed -n -e '/GL_ARG_NONNULL/,$$p' < 
$(top_srcdir)/build-aux/snippet/arg-nonnull.h > $@
diff --git a/src/callproc.c b/src/callproc.c
index c949fff..c89628b 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -25,6 +25,10 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <sys/types.h>
 #include <unistd.h>
 
+#ifdef MSDOS
+extern char **environ;
+#endif
+
 #include <sys/file.h>
 #include <fcntl.h>
 
@@ -1199,6 +1203,11 @@ static CHILD_SETUP_TYPE
 child_setup (int in, int out, int err, char **new_argv, char **env,
             const char *current_dir)
 {
+#ifdef MSDOS
+  char *pwd_var;
+  char *temp;
+  ptrdiff_t i;
+#endif
 #ifdef WINDOWSNT
   int cpid;
   HANDLE handles[3];
@@ -1251,6 +1260,22 @@ child_setup (int in, int out, int err, char **new_argv, 
char **env,
   exec_failed (new_argv[0], errnum);
 
 #else /* MSDOS */
+  i = strlen (current_dir);
+  pwd_var = xmalloc (i + 5);
+  temp = pwd_var + 4;
+  memcpy (pwd_var, "PWD=", 4);
+  stpcpy (temp, current_dir);
+
+  if (i > 2 && IS_DEVICE_SEP (temp[1]) && IS_DIRECTORY_SEP (temp[2]))
+    {
+      temp += 2;
+      i -= 2;
+    }
+
+  /* Strip trailing slashes for PWD, but leave "/" and "//" alone.  */
+  while (i > 2 && IS_DIRECTORY_SEP (temp[i - 1]))
+    temp[--i] = 0;
+
   pid = run_msdos_command (new_argv, pwd_var + 4, in, out, err, env);
   xfree (pwd_var);
   if (pid == -1)
@@ -1582,11 +1607,13 @@ emacs_spawn (pid_t *newpid, int std_in, int std_out, 
int std_err,
       signal (SIGPROF, SIG_DFL);
 #endif
 
+#ifdef subprocesses
       /* Stop blocking SIGCHLD in the child.  */
       unblock_child_signal (oldset);
 
       if (pty_flag)
        child_setup_tty (std_out);
+#endif
 
       if (std_err < 0)
        std_err = std_out;
diff --git a/src/fileio.c b/src/fileio.c
index 12ece58..a0563cc 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -2286,6 +2286,7 @@ permissions.  */)
       off_t insize = st.st_size;
       ssize_t copied;
 
+#ifndef MSDOS
       for (newsize = 0; newsize < insize; newsize += copied)
        {
          /* Copy at most COPY_MAX bytes at a time; this is min
@@ -2300,6 +2301,7 @@ permissions.  */)
            break;
          maybe_quit ();
        }
+#endif /* MSDOS */
 
       /* Fall back on read+write if copy_file_range failed, or if the
         input is empty and so could be a /proc file.  read+write will
diff --git a/src/msdos.c b/src/msdos.c
index bf058c8..2272aba 100644
--- a/src/msdos.c
+++ b/src/msdos.c
@@ -1874,6 +1874,7 @@ initialize_msdos_display (struct terminal *term)
   term->redeem_scroll_bar_hook = 0;
   term->judge_scroll_bars_hook = 0;
   term->read_socket_hook = &tty_read_avail_input; /* from keyboard.c */
+  term->defined_color_hook = &tty_defined_color; /* from xfaces.c */
 }
 
 int
@@ -3915,6 +3916,50 @@ readlinkat (int fd, char const *name, char *buffer, 
size_t buffer_size)
   return readlink (name, buffer, buffer_size);
 }
 
+
+int
+openat (int fd, const char * path, int oflag, int mode)
+{
+  /* Rely on a hack: an open directory is modeled as file descriptor 0,
+     as in fstatat.  FIXME: Add proper support for openat.  */
+  char fullname[MAXPATHLEN];
+
+  if (fd != AT_FDCWD)
+    {
+      if (strlen (dir_pathname) + strlen (path) + 1 >= MAXPATHLEN)
+       {
+         errno = ENAMETOOLONG;
+         return -1;
+       }
+      sprintf (fullname, "%s/%s", dir_pathname, path);
+      path = fullname;
+    }
+
+  return open (path, oflag, mode);
+}
+
+int
+fchmodat (int fd, const char *path, mode_t mode, int flags)
+{
+  /* Rely on a hack: an open directory is modeled as file descriptor 0,
+     as in fstatat.  FIXME: Add proper support for openat.  */
+  char fullname[MAXPATHLEN];
+
+  if (fd != AT_FDCWD)
+    {
+      if (strlen (dir_pathname) + strlen (path) + 1 >= MAXPATHLEN)
+       {
+         errno = ENAMETOOLONG;
+         return -1;
+       }
+
+      sprintf (fullname, "%s/%s", dir_pathname, path);
+      path = fullname;
+    }
+
+  return chmod (path, mode);
+}
+
 char *
 careadlinkat (int fd, char const *filename,
               char *buffer, size_t buffer_size,
@@ -3942,6 +3987,63 @@ careadlinkat (int fd, char const *filename,
   return buffer;
 }
 
+int
+futimens (int fd, const struct timespec times[2])
+{
+  struct tm *tm;
+  struct ftime ft;
+  time_t t;
+
+  block_input ();
+  if (times[1].tv_sec == UTIME_NOW)
+    t = time (NULL);
+  else
+    t = times[1].tv_sec;
+
+  tm = localtime (&t);
+  ft.ft_tsec = min (29, tm->tm_sec / 2);
+  ft.ft_min = tm->tm_min;
+  ft.ft_hour = tm->tm_hour;
+  ft.ft_day = tm->tm_mday;
+  ft.ft_month = tm->tm_mon + 1;
+  ft.ft_year = max (0, tm->tm_year - 80);
+  unblock_input ();
+
+  return setftime (fd, &ft);
+}
+
+int
+utimensat (int dirfd, const char *pathname,
+          const struct timespec times[2], int flags)
+{
+  int fd, ret;
+  char fullname[MAXPATHLEN];
+
+  /* Rely on a hack: dirfd in its current usage in Emacs is always
+     AT_FDCWD.  */
+
+  if (dirfd != AT_FDCWD)
+    {
+      if (strlen (dir_pathname) + strlen (pathname) + 1 >= MAXPATHLEN)
+       {
+         errno = ENAMETOOLONG;
+         return -1;
+       }
+      sprintf (fullname, "%s/%s", dir_pathname, pathname);
+      pathname = fullname;
+    }
+
+  fd = open (pathname, O_WRONLY);
+
+  if (fd < 0)
+    return -1;
+
+  ret = futimens (fd, times);
+  close (fd);
+
+  return ret;
+}
+
 /* Emulate faccessat(2).  */
 int
 faccessat (int dirfd, const char * path, int mode, int flags)
diff --git a/src/msdos.h b/src/msdos.h
index f7d3b0d..d58b60e 100644
--- a/src/msdos.h
+++ b/src/msdos.h
@@ -86,6 +86,8 @@ typedef int GC;
 typedef int Pixmap;
 typedef int Display;
 typedef int Window;
+
+#define FRAME_X_DISPLAY(ignored) NULL
 #define PIX_TYPE unsigned long
 #define XDISPLAY
 
diff --git a/src/process.c b/src/process.c
index 483da4d..7609498 100644
--- a/src/process.c
+++ b/src/process.c
@@ -40,7 +40,10 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #include <netinet/in.h>
 #include <arpa/inet.h>
 
-#endif /* subprocesses */
+#else
+#define PIPECONN_P(p) false
+#define PIPECONN1_P(p) false
+#endif
 
 #ifdef HAVE_SETRLIMIT
 # include <sys/resource.h>
@@ -152,6 +155,7 @@ static bool kbd_is_on_hold;
    when exiting.  */
 bool inhibit_sentinels;
 
+#ifdef subprocesses
 union u_sockaddr
 {
   struct sockaddr sa;
@@ -164,8 +168,6 @@ union u_sockaddr
 #endif
 };
 
-#ifdef subprocesses
-
 #ifndef SOCK_CLOEXEC
 # define SOCK_CLOEXEC 0
 #endif
@@ -6536,6 +6538,9 @@ send_process (Lisp_Object proc, const char *buf, 
ptrdiff_t len,
          /* Send this batch, using one or more write calls.  */
          ptrdiff_t written = 0;
          int outfd = p->outfd;
+          if (outfd < 0)
+            error ("Output file descriptor of %s is closed",
+                   SDATA (p->name));
          eassert (0 <= outfd && outfd < FD_SETSIZE);
 #ifdef DATAGRAM_SOCKETS
          if (DATAGRAM_CHAN_P (outfd))
@@ -8257,9 +8262,13 @@ If optional argument QUERY is `current', ignore 
OMP_NUM_THREADS.
 If QUERY is `all', also count processors not available.  */)
   (Lisp_Object query)
 {
+#ifndef MSDOS
   return make_uint (num_processors (EQ (query, Qall) ? NPROC_ALL
                                    : EQ (query, Qcurrent) ? NPROC_CURRENT
                                    : NPROC_CURRENT_OVERRIDABLE));
+#else
+  return make_fixnum (1);
+#endif
 }
 
 #ifdef subprocesses
@@ -8304,10 +8313,15 @@ open_channel_for_module (Lisp_Object process)
 {
   CHECK_PROCESS (process);
   CHECK_TYPE (PIPECONN_P (process), Qpipe_process_p, process);
+#ifndef MSDOS
   int fd = dup (XPROCESS (process)->open_fd[SUBPROCESS_STDOUT]);
   if (fd == -1)
     report_file_error ("Cannot duplicate file descriptor", Qnil);
   return fd;
+#else
+  /* PIPECONN_P returning true shouldn't be possible on MSDOS.  */
+  emacs_abort ();
+#endif
 }
 
 
diff --git a/src/thread.h b/src/thread.h
index cf3ce92..b316e91 100644
--- a/src/thread.h
+++ b/src/thread.h
@@ -26,6 +26,7 @@ along with GNU Emacs.  If not, see 
<https://www.gnu.org/licenses/>.  */
 #endif
 
 #ifdef MSDOS
+#include <time.h>               /* struct rpl_timespec */
 #include <signal.h>            /* sigset_t */
 #endif
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]