diff options
author | Richard M. Stallman <[email protected]> | 1998-07-03 20:01:02 +0000 |
---|---|---|
committer | Richard M. Stallman <[email protected]> | 1998-07-03 20:01:02 +0000 |
commit | c1c4693e692e3f8cae3290e24c96d905085234fe (patch) | |
tree | 95fadb9271d7b372a24686122c950c35498a83e8 /src | |
parent | 038205144ec744d5e49ed108fce7daca8634138c (diff) |
(Ffile_regular_p) [WINDOWSNT]: Bind
`w32-get-true-file-attributes' to t while calling stat.
(Finsert_file_contents) [WINDOWSNT]: Likewise.
(Fwrite_region): Don't try seeking to end of FILENAME for
appending if not a regular file.
Diffstat (limited to 'src')
-rw-r--r-- | src/fileio.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/src/fileio.c b/src/fileio.c index 05350aa2d4..b500bbe3b5 100644 --- a/src/fileio.c +++ b/src/fileio.c @@ -206,6 +206,10 @@ Lisp_Object Vdirectory_sep_char; extern Lisp_Object Vuser_login_name; +#ifdef WINDOWSNT +extern Lisp_Object Vw32_get_true_file_attributes; +#endif + extern int minibuf_level; extern int minibuffer_auto_raise; @@ -3092,9 +3096,25 @@ This is the sort of file that holds an ordinary stream of data bytes.") absname = ENCODE_FILE (absname); +#ifdef WINDOWSNT + { + int result; + Lisp_Object tem = Vw32_get_true_file_attributes; + + /* Tell stat to use expensive method to get accurate info. */ + Vw32_get_true_file_attributes = Qt; + result = stat (XSTRING (absname)->data, &st); + Vw32_get_true_file_attributes = tem; + + if (result < 0) + return Qnil; + return (st.st_mode & S_IFMT) == S_IFREG ? Qt : Qnil; + } +#else if (stat (XSTRING (absname)->data, &st) < 0) return Qnil; return (st.st_mode & S_IFMT) == S_IFREG ? Qt : Qnil; +#endif } DEFUN ("file-modes", Ffile_modes, Sfile_modes, 1, 1, 0, @@ -3345,12 +3365,24 @@ actually used.") fd = -1; +#ifdef WINDOWSNT + { + Lisp_Object tem = Vw32_get_true_file_attributes; + + /* Tell stat to use expensive method to get accurate info. */ + Vw32_get_true_file_attributes = Qt; + total = stat (XSTRING (filename)->data, &st); + Vw32_get_true_file_attributes = tem; + } + if (total < 0) +#else #ifndef APOLLO if (stat (XSTRING (filename)->data, &st) < 0) #else if ((fd = open (XSTRING (filename)->data, O_RDONLY)) < 0 || fstat (fd, &st) < 0) #endif /* not APOLLO */ +#endif /* WINDOWSNT */ { if (fd >= 0) close (fd); badopen: @@ -4446,7 +4478,7 @@ This does code conversion according to the value of\n\ record_unwind_protect (close_file_unwind, make_number (desc)); - if (!NILP (append)) + if (!NILP (append) && !NILP (Ffile_regular_p (filename))) if (lseek (desc, 0, 2) < 0) { #ifdef CLASH_DETECTION |