# HG changeset patch # User Dave Love # Date 957948767 0 # Node ID 0027ff9c083a45acf4d1a24d2c08cc6066908b27 # Parent 6b355411e13a084efb92e3dada6f24b4e06744d4 (Fwrite_region): If APPEND arg is an integer, seek to that offset before writing. Move gcpro region past call of Ffile_regular_p. diff -r 6b355411e13a -r 0027ff9c083a src/fileio.c --- a/src/fileio.c Tue May 09 18:27:36 2000 +0000 +++ b/src/fileio.c Wed May 10 08:52:47 2000 +0000 @@ -1,5 +1,6 @@ /* File IO for GNU Emacs. - Copyright (C) 1985,86,87,88,93,94,95,96,97,98,1999 Free Software Foundation, Inc. + Copyright (C) 1985,86,87,88,93,94,95,96,97,98,99,2000 + Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -4317,7 +4318,8 @@ When called from a program, takes three arguments:\n\ START, END and FILENAME. START and END are buffer positions.\n\ Optional fourth argument APPEND if non-nil means\n\ - append to existing file contents (if any).\n\ + append to existing file contents (if any). If it is an integer,\n\ + seek to that offset in the file before writing.\n\ Optional fifth argument VISIT if t means\n\ set the last-save-file-modtime of buffer to this file's modtime\n\ and mark buffer not modified.\n\ @@ -4615,8 +4617,6 @@ #endif /* not DOS_NT */ #endif /* not VMS */ - UNGCPRO; - if (desc < 0) { #ifdef CLASH_DETECTION @@ -4624,19 +4624,31 @@ if (!auto_saving) unlock_file (lockname); errno = save_errno; #endif /* CLASH_DETECTION */ + UNGCPRO; report_file_error ("Opening output file", Fcons (filename, Qnil)); } record_unwind_protect (close_file_unwind, make_number (desc)); if (!NILP (append) && !NILP (Ffile_regular_p (filename))) - if (lseek (desc, 0, 2) < 0) - { + { + long ret; + + if (NUMBERP (append)) + ret = lseek (desc, XINT (append), 1); + else + ret = lseek (desc, 0, 2); + if (ret < 0) + { #ifdef CLASH_DETECTION - if (!auto_saving) unlock_file (lockname); + if (!auto_saving) unlock_file (lockname); #endif /* CLASH_DETECTION */ - report_file_error ("Lseek error", Fcons (filename, Qnil)); - } + UNGCPRO; + report_file_error ("Lseek error", Fcons (filename, Qnil)); + } + } + + UNGCPRO; #ifdef VMS /*