diff --git a/ChangeLog b/ChangeLog index ab2bf756a13..f33d61ef9f1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,20 @@ -2011-09-04 Paul Eggert +2011-09-06 Paul Eggert Merge from gnulib, using build-aux to remove clutter (Bug#9169). + This is to fix the following problems: + . On FreeBSD 6.4, HP-UX 11.31, and Solaris 9, and when Emacs is + configured not to use gtk or any other thread-using library, + signals aren't blocked correctly. + . On IRIX 6.5 it fixes an unwanted clash between Emacs's + and IRIX's signal handling. + . On Cygwin 1.7.5 it works around an incompatibility with + the system pthread_sigmask. + . On MacOS X 10.5 (32-bit), files whose inode numbers + exceed 2**31 cannot be read or manipulated. + . pthread_sigmask: Actually use results of gl_THREADLIB. + . strtoimax, strtoumax: Avoid link error on OSF/1 with DTK cc. + . find 'ar' program that fits with --host argument. + . Allow the user to override the choice of AR, ARFLAGS, RANLIB. * autogen/README: Update destination list. * autogen/copy_autogen, autogen/update_autogen, .bzrignore: The autogenerated files compile, config.guess, diff --git a/admin/ChangeLog b/admin/ChangeLog index 40300fc8dcf..9856f38fabb 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog @@ -1,4 +1,4 @@ -2011-09-03 Paul Eggert +2011-09-06 Paul Eggert Merge from gnulib (Bug#9169). * notes/copyright: The files compile, config.guess, config.sub, diff --git a/autogen/config.in b/autogen/config.in index 24dd54db43f..5a53b240ef8 100644 --- a/autogen/config.in +++ b/autogen/config.in @@ -672,6 +672,9 @@ along with GNU Emacs. If not, see . */ /* Define to 1 if the system has the type `sigset_t'. */ #undef HAVE_SIGSET_T +/* Define to 1 if you have the `snprintf' function. */ +#undef HAVE_SNPRINTF + /* Define to 1 if you have sound support. */ #undef HAVE_SOUND diff --git a/autogen/configure b/autogen/configure index bbd54f57153..8d010ddf7b7 100755 --- a/autogen/configure +++ b/autogen/configure @@ -15312,6 +15312,18 @@ $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h fi +for ac_func in snprintf +do : + ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" +if test "x$ac_cv_func_snprintf" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SNPRINTF 1 +_ACEOF + +fi +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 $as_echo_n "checking for nl_langinfo and CODESET... " >&6; } if test "${emacs_cv_langinfo_codeset+set}" = set; then : diff --git a/etc/ChangeLog b/etc/ChangeLog index 24c0fd54422..0749862f676 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,8 @@ +2011-09-05 Juri Linkov + + * grep.txt: Add `eval' to the Local Variables section that + emulates `grep-filter'. + 2011-08-30 Paul Eggert * MACHINES: Remove obsolete info and update a bit (Bug#9404). diff --git a/etc/grep.txt b/etc/grep.txt index 9a3159f6b08..01ffa9f3ef8 100644 --- a/etc/grep.txt +++ b/etc/grep.txt @@ -103,5 +103,6 @@ COPYING PERMISSIONS: ;;; Local Variables: +;;; eval: (let ((inhibit-read-only t) (compilation-filter-start (point-min))) (save-excursion (goto-char (point-max)) (grep-filter) (set-buffer-modified-p nil))) ;;; buffer-read-only: t ;;; End: diff --git a/leim/ChangeLog b/leim/ChangeLog index c28e9472625..23050bf791a 100644 --- a/leim/ChangeLog +++ b/leim/ChangeLog @@ -1,4 +1,4 @@ -2011-09-03 Paul Eggert +2011-09-06 Paul Eggert * Makefile.in (install): install-sh is now in build-aux (Bug#9169). diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index 42073641cb9..65ca56b17a8 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog @@ -1,4 +1,4 @@ -2011-09-04 Paul Eggert +2011-09-06 Paul Eggert * Makefile.in ($(DESTDIR)${archlibdir}): install-sh moved to build-aux (Bug#9169). diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 5e6a6d9108a..d82391d691a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,30 @@ +2011-09-06 Alan Mackenzie + + * isearch.el (isearch-other-meta-char): Wherever a key list is + unread, "unread" the prefix arg, too. This fixes bug #8901. + +2011-09-05 Oleksandr Gavenko (tiny change) + + * progmodes/grep.el (rgrep): Add "-type d" (bug#9414). + +2011-09-05 Juri Linkov + + * progmodes/grep.el (grep-process-setup): Fix comments (bug#8084). + +2011-09-05 Juri Linkov + + * progmodes/grep.el (grep-filter): Avoid incomplete processing by + keeping point where processing of grep matches begins, and + continue to delete remaining escape sequences from the same point. + (grep-filter): Make leading zero optional in "0?1;31m" because + git-grep emits "\033[1;31m" escape sequences unlike expected + "\033[01;31m" as GNU Grep does (bug#9408). + (grep-process-setup): Replace obsolete "ml=" with newer "sl=". + +2011-09-05 Juri Linkov + + * subr.el (y-or-n-p): Capitalize "yes". + 2011-09-04 Michael Albinus * net/tramp.el (top): Require 'shell. Use `tramp-unload-hook' but diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 9d719136cc1..2e0cc11279a 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog @@ -1,3 +1,15 @@ +2011-09-05 Andrew Cohen + + * gnus-sum.el (gnus-summary-exit): Ensure we kill the proper + original-article-buffer. + +2011-09-05 Kan-Ru Chen + + * nnir.el (nnir-compose-result): Fix matching of server type. + (nnir-run-swish++): Ditto. + (nnir-run-namazu): Ditto. + (nnir-run-notmuch): Ditto. + 2011-09-04 Lars Magne Ingebrigtsen * gnus.el (gnus-home-directory): Add warning about setting in .gnus.el diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el index fd441c46d17..bb8c719a4fd 100644 --- a/lisp/gnus/gnus-sum.el +++ b/lisp/gnus/gnus-sum.el @@ -7214,6 +7214,7 @@ If FORCE (the prefix), also save the .newsrc file(s)." (quit-config (gnus-group-quit-config gnus-newsgroup-name)) (gnus-group-is-exiting-p t) (article-buffer gnus-article-buffer) + (original-article-buffer gnus-original-article-buffer) (mode major-mode) (group-point nil) (buf (current-buffer)) @@ -7290,7 +7291,7 @@ If FORCE (the prefix), also save the .newsrc file(s)." (unless (eq major-mode 'gnus-sticky-article-mode) (gnus-kill-buffer article-buffer) (setq gnus-article-current nil)))) - (gnus-kill-buffer gnus-original-article-buffer)) + (gnus-kill-buffer original-article-buffer)) ;; Clear the current group name. (unless quit-config diff --git a/lisp/gnus/nnir.el b/lisp/gnus/nnir.el index 17fc3f3fe81..0be6a17d50e 100644 --- a/lisp/gnus/nnir.el +++ b/lisp/gnus/nnir.el @@ -806,7 +806,7 @@ ready to be added to the list of search results." ;; remove trailing slash and, for nnmaildir, cur/new/tmp (setq dirnam (substring dirnam 0 - (if (string= (gnus-group-server server) "nnmaildir") + (if (string-match "^nnmaildir:" (gnus-group-server server)) -5 -1))) ;; Set group to dirnam without any leading dots or slashes, @@ -816,7 +816,7 @@ ready to be added to the list of search results." "[/\\]" "." t))) (vector (gnus-group-full-name group server) - (if (string= (gnus-group-server server) "nnmaildir") + (if (string-match "^nnmaildir:" (gnus-group-server server)) (nnmaildir-base-name-to-article-number (substring article 0 (string-match ":" article)) group nil) @@ -1073,7 +1073,8 @@ Windows NT 4.0." ;; is sufficient. Note that we can't only use the value of ;; nnml-use-compressed-files because old articles might have been ;; saved with a different value. - (article-pattern (if (string= (gnus-group-server server) "nnmaildir") + (article-pattern (if (string-match "^nnmaildir:" + (gnus-group-server server)) ":[0-9]+" "^[0-9]+\\(\\.[a-z0-9]+\\)?$")) score artno dirnam filenam) @@ -1315,7 +1316,8 @@ Tested with Namazu 2.0.6 on a GNU/Linux system." ;; (when group ;; (error "The Namazu backend cannot search specific groups")) (save-excursion - (let ((article-pattern (if (string= (gnus-group-server server) "nnmaildir") + (let ((article-pattern (if (string-match "^nnmaildir:" + (gnus-group-server server)) ":[0-9]+" "^[0-9]+$")) artlist @@ -1388,7 +1390,8 @@ actually)." (groupspec (cdr (assq 'group query))) (prefix (nnir-read-server-parm 'nnir-notmuch-remove-prefix server)) artlist - (article-pattern (if (string= (gnus-group-server server) "nnmaildir") + (article-pattern (if (string-match "^nnmaildir:" + (gnus-group-server server)) ":[0-9]+" "^[0-9]+$")) artno dirnam filenam) diff --git a/lisp/isearch.el b/lisp/isearch.el index 6eab3dbcbc4..7f54067f9aa 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -1920,6 +1920,7 @@ Isearch mode." (if (lookup-key global-map key) (progn (isearch-done) + (setq prefix-arg arg) (apply 'isearch-unread keylist)) (setq keylist (listify-key-sequence (lookup-key local-function-key-map key))) @@ -1935,6 +1936,7 @@ Isearch mode." (setq keylist (cdr keylist))) ;; As the remaining keys in KEYLIST can't be handled ;; here, we must reread them. + (setq prefix-arg arg) (apply 'isearch-unread keylist) (setq keylist nil))))) ( @@ -1957,8 +1959,10 @@ Isearch mode." isearch-other-control-char))))) (setcar keylist (- main-event (- ?\C-\S-a ?\C-a))) (cancel-kbd-macro-events) + (setq prefix-arg arg) (apply 'isearch-unread keylist)) ((eq search-exit-option 'edit) + (setq prefix-arg arg) (apply 'isearch-unread keylist) (isearch-edit-string)) ;; Handle a scrolling function. @@ -1987,6 +1991,7 @@ Isearch mode." (isearch-edit-string)) (search-exit-option (let (window) + (setq prefix-arg arg) (isearch-unread-key-sequence keylist) (setq main-event (car unread-command-events)) diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el index 709f01444bf..de46dc19169 100644 --- a/lisp/progmodes/grep.el +++ b/lisp/progmodes/grep.el @@ -446,9 +446,10 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'." (when (eq grep-highlight-matches 'auto-detect) (grep-compute-defaults)) (unless (or (eq grep-highlight-matches 'auto-detect) - ;; Uses font-lock to parse color escapes. (Bug#8084) - (null font-lock-mode) - (null grep-highlight-matches)) + (null grep-highlight-matches) + ;; Don't output color escapes if they can't be + ;; highlighted with `font-lock-face' by `grep-filter'. + (null font-lock-mode)) ;; `setenv' modifies `process-environment' let-bound in `compilation-start' ;; Any TERM except "dumb" allows GNU grep to use `--color=auto' (setenv "TERM" "emacs-grep") @@ -459,7 +460,7 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'." ;; GREP_COLOR is used in GNU grep 2.5.1, but deprecated in later versions (setenv "GREP_COLOR" "01;31") ;; GREP_COLORS is used in GNU grep 2.5.2 and later versions - (setenv "GREP_COLORS" "mt=01;31:fn=:ln=:bn=:se=:ml=:cx=:ne")) + (setenv "GREP_COLORS" "mt=01;31:fn=:ln=:bn=:se=:sl=:cx=:ne")) (set (make-local-variable 'compilation-exit-message-function) (lambda (status code msg) (if (eq status 'exit) @@ -480,20 +481,21 @@ Set up `compilation-exit-message-function' and run `grep-setup-hook'." This function is called from `compilation-filter-hook'." (save-excursion (forward-line 0) - (let ((end (point))) + (let ((end (point)) beg) (goto-char compilation-filter-start) (forward-line 0) + (setq beg (point)) ;; Only operate on whole lines so we don't get caught with part of an ;; escape sequence in one chunk and the rest in another. (when (< (point) end) (setq end (copy-marker end)) ;; Highlight grep matches and delete marking sequences. - (while (re-search-forward "\033\\[01;31m\\(.*?\\)\033\\[[0-9]*m" end 1) + (while (re-search-forward "\033\\[0?1;31m\\(.*?\\)\033\\[[0-9]*m" end 1) (replace-match (propertize (match-string 1) 'face nil 'font-lock-face grep-match-face) t t)) ;; Delete all remaining escape sequences - (goto-char compilation-filter-start) + (goto-char beg) (while (re-search-forward "\033\\[[0-9;]*[mK]" end 1) (replace-match "" t t)))))) @@ -987,7 +989,8 @@ This command shares argument histories with \\[lgrep] and \\[grep-find]." dir (concat (and grep-find-ignored-directories - (concat (shell-quote-argument "(") + (concat "-type d " + (shell-quote-argument "(") ;; we should use shell-quote-argument here " -path " (mapconcat diff --git a/lisp/subr.el b/lisp/subr.el index b49a20e7f6e..a2676b1173d 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -2254,7 +2254,7 @@ is nil and `use-dialog-box' is non-nil." (listp last-nonmenu-event) use-dialog-box) (setq answer - (x-popup-dialog t `(,prompt ("yes" . act) ("No" . skip)))) + (x-popup-dialog t `(,prompt ("Yes" . act) ("No" . skip)))) (setq prompt (concat prompt (if (eq ?\s (aref prompt (1- (length prompt)))) "" " ") diff --git a/msdos/ChangeLog b/msdos/ChangeLog index 9b8a96c117c..46a5b69cc16 100644 --- a/msdos/ChangeLog +++ b/msdos/ChangeLog @@ -1,4 +1,4 @@ -2011-07-25 Paul Eggert +2011-09-06 Paul Eggert * sedlibmk.inp (CONFIG_CLEAN_VPATH_FILES): Adjust to snippet moves from top level to build-aux/snippet (Bug#9169). diff --git a/src/ChangeLog b/src/ChangeLog index e730c79f65b..6131249beb9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,7 +1,30 @@ -2011-09-04 Paul Eggert +2011-09-06 Paul Eggert * Makefile.in (gl-stamp): move-if-change now in build-aux (Bug#9169). +2011-09-06 Paul Eggert + + * fileio.c: Fix bugs with large file offsets (Bug#9428). + The previous code assumed that file offsets (off_t values) fit in + EMACS_INT variables, which is not true on typical 32-bit hosts. + The code messed up by falsely reporting buffer overflow in cases + such as (insert-file-contents "big" nil 1 2) into an empty buffer + when "big" contains more than 2**29 bytes, even though this + inserts just one byte and does not overflow the buffer. + (Finsert_file_contents): Store file offsets as off_t + values, not as EMACS_INT values. Check for overflow when + converting between EMACS_INT and off_t. When checking for + buffer overflow or for overlap, take the offsets into account. + Don't use EMACS_INT for small values where int suffices. + When checking for overlap, fix a typo: ZV was used where + ZV_BYTE was intended. + (Fwrite_region): Don't assume off_t fits into 'long'. + * buffer.h (struct buffer.modtime_size): Now off_t, not EMACS_INT. + +2011-09-05 Michael Albinus + + * dbusbind.c (xd_signature_cat): Rename from signature_cat. + 2011-09-04 Paul Eggert sprintf-related integer and memory overflow issues (Bug#9412). diff --git a/src/buffer.h b/src/buffer.h index 06864dd5789..c50cfe56c77 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -559,7 +559,7 @@ struct buffer is still the same (since it's rounded up to seconds) but we're actually not up-to-date. -1 means the size is unknown. Only meaningful if modtime is actually set. */ - EMACS_INT modtime_size; + off_t modtime_size; /* The value of text->modiff at the last auto-save. */ int auto_save_modified; /* The value of text->modiff at the last display error. diff --git a/src/dbusbind.c b/src/dbusbind.c index 8dac2a6249f..2a38d15873c 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -262,7 +262,7 @@ xd_symbol_to_dbus_type (Lisp_Object object) /* Append to SIGNATURE a copy of X, making sure SIGNATURE does not become too long. */ static void -signature_cat (char *signature, char const *x) +xd_signature_cat (char *signature, char const *x) { ptrdiff_t siglen = strlen (signature); ptrdiff_t xlen = strlen (x); @@ -401,10 +401,10 @@ xd_signature (char *signature, unsigned int dtype, unsigned int parent_type, Lis { subtype = XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (elt)); xd_signature (x, subtype, dtype, CAR_SAFE (XD_NEXT_VALUE (elt))); - signature_cat (signature, x); + xd_signature_cat (signature, x); elt = CDR_SAFE (XD_NEXT_VALUE (elt)); } - signature_cat (signature, DBUS_STRUCT_END_CHAR_AS_STRING); + xd_signature_cat (signature, DBUS_STRUCT_END_CHAR_AS_STRING); break; case DBUS_TYPE_DICT_ENTRY: @@ -425,7 +425,7 @@ xd_signature (char *signature, unsigned int dtype, unsigned int parent_type, Lis elt = XD_NEXT_VALUE (elt); subtype = XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (elt)); xd_signature (x, subtype, dtype, CAR_SAFE (XD_NEXT_VALUE (elt))); - signature_cat (signature, x); + xd_signature_cat (signature, x); if (!XD_BASIC_DBUS_TYPE (subtype)) wrong_type_argument (intern ("D-Bus"), CAR_SAFE (XD_NEXT_VALUE (elt))); @@ -434,14 +434,14 @@ xd_signature (char *signature, unsigned int dtype, unsigned int parent_type, Lis elt = CDR_SAFE (XD_NEXT_VALUE (elt)); subtype = XD_OBJECT_TO_DBUS_TYPE (CAR_SAFE (elt)); xd_signature (x, subtype, dtype, CAR_SAFE (XD_NEXT_VALUE (elt))); - signature_cat (signature, x); + xd_signature_cat (signature, x); if (!NILP (CDR_SAFE (XD_NEXT_VALUE (elt)))) wrong_type_argument (intern ("D-Bus"), CAR_SAFE (CDR_SAFE (XD_NEXT_VALUE (elt)))); /* Closing signature. */ - signature_cat (signature, DBUS_DICT_ENTRY_END_CHAR_AS_STRING); + xd_signature_cat (signature, DBUS_DICT_ENTRY_END_CHAR_AS_STRING); break; default: diff --git a/src/fileio.c b/src/fileio.c index 60ee35bb399..fe0fb593208 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -3179,6 +3179,7 @@ variable `last-coding-system-used' to the coding system actually used. */) EMACS_INT inserted = 0; int nochange = 0; register EMACS_INT how_much; + off_t beg_offset, end_offset; register EMACS_INT unprocessed; int count = SPECPDL_INDEX (); struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; @@ -3284,15 +3285,6 @@ variable `last-coding-system-used' to the coding system actually used. */) record_unwind_protect (close_file_unwind, make_number (fd)); - /* Check whether the size is too large or negative, which can happen on a - platform that allows file sizes greater than the maximum off_t value. */ - if (! not_regular - && ! (0 <= st.st_size && st.st_size <= BUF_BYTES_MAX)) - buffer_overflow (); - - /* Prevent redisplay optimizations. */ - current_buffer->clip_changed = 1; - if (!NILP (visit)) { if (!NILP (beg) || !NILP (end)) @@ -3302,26 +3294,64 @@ variable `last-coding-system-used' to the coding system actually used. */) } if (!NILP (beg)) - CHECK_NUMBER (beg); + { + if (! (RANGED_INTEGERP (0, beg, TYPE_MAXIMUM (off_t)))) + wrong_type_argument (intern ("file-offset"), beg); + beg_offset = XFASTINT (beg); + } else - XSETFASTINT (beg, 0); + beg_offset = 0; if (!NILP (end)) - CHECK_NUMBER (end); + { + if (! (RANGED_INTEGERP (0, end, TYPE_MAXIMUM (off_t)))) + wrong_type_argument (intern ("file-offset"), end); + end_offset = XFASTINT (end); + } else { - if (! not_regular) + if (not_regular) + end_offset = TYPE_MAXIMUM (off_t); + else { - XSETINT (end, st.st_size); + end_offset = st.st_size; + + /* A negative size can happen on a platform that allows file + sizes greater than the maximum off_t value. */ + if (end_offset < 0) + buffer_overflow (); /* The file size returned from stat may be zero, but data may be readable nonetheless, for example when this is a file in the /proc filesystem. */ - if (st.st_size == 0) - XSETINT (end, READ_BUF_SIZE); + if (end_offset == 0) + end_offset = READ_BUF_SIZE; } } + /* Check now whether the buffer will become too large, + in the likely case where the file's length is not changing. + This saves a lot of needless work before a buffer overflow. */ + if (! not_regular) + { + /* The likely offset where we will stop reading. We could read + more (or less), if the file grows (or shrinks) as we read it. */ + off_t likely_end = min (end_offset, st.st_size); + + if (beg_offset < likely_end) + { + ptrdiff_t buf_bytes = + Z_BYTE - (!NILP (replace) ? ZV_BYTE - BEGV_BYTE : 0); + ptrdiff_t buf_growth_max = BUF_BYTES_MAX - buf_bytes; + off_t likely_growth = likely_end - beg_offset; + if (buf_growth_max < likely_growth) + buffer_overflow (); + } + } + + /* Prevent redisplay optimizations. */ + current_buffer->clip_changed = 1; + if (EQ (Vcoding_system_for_read, Qauto_save_coding)) { coding_system = coding_inherit_eol_type (Qutf_8_emacs, Qunix); @@ -3465,9 +3495,9 @@ variable `last-coding-system-used' to the coding system actually used. */) give up on handling REPLACE in the optimized way. */ int giveup_match_end = 0; - if (XINT (beg) != 0) + if (beg_offset != 0) { - if (emacs_lseek (fd, XINT (beg), SEEK_SET) < 0) + if (lseek (fd, beg_offset, SEEK_SET) < 0) report_file_error ("Setting file position", Fcons (orig_filename, Qnil)); } @@ -3515,7 +3545,7 @@ variable `last-coding-system-used' to the coding system actually used. */) immediate_quit = 0; /* If the file matches the buffer completely, there's no need to replace anything. */ - if (same_at_start - BEGV_BYTE == XINT (end)) + if (same_at_start - BEGV_BYTE == end_offset) { emacs_close (fd); specpdl_ptr--; @@ -3530,16 +3560,17 @@ variable `last-coding-system-used' to the coding system actually used. */) already found that decoding is necessary, don't waste time. */ while (!giveup_match_end) { - EMACS_INT total_read, nread, bufpos, curpos, trial; + int total_read, nread, bufpos, trial; + off_t curpos; /* At what file position are we now scanning? */ - curpos = XINT (end) - (ZV_BYTE - same_at_end); + curpos = end_offset - (ZV_BYTE - same_at_end); /* If the entire file matches the buffer tail, stop the scan. */ if (curpos == 0) break; /* How much can we scan in the next step? */ trial = min (curpos, sizeof buffer); - if (emacs_lseek (fd, curpos - trial, SEEK_SET) < 0) + if (lseek (fd, curpos - trial, SEEK_SET) < 0) report_file_error ("Setting file position", Fcons (orig_filename, Qnil)); @@ -3606,13 +3637,14 @@ variable `last-coding-system-used' to the coding system actually used. */) /* Don't try to reuse the same piece of text twice. */ overlap = (same_at_start - BEGV_BYTE - - (same_at_end + st.st_size - ZV)); + - (same_at_end + + (! NILP (end) ? end_offset : st.st_size) - ZV_BYTE)); if (overlap > 0) same_at_end += overlap; /* Arrange to read only the nonmatching middle part of the file. */ - XSETFASTINT (beg, XINT (beg) + (same_at_start - BEGV_BYTE)); - XSETFASTINT (end, XINT (end) - (ZV_BYTE - same_at_end)); + beg_offset += same_at_start - BEGV_BYTE; + end_offset -= ZV_BYTE - same_at_end; del_range_byte (same_at_start, same_at_end, 0); /* Insert from the file at the proper position. */ @@ -3657,7 +3689,7 @@ variable `last-coding-system-used' to the coding system actually used. */) /* First read the whole file, performing code conversion into CONVERSION_BUFFER. */ - if (emacs_lseek (fd, XINT (beg), SEEK_SET) < 0) + if (lseek (fd, beg_offset, SEEK_SET) < 0) report_file_error ("Setting file position", Fcons (orig_filename, Qnil)); @@ -3824,7 +3856,7 @@ variable `last-coding-system-used' to the coding system actually used. */) } if (! not_regular) - total = XINT (end) - XINT (beg); + total = end_offset - beg_offset; else /* For a special file, all we can do is guess. */ total = READ_BUF_SIZE; @@ -3845,9 +3877,9 @@ variable `last-coding-system-used' to the coding system actually used. */) if (GAP_SIZE < total) make_gap (total - GAP_SIZE); - if (XINT (beg) != 0 || !NILP (replace)) + if (beg_offset != 0 || !NILP (replace)) { - if (emacs_lseek (fd, XINT (beg), SEEK_SET) < 0) + if (lseek (fd, beg_offset, SEEK_SET) < 0) report_file_error ("Setting file position", Fcons (orig_filename, Qnil)); } @@ -4576,7 +4608,7 @@ This calls `write-region-annotate-functions' at the start, and if (!NILP (append) && !NILP (Ffile_regular_p (filename))) { - long ret; + off_t ret; if (NUMBERP (append)) ret = emacs_lseek (desc, XINT (append), SEEK_CUR);