Mercurial > emacs
changeset 62296:3302236fcb60
(Ffind_file_name_handler): Handle lambda-exp as handler.
(Finsert_file_contents): If we read 0 bytes from a special file,
unlock the visited file if we locked it.
(Fmake_symbolic_link, Frecent_auto_save_p): Doc fixes.
(Ffile_exists_p, Ffile_symlink_p): Doc fixes.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Fri, 13 May 2005 13:33:53 +0000 |
parents | 15d767992da8 |
children | 5401d9510369 |
files | src/fileio.c |
diffstat | 1 files changed, 41 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/fileio.c Fri May 13 08:55:33 2005 +0000 +++ b/src/fileio.c Fri May 13 13:33:53 2005 +0000 @@ -373,7 +373,10 @@ Lisp_Object string = XCAR (elt); int match_pos; Lisp_Object handler = XCDR (elt); - Lisp_Object operations = Fget (handler, Qoperations); + Lisp_Object operations = Qnil; + + if (SYMBOLP (handler)) + operations = Fget (handler, Qoperations); if (STRINGP (string) && (match_pos = fast_string_match (string, filename)) > pos @@ -2862,7 +2865,8 @@ #ifdef S_IFLNK DEFUN ("make-symbolic-link", Fmake_symbolic_link, Smake_symbolic_link, 2, 3, "FMake symbolic link to file: \nGMake symbolic link to file %s: \np", - doc: /* Make a symbolic link to FILENAME, named LINKNAME. Both args must be strings. + doc: /* Make a symbolic link to FILENAME, named LINKNAME. +Both args must be strings. Signals a `file-already-exists' error if a file LINKNAME already exists unless optional third argument OK-IF-ALREADY-EXISTS is non-nil. A number as third arg means request confirmation if LINKNAME already exists. @@ -3060,8 +3064,10 @@ } DEFUN ("file-exists-p", Ffile_exists_p, Sfile_exists_p, 1, 1, 0, - doc: /* Return t if file FILENAME exists. (This does not mean you can read it.) -See also `file-readable-p' and `file-attributes'. */) + doc: /* Return t if file FILENAME exists (whether or not you can read it.) +See also `file-readable-p' and `file-attributes'. +This returns nil for a symlink to a nonexistent file. +Use `file-symlink-p' to test for such links. */) (filename) Lisp_Object filename; { @@ -3238,7 +3244,10 @@ DEFUN ("file-symlink-p", Ffile_symlink_p, Sfile_symlink_p, 1, 1, 0, doc: /* Return non-nil if file FILENAME is the name of a symbolic link. The value is the link target, as a string. -Otherwise returns nil. */) +Otherwise it returns nil. + +This function returns t when given the name of a symlink that +points to a nonexistent file. */) (filename) Lisp_Object filename; { @@ -3728,6 +3737,8 @@ int set_coding_system = 0; int coding_system_decided = 0; int read_quit = 0; + int old_Vdeactivate_mark = Vdeactivate_mark; + int we_locked_file = 0; if (current_buffer->base_buffer && ! NILP (visit)) error ("Cannot do file visiting in an indirect buffer"); @@ -4400,8 +4411,17 @@ /* For a special file, all we can do is guess. */ total = READ_BUF_SIZE; - if (NILP (visit) && total > 0) - prepare_to_modify_buffer (PT, PT, NULL); + if (NILP (visit) && inserted > 0) + { +#ifdef CLASH_DETECTION + if (!NILP (current_buffer->file_truename) + /* Make binding buffer-file-name to nil effective. */ + && !NILP (current_buffer->filename) + && SAVE_MODIFF >= MODIFF) + we_locked_file = 1; +#endif /* CLASH_DETECTION */ + prepare_to_modify_buffer (GPT, GPT, NULL); + } move_gap (PT); if (GAP_SIZE < total) @@ -4491,6 +4511,16 @@ } } + /* Now we have read all the file data into the gap. + If it was empty, undo marking the buffer modified. */ + + if (inserted == 0) + { + if (we_locked_file) + unlock_file (current_buffer->file_truename); + Vdeactivate_mark = old_Vdeactivate_mark; + } + /* Make the text read part of the buffer. */ GAP_SIZE -= inserted; GPT += inserted; @@ -6036,7 +6066,10 @@ DEFUN ("recent-auto-save-p", Frecent_auto_save_p, Srecent_auto_save_p, 0, 0, 0, - doc: /* Return t if current buffer has been auto-saved since last read in or saved. */) + doc: /* Return t if current buffer has been auto-saved recently. +More precisely, if it has been auto-saved since last read from or saved +in the visited file. If the buffer has no visited file, +then any auto-save counts as "recent". */) () { return (SAVE_MODIFF < current_buffer->auto_save_modified) ? Qt : Qnil;