Mercurial > emacs
annotate src/fileio.c @ 23323:0800a4f84757
(underlying_strftime):
Set the buffer to a nonzero value before calling
strftime, and check to see whether strftime has set the buffer to zero.
This lets us distinguish between an empty buffer and an error.
I'm installing this patch by hand now; it will be superseded whenever
the glibc sources are propagated back to fsf.org.
| author | Paul Eggert <eggert@twinsun.com> |
|---|---|
| date | Fri, 25 Sep 1998 21:40:23 +0000 |
| parents | 8682bf30d667 |
| children | b1255c3676c7 |
| rev | line source |
|---|---|
| 230 | 1 /* File IO for GNU Emacs. |
|
20707
48745ae8daa0
(Fsubstitute_in_file_name): Use unibyte_char_to_multibyte.
Richard M. Stallman <rms@gnu.org>
parents:
20651
diff
changeset
|
2 Copyright (C) 1985,86,87,88,93,94,95,96,97,1998 Free Software Foundation, Inc. |
| 230 | 3 |
| 4 This file is part of GNU Emacs. | |
| 5 | |
| 6 GNU Emacs is free software; you can redistribute it and/or modify | |
| 7 it under the terms of the GNU General Public License as published by | |
| 621 | 8 the Free Software Foundation; either version 2, or (at your option) |
| 230 | 9 any later version. |
| 10 | |
| 11 GNU Emacs is distributed in the hope that it will be useful, | |
| 12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 GNU General Public License for more details. | |
| 15 | |
| 16 You should have received a copy of the GNU General Public License | |
| 17 along with GNU Emacs; see the file COPYING. If not, write to | |
|
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14128
diff
changeset
|
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
|
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14128
diff
changeset
|
19 Boston, MA 02111-1307, USA. */ |
| 230 | 20 |
|
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
4483
diff
changeset
|
21 #include <config.h> |
| 230 | 22 |
|
16534
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
23 #if defined (USG5) || defined (BSD_SYSTEM) || defined (LINUX) |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
24 #include <fcntl.h> |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
25 #endif |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
26 |
|
18270
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
27 #include <stdio.h> |
| 230 | 28 #include <sys/types.h> |
| 29 #include <sys/stat.h> | |
| 372 | 30 |
|
6862
653504b6b5dd
[HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents:
6678
diff
changeset
|
31 #ifdef HAVE_UNISTD_H |
|
653504b6b5dd
[HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents:
6678
diff
changeset
|
32 #include <unistd.h> |
|
653504b6b5dd
[HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents:
6678
diff
changeset
|
33 #endif |
|
653504b6b5dd
[HAVE_UNISTD_H]: Include unistd.h.
Richard M. Stallman <rms@gnu.org>
parents:
6678
diff
changeset
|
34 |
|
4879
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
35 #if !defined (S_ISLNK) && defined (S_IFLNK) |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
36 # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
37 #endif |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
38 |
|
16534
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
39 #if !defined (S_ISFIFO) && defined (S_IFIFO) |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
40 # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
41 #endif |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
42 |
|
4879
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
43 #if !defined (S_ISREG) && defined (S_IFREG) |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
44 # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
45 #endif |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
46 |
| 372 | 47 #ifdef VMS |
| 564 | 48 #include "vms-pwd.h" |
| 372 | 49 #else |
| 230 | 50 #include <pwd.h> |
| 372 | 51 #endif |
| 52 | |
| 230 | 53 #include <ctype.h> |
| 372 | 54 |
| 55 #ifdef VMS | |
| 5877 | 56 #include "vmsdir.h" |
| 372 | 57 #include <perror.h> |
| 58 #include <stddef.h> | |
| 59 #include <string.h> | |
| 60 #endif | |
| 61 | |
| 230 | 62 #include <errno.h> |
| 63 | |
| 372 | 64 #ifndef vax11c |
| 230 | 65 extern int errno; |
| 66 #endif | |
| 67 | |
|
5517
8b2b6a296cda
Don't declare sys_errlist; declare strerror instead.
Roland McGrath <roland@gnu.org>
parents:
5494
diff
changeset
|
68 extern char *strerror (); |
| 230 | 69 |
| 70 #ifdef APOLLO | |
| 71 #include <sys/time.h> | |
| 72 #endif | |
| 73 | |
|
2280
bd56d208ed22
* fileio.c (HAVE_FSYNC): Define, if appropriate.
Jim Blandy <jimb@redhat.com>
parents:
2257
diff
changeset
|
74 #ifndef USG |
|
bd56d208ed22
* fileio.c (HAVE_FSYNC): Define, if appropriate.
Jim Blandy <jimb@redhat.com>
parents:
2257
diff
changeset
|
75 #ifndef VMS |
|
bd56d208ed22
* fileio.c (HAVE_FSYNC): Define, if appropriate.
Jim Blandy <jimb@redhat.com>
parents:
2257
diff
changeset
|
76 #ifndef BSD4_1 |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
77 #ifndef WINDOWSNT |
|
2280
bd56d208ed22
* fileio.c (HAVE_FSYNC): Define, if appropriate.
Jim Blandy <jimb@redhat.com>
parents:
2257
diff
changeset
|
78 #define HAVE_FSYNC |
|
bd56d208ed22
* fileio.c (HAVE_FSYNC): Define, if appropriate.
Jim Blandy <jimb@redhat.com>
parents:
2257
diff
changeset
|
79 #endif |
|
bd56d208ed22
* fileio.c (HAVE_FSYNC): Define, if appropriate.
Jim Blandy <jimb@redhat.com>
parents:
2257
diff
changeset
|
80 #endif |
|
bd56d208ed22
* fileio.c (HAVE_FSYNC): Define, if appropriate.
Jim Blandy <jimb@redhat.com>
parents:
2257
diff
changeset
|
81 #endif |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
82 #endif |
|
2280
bd56d208ed22
* fileio.c (HAVE_FSYNC): Define, if appropriate.
Jim Blandy <jimb@redhat.com>
parents:
2257
diff
changeset
|
83 |
| 230 | 84 #include "lisp.h" |
|
1299
b8337cdf2e8b
* fileio.c (Finsert_file_contents): Call offset_intervals() if
Joseph Arceneaux <jla@gnu.org>
parents:
1240
diff
changeset
|
85 #include "intervals.h" |
| 230 | 86 #include "buffer.h" |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
87 #include "charset.h" |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
88 #include "coding.h" |
| 230 | 89 #include "window.h" |
| 90 | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
91 #ifdef WINDOWSNT |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
92 #define NOMINMAX 1 |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
93 #include <windows.h> |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
94 #include <stdlib.h> |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
95 #include <fcntl.h> |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
96 #endif /* not WINDOWSNT */ |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
97 |
|
21787
ee3aed578b1d
Include msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents:
21739
diff
changeset
|
98 #ifdef MSDOS |
|
ee3aed578b1d
Include msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents:
21739
diff
changeset
|
99 #include "msdos.h" |
|
ee3aed578b1d
Include msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents:
21739
diff
changeset
|
100 #include <sys/param.h> |
|
ee3aed578b1d
Include msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents:
21739
diff
changeset
|
101 #if __DJGPP__ >= 2 |
|
ee3aed578b1d
Include msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents:
21739
diff
changeset
|
102 #include <fcntl.h> |
|
ee3aed578b1d
Include msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents:
21739
diff
changeset
|
103 #include <string.h> |
|
ee3aed578b1d
Include msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents:
21739
diff
changeset
|
104 #endif |
|
ee3aed578b1d
Include msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents:
21739
diff
changeset
|
105 #endif |
|
ee3aed578b1d
Include msdos.h after lisp.h.
Eli Zaretskii <eliz@gnu.org>
parents:
21739
diff
changeset
|
106 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
107 #ifdef DOS_NT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
108 #define CORRECT_DIR_SEPS(s) \ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
109 do { if ('/' == DIRECTORY_SEP) dostounix_filename (s); \ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
110 else unixtodos_filename (s); \ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
111 } while (0) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
112 /* On Windows, drive letters must be alphabetic - on DOS, the Netware |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
113 redirector allows the six letters between 'Z' and 'a' as well. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
114 #ifdef MSDOS |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
115 #define IS_DRIVE(x) ((x) >= 'A' && (x) <= 'z') |
|
15617
69c516d109e7
(DRIVE_LETTER) [WINDOWSNT]: Lower-case drive letters.
Miles Bader <miles@gnu.org>
parents:
15587
diff
changeset
|
116 #endif |
|
69c516d109e7
(DRIVE_LETTER) [WINDOWSNT]: Lower-case drive letters.
Miles Bader <miles@gnu.org>
parents:
15587
diff
changeset
|
117 #ifdef WINDOWSNT |
|
69c516d109e7
(DRIVE_LETTER) [WINDOWSNT]: Lower-case drive letters.
Miles Bader <miles@gnu.org>
parents:
15587
diff
changeset
|
118 #define IS_DRIVE(x) isalpha (x) |
|
69c516d109e7
(DRIVE_LETTER) [WINDOWSNT]: Lower-case drive letters.
Miles Bader <miles@gnu.org>
parents:
15587
diff
changeset
|
119 #endif |
|
15587
515819688789
(DRIVE_LETTER) [MSDOS]: Lower-case drive letters.
Miles Bader <miles@gnu.org>
parents:
15533
diff
changeset
|
120 /* Need to lower-case the drive letter, or else expanded |
|
515819688789
(DRIVE_LETTER) [MSDOS]: Lower-case drive letters.
Miles Bader <miles@gnu.org>
parents:
15533
diff
changeset
|
121 filenames will sometimes compare inequal, because |
|
515819688789
(DRIVE_LETTER) [MSDOS]: Lower-case drive letters.
Miles Bader <miles@gnu.org>
parents:
15533
diff
changeset
|
122 `expand-file-name' doesn't always down-case the drive letter. */ |
|
515819688789
(DRIVE_LETTER) [MSDOS]: Lower-case drive letters.
Miles Bader <miles@gnu.org>
parents:
15533
diff
changeset
|
123 #define DRIVE_LETTER(x) (tolower (x)) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
124 #endif |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
125 |
| 230 | 126 #ifdef VMS |
| 127 #include <file.h> | |
| 128 #include <rmsdef.h> | |
| 129 #include <fab.h> | |
| 130 #include <nam.h> | |
| 131 #endif | |
| 132 | |
| 564 | 133 #include "systime.h" |
| 230 | 134 |
| 135 #ifdef HPUX | |
| 136 #include <netio.h> | |
| 350 | 137 #ifndef HPUX8 |
|
3410
47b51faf6c4e
[HPUX9]: Don't include errnet.h.
Richard M. Stallman <rms@gnu.org>
parents:
3032
diff
changeset
|
138 #ifndef HPUX9 |
| 230 | 139 #include <errnet.h> |
| 140 #endif | |
| 350 | 141 #endif |
|
3410
47b51faf6c4e
[HPUX9]: Don't include errnet.h.
Richard M. Stallman <rms@gnu.org>
parents:
3032
diff
changeset
|
142 #endif |
| 230 | 143 |
| 144 #ifndef O_WRONLY | |
| 145 #define O_WRONLY 1 | |
| 146 #endif | |
| 147 | |
| 8597 | 148 #ifndef O_RDONLY |
| 149 #define O_RDONLY 0 | |
| 150 #endif | |
| 151 | |
| 230 | 152 #define min(a, b) ((a) < (b) ? (a) : (b)) |
| 153 #define max(a, b) ((a) > (b) ? (a) : (b)) | |
| 154 | |
| 155 /* Nonzero during writing of auto-save files */ | |
| 156 int auto_saving; | |
| 157 | |
| 158 /* Set by auto_save_1 to mode of original file so Fwrite_region will create | |
| 159 a new file with the same mode as the original */ | |
| 160 int auto_save_mode_bits; | |
| 161 | |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
162 /* Coding system for file names, or nil if none. */ |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
163 Lisp_Object Vfile_name_coding_system; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
164 |
|
21048
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
165 /* Coding system for file names used only when |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
166 Vfile_name_coding_system is nil. */ |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
167 Lisp_Object Vdefault_file_name_coding_system; |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
168 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
169 /* Alist of elements (REGEXP . HANDLER) for file names |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
170 whose I/O is done with a special handler. */ |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
171 Lisp_Object Vfile_name_handler_alist; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
172 |
|
11053
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
173 /* Format for auto-save files */ |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
174 Lisp_Object Vauto_save_file_format; |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
175 |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
176 /* Lisp functions for translating file formats */ |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
177 Lisp_Object Qformat_decode, Qformat_annotate_function; |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
178 |
|
19448
950a178e8783
(Vauto_file_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
19437
diff
changeset
|
179 /* Function to be called to decide a coding system of a reading file. */ |
|
19641
d7f2d75a09d3
(Vset_auto_coding_function): Name changed from
Kenichi Handa <handa@m17n.org>
parents:
19572
diff
changeset
|
180 Lisp_Object Vset_auto_coding_function; |
|
19448
950a178e8783
(Vauto_file_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
19437
diff
changeset
|
181 |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
182 /* Functions to be called to process text properties in inserted file. */ |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
183 Lisp_Object Vafter_insert_file_functions; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
184 |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
185 /* Functions to be called to create text property annotations for file. */ |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
186 Lisp_Object Vwrite_region_annotate_functions; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
187 |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
188 /* During build_annotations, each time an annotation function is called, |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
189 this holds the annotations made by the previous functions. */ |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
190 Lisp_Object Vwrite_region_annotations_so_far; |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
191 |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
192 /* File name in which we write a list of all our auto save files. */ |
|
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
193 Lisp_Object Vauto_save_list_file_name; |
|
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
194 |
| 230 | 195 /* Nonzero means, when reading a filename in the minibuffer, |
| 196 start out by inserting the default directory into the minibuffer. */ | |
| 197 int insert_default_directory; | |
| 198 | |
| 199 /* On VMS, nonzero means write new files with record format stmlf. | |
| 200 Zero means use var format. */ | |
| 201 int vms_stmlf_recfm; | |
| 202 | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
203 /* On NT, specifies the directory separator character, used (eg.) when |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
204 expanding file names. This can be bound to / or \. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
205 Lisp_Object Vdirectory_sep_char; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
206 |
|
16317
763b3b143ed6
(Vuser_login_name): Declared extern.
Richard M. Stallman <rms@gnu.org>
parents:
16226
diff
changeset
|
207 extern Lisp_Object Vuser_login_name; |
|
763b3b143ed6
(Vuser_login_name): Declared extern.
Richard M. Stallman <rms@gnu.org>
parents:
16226
diff
changeset
|
208 |
|
22681
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
209 #ifdef WINDOWSNT |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
210 extern Lisp_Object Vw32_get_true_file_attributes; |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
211 #endif |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
212 |
|
16317
763b3b143ed6
(Vuser_login_name): Declared extern.
Richard M. Stallman <rms@gnu.org>
parents:
16226
diff
changeset
|
213 extern int minibuf_level; |
|
763b3b143ed6
(Vuser_login_name): Declared extern.
Richard M. Stallman <rms@gnu.org>
parents:
16226
diff
changeset
|
214 |
|
18861
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
215 extern int minibuffer_auto_raise; |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
216 |
|
7041
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
217 /* These variables describe handlers that have "already" had a chance |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
218 to handle the current operation. |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
219 |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
220 Vinhibit_file_name_handlers is a list of file name handlers. |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
221 Vinhibit_file_name_operation is the operation being handled. |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
222 If we try to handle that operation, we ignore those handlers. */ |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
223 |
|
6678
e29adbacde1d
(Fdo_auto_save): Don't turn off auto save mode.
Richard M. Stallman <rms@gnu.org>
parents:
6498
diff
changeset
|
224 static Lisp_Object Vinhibit_file_name_handlers; |
|
7041
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
225 static Lisp_Object Vinhibit_file_name_operation; |
|
6678
e29adbacde1d
(Fdo_auto_save): Don't turn off auto save mode.
Richard M. Stallman <rms@gnu.org>
parents:
6498
diff
changeset
|
226 |
|
17271
e34a30952e14
(Fcopy_file): Use Qfile_date_error if can't set file date.
Richard M. Stallman <rms@gnu.org>
parents:
17114
diff
changeset
|
227 Lisp_Object Qfile_error, Qfile_already_exists, Qfile_date_error; |
| 230 | 228 |
|
863
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
229 Lisp_Object Qfile_name_history; |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
230 |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
231 Lisp_Object Qcar_less_than_car; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
232 |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
233 static int a_write P_ ((int, char *, int, int, |
|
20560
c9095cd30412
(a_write): Fix prototype.
Richard M. Stallman <rms@gnu.org>
parents:
20533
diff
changeset
|
234 Lisp_Object *, struct coding_system *)); |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
235 static int e_write P_ ((int, char *, int, struct coding_system *)); |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
236 |
|
20370
7e443cd9a63a
(report_file_error): Declare it as void.
Kenichi Handa <handa@m17n.org>
parents:
20313
diff
changeset
|
237 void |
| 230 | 238 report_file_error (string, data) |
| 239 char *string; | |
| 240 Lisp_Object data; | |
| 241 { | |
| 242 Lisp_Object errstring; | |
| 243 | |
|
5529
708b422cf8df
(report_file_error): Use strerror instead of sys_errlist.
Roland McGrath <roland@gnu.org>
parents:
5517
diff
changeset
|
244 errstring = build_string (strerror (errno)); |
| 230 | 245 |
| 246 /* System error messages are capitalized. Downcase the initial | |
| 247 unless it is followed by a slash. */ | |
| 248 if (XSTRING (errstring)->data[1] != '/') | |
| 249 XSTRING (errstring)->data[0] = DOWNCASE (XSTRING (errstring)->data[0]); | |
| 250 | |
| 251 while (1) | |
| 252 Fsignal (Qfile_error, | |
| 253 Fcons (build_string (string), Fcons (errstring, data))); | |
| 254 } | |
|
592
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
255 |
|
20313
36bbb5e0a687
(close_file_unwind): Fix return type and return nil.
Andreas Schwab <schwab@suse.de>
parents:
20224
diff
changeset
|
256 Lisp_Object |
|
592
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
257 close_file_unwind (fd) |
|
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
258 Lisp_Object fd; |
|
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
259 { |
|
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
260 close (XFASTINT (fd)); |
|
20313
36bbb5e0a687
(close_file_unwind): Fix return type and return nil.
Andreas Schwab <schwab@suse.de>
parents:
20224
diff
changeset
|
261 return Qnil; |
|
592
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
262 } |
|
6036
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
263 |
|
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
264 /* Restore point, having saved it as a marker. */ |
|
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
265 |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
266 static Lisp_Object |
|
6036
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
267 restore_point_unwind (location) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
268 Lisp_Object location; |
|
6036
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
269 { |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
270 Fgoto_char (location); |
|
6036
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
271 Fset_marker (location, Qnil, Qnil); |
|
20313
36bbb5e0a687
(close_file_unwind): Fix return type and return nil.
Andreas Schwab <schwab@suse.de>
parents:
20224
diff
changeset
|
272 return Qnil; |
|
6036
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
273 } |
| 230 | 274 |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
275 Lisp_Object Qexpand_file_name; |
|
10719
40ae63b409f4
(Fexpand_file_name): Look for a handler for defalt.
Richard M. Stallman <rms@gnu.org>
parents:
10499
diff
changeset
|
276 Lisp_Object Qsubstitute_in_file_name; |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
277 Lisp_Object Qdirectory_file_name; |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
278 Lisp_Object Qfile_name_directory; |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
279 Lisp_Object Qfile_name_nondirectory; |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
280 Lisp_Object Qunhandled_file_name_directory; |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
281 Lisp_Object Qfile_name_as_directory; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
282 Lisp_Object Qcopy_file; |
|
8227
0e6b7eeedc3b
(Fmake_directory_internal): Use Qmake_directory_internal.
Richard M. Stallman <rms@gnu.org>
parents:
8185
diff
changeset
|
283 Lisp_Object Qmake_directory_internal; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
284 Lisp_Object Qdelete_directory; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
285 Lisp_Object Qdelete_file; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
286 Lisp_Object Qrename_file; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
287 Lisp_Object Qadd_name_to_file; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
288 Lisp_Object Qmake_symbolic_link; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
289 Lisp_Object Qfile_exists_p; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
290 Lisp_Object Qfile_executable_p; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
291 Lisp_Object Qfile_readable_p; |
|
16155
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
292 Lisp_Object Qfile_writable_p; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
293 Lisp_Object Qfile_symlink_p; |
|
16155
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
294 Lisp_Object Qaccess_file; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
295 Lisp_Object Qfile_directory_p; |
|
11599
51bc10be0dc7
(Ffile_regular_p): Use Qfile_regular_p.
Richard M. Stallman <rms@gnu.org>
parents:
11426
diff
changeset
|
296 Lisp_Object Qfile_regular_p; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
297 Lisp_Object Qfile_accessible_directory_p; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
298 Lisp_Object Qfile_modes; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
299 Lisp_Object Qset_file_modes; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
300 Lisp_Object Qfile_newer_than_file_p; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
301 Lisp_Object Qinsert_file_contents; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
302 Lisp_Object Qwrite_region; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
303 Lisp_Object Qverify_visited_file_modtime; |
|
3560
95021dcb923b
(syms_of_fileio): Set up Qset_visited_file_modtime.
Richard M. Stallman <rms@gnu.org>
parents:
3415
diff
changeset
|
304 Lisp_Object Qset_visited_file_modtime; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
305 |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
306 DEFUN ("find-file-name-handler", Ffind_file_name_handler, Sfind_file_name_handler, 2, 2, 0, |
|
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
307 "Return FILENAME's handler function for OPERATION, if it has one.\n\ |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
308 Otherwise, return nil.\n\ |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
309 A file name is handled if one of the regular expressions in\n\ |
|
6678
e29adbacde1d
(Fdo_auto_save): Don't turn off auto save mode.
Richard M. Stallman <rms@gnu.org>
parents:
6498
diff
changeset
|
310 `file-name-handler-alist' matches it.\n\n\ |
|
7041
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
311 If OPERATION equals `inhibit-file-name-operation', then we ignore\n\ |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
312 any handlers that are members of `inhibit-file-name-handlers',\n\ |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
313 but we still do run any other handlers. This lets handlers\n\ |
|
6678
e29adbacde1d
(Fdo_auto_save): Don't turn off auto save mode.
Richard M. Stallman <rms@gnu.org>
parents:
6498
diff
changeset
|
314 use the standard functions without calling themselves recursively.") |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
315 (filename, operation) |
|
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
316 Lisp_Object filename, operation; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
317 { |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
318 /* This function must not munge the match data. */ |
|
7041
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
319 Lisp_Object chain, inhibited_handlers; |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
320 |
|
2895
1ed91566882a
* fileio.c (Ffind_file_name_handler): Check that FILENAME is a
Jim Blandy <jimb@redhat.com>
parents:
2741
diff
changeset
|
321 CHECK_STRING (filename, 0); |
|
1ed91566882a
* fileio.c (Ffind_file_name_handler): Check that FILENAME is a
Jim Blandy <jimb@redhat.com>
parents:
2741
diff
changeset
|
322 |
|
7041
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
323 if (EQ (operation, Vinhibit_file_name_operation)) |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
324 inhibited_handlers = Vinhibit_file_name_handlers; |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
325 else |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
326 inhibited_handlers = Qnil; |
|
6678
e29adbacde1d
(Fdo_auto_save): Don't turn off auto save mode.
Richard M. Stallman <rms@gnu.org>
parents:
6498
diff
changeset
|
327 |
|
9131
2190d1e7a69f
(Ffind_file_name_handler, Fcopy_file, Frename_file, Fadd_name_to_file,
Karl Heuer <kwzh@gnu.org>
parents:
9078
diff
changeset
|
328 for (chain = Vfile_name_handler_alist; CONSP (chain); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
329 chain = XCONS (chain)->cdr) |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
330 { |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
331 Lisp_Object elt; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
332 elt = XCONS (chain)->car; |
|
9131
2190d1e7a69f
(Ffind_file_name_handler, Fcopy_file, Frename_file, Fadd_name_to_file,
Karl Heuer <kwzh@gnu.org>
parents:
9078
diff
changeset
|
333 if (CONSP (elt)) |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
334 { |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
335 Lisp_Object string; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
336 string = XCONS (elt)->car; |
|
9131
2190d1e7a69f
(Ffind_file_name_handler, Fcopy_file, Frename_file, Fadd_name_to_file,
Karl Heuer <kwzh@gnu.org>
parents:
9078
diff
changeset
|
337 if (STRINGP (string) && fast_string_match (string, filename) >= 0) |
|
7041
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
338 { |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
339 Lisp_Object handler, tem; |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
340 |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
341 handler = XCONS (elt)->cdr; |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
342 tem = Fmemq (handler, inhibited_handlers); |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
343 if (NILP (tem)) |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
344 return handler; |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
345 } |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
346 } |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
347 |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
348 QUIT; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
349 } |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
350 return Qnil; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
351 } |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
352 |
| 230 | 353 DEFUN ("file-name-directory", Ffile_name_directory, Sfile_name_directory, |
| 354 1, 1, 0, | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
355 "Return the directory component in file name FILENAME.\n\ |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
356 Return nil if FILENAME does not include a directory.\n\ |
| 230 | 357 Otherwise return a directory spec.\n\ |
| 358 Given a Unix syntax file name, returns a string ending in slash;\n\ | |
| 359 on VMS, perhaps instead a string ending in `:', `]' or `>'.") | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
360 (filename) |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
361 Lisp_Object filename; |
| 230 | 362 { |
| 363 register unsigned char *beg; | |
| 364 register unsigned char *p; | |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
365 Lisp_Object handler; |
| 230 | 366 |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
367 CHECK_STRING (filename, 0); |
| 230 | 368 |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
369 /* If the file name has special constructs in it, |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
370 call the corresponding file handler. */ |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
371 handler = Ffind_file_name_handler (filename, Qfile_name_directory); |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
372 if (!NILP (handler)) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
373 return call2 (handler, Qfile_name_directory, filename); |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
374 |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
375 #ifdef FILE_SYSTEM_CASE |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
376 filename = FILE_SYSTEM_CASE (filename); |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
377 #endif |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
378 beg = XSTRING (filename)->data; |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
379 #ifdef DOS_NT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
380 beg = strcpy (alloca (strlen (beg) + 1), beg); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
381 #endif |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
382 p = beg + STRING_BYTES (XSTRING (filename)); |
| 230 | 383 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
384 while (p != beg && !IS_DIRECTORY_SEP (p[-1]) |
| 230 | 385 #ifdef VMS |
| 386 && p[-1] != ':' && p[-1] != ']' && p[-1] != '>' | |
| 387 #endif /* VMS */ | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
388 #ifdef DOS_NT |
|
22172
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
389 /* only recognise drive specifier at the beginning */ |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
390 && !(p[-1] == ':' |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
391 /* handle the "/:d:foo" and "/:foo" cases correctly */ |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
392 && ((p == beg + 2 && !IS_DIRECTORY_SEP (*beg)) |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
393 || (p == beg + 4 && IS_DIRECTORY_SEP (*beg)))) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
394 #endif |
| 230 | 395 ) p--; |
| 396 | |
| 397 if (p == beg) | |
| 398 return Qnil; | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
399 #ifdef DOS_NT |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
400 /* Expansion of "c:" to drive and default directory. */ |
|
22172
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
401 if (p[-1] == ':') |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
402 { |
|
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
403 /* MAXPATHLEN+1 is guaranteed to be enough space for getdefdir. */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
404 unsigned char *res = alloca (MAXPATHLEN + 1); |
|
22172
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
405 unsigned char *r = res; |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
406 |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
407 if (p == beg + 4 && IS_DIRECTORY_SEP (*beg) && beg[1] == ':') |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
408 { |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
409 strncpy (res, beg, 2); |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
410 beg += 2; |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
411 r += 2; |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
412 } |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
413 |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
414 if (getdefdir (toupper (*beg) - 'A' + 1, r)) |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
415 { |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
416 if (!IS_DIRECTORY_SEP (res[strlen (res) - 1])) |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
417 strcat (res, "/"); |
|
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
418 beg = res; |
|
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
419 p = beg + strlen (beg); |
|
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
420 } |
|
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
421 } |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
422 CORRECT_DIR_SEPS (beg); |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
423 #endif /* DOS_NT */ |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
424 |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
425 if (STRING_MULTIBYTE (filename)) |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
426 return make_string (beg, p - beg); |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
427 return make_unibyte_string (beg, p - beg); |
| 230 | 428 } |
| 429 | |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
430 DEFUN ("file-name-nondirectory", Ffile_name_nondirectory, |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
431 Sfile_name_nondirectory, 1, 1, 0, |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
432 "Return file name FILENAME sans its directory.\n\ |
| 230 | 433 For example, in a Unix-syntax file name,\n\ |
| 434 this is everything after the last slash,\n\ | |
| 435 or the entire name if it contains no slash.") | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
436 (filename) |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
437 Lisp_Object filename; |
| 230 | 438 { |
| 439 register unsigned char *beg, *p, *end; | |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
440 Lisp_Object handler; |
| 230 | 441 |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
442 CHECK_STRING (filename, 0); |
| 230 | 443 |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
444 /* If the file name has special constructs in it, |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
445 call the corresponding file handler. */ |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
446 handler = Ffind_file_name_handler (filename, Qfile_name_nondirectory); |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
447 if (!NILP (handler)) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
448 return call2 (handler, Qfile_name_nondirectory, filename); |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
449 |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
450 beg = XSTRING (filename)->data; |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
451 end = p = beg + STRING_BYTES (XSTRING (filename)); |
| 230 | 452 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
453 while (p != beg && !IS_DIRECTORY_SEP (p[-1]) |
| 230 | 454 #ifdef VMS |
| 455 && p[-1] != ':' && p[-1] != ']' && p[-1] != '>' | |
| 456 #endif /* VMS */ | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
457 #ifdef DOS_NT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
458 /* only recognise drive specifier at beginning */ |
|
22172
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
459 && !(p[-1] == ':' |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
460 /* handle the "/:d:foo" case correctly */ |
|
e0f5d2438001
(Ffile_name_directory, Ffile_name_nondirectory)
Richard M. Stallman <rms@gnu.org>
parents:
22113
diff
changeset
|
461 && (p == beg + 2 || (p == beg + 4 && IS_DIRECTORY_SEP (*beg)))) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
462 #endif |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
463 ) |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
464 p--; |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
465 |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
466 if (STRING_MULTIBYTE (filename)) |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
467 return make_string (p, end - p); |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
468 return make_unibyte_string (p, end - p); |
| 230 | 469 } |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
470 |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
471 DEFUN ("unhandled-file-name-directory", Funhandled_file_name_directory, |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
472 Sunhandled_file_name_directory, 1, 1, 0, |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
473 "Return a directly usable directory name somehow associated with FILENAME.\n\ |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
474 A `directly usable' directory name is one that may be used without the\n\ |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
475 intervention of any file handler.\n\ |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
476 If FILENAME is a directly usable file itself, return\n\ |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
477 \(file-name-directory FILENAME).\n\ |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
478 The `call-process' and `start-process' functions use this function to\n\ |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
479 get a current directory to run processes in.") |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
480 (filename) |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
481 Lisp_Object filename; |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
482 { |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
483 Lisp_Object handler; |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
484 |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
485 /* If the file name has special constructs in it, |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
486 call the corresponding file handler. */ |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
487 handler = Ffind_file_name_handler (filename, Qunhandled_file_name_directory); |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
488 if (!NILP (handler)) |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
489 return call2 (handler, Qunhandled_file_name_directory, filename); |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
490 |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
491 return Ffile_name_directory (filename); |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
492 } |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
493 |
| 230 | 494 |
| 495 char * | |
| 496 file_name_as_directory (out, in) | |
| 497 char *out, *in; | |
| 498 { | |
| 499 int size = strlen (in) - 1; | |
| 500 | |
|
20790
7fd6ce99f389
(file_name_as_directory): For an empty name, return "/".
Richard M. Stallman <rms@gnu.org>
parents:
20748
diff
changeset
|
501 strcpy (out, in); |
|
7fd6ce99f389
(file_name_as_directory): For an empty name, return "/".
Richard M. Stallman <rms@gnu.org>
parents:
20748
diff
changeset
|
502 |
|
20651
0de9f45a1db6
(Finsert_file_contents): When not decoding,
Richard M. Stallman <rms@gnu.org>
parents:
20621
diff
changeset
|
503 if (size < 0) |
|
20790
7fd6ce99f389
(file_name_as_directory): For an empty name, return "/".
Richard M. Stallman <rms@gnu.org>
parents:
20748
diff
changeset
|
504 { |
|
21543
55865851fd69
(file_name_as_directory): For empty arg, return `./'.
Karl Heuer <kwzh@gnu.org>
parents:
21522
diff
changeset
|
505 out[0] = '.'; |
|
55865851fd69
(file_name_as_directory): For empty arg, return `./'.
Karl Heuer <kwzh@gnu.org>
parents:
21522
diff
changeset
|
506 out[1] = '/'; |
|
55865851fd69
(file_name_as_directory): For empty arg, return `./'.
Karl Heuer <kwzh@gnu.org>
parents:
21522
diff
changeset
|
507 out[2] = 0; |
|
20790
7fd6ce99f389
(file_name_as_directory): For an empty name, return "/".
Richard M. Stallman <rms@gnu.org>
parents:
20748
diff
changeset
|
508 return out; |
|
7fd6ce99f389
(file_name_as_directory): For an empty name, return "/".
Richard M. Stallman <rms@gnu.org>
parents:
20748
diff
changeset
|
509 } |
| 230 | 510 |
| 511 #ifdef VMS | |
| 512 /* Is it already a directory string? */ | |
| 513 if (in[size] == ':' || in[size] == ']' || in[size] == '>') | |
| 514 return out; | |
| 515 /* Is it a VMS directory file name? If so, hack VMS syntax. */ | |
| 516 else if (! index (in, '/') | |
| 517 && ((size > 3 && ! strcmp (&in[size - 3], ".DIR")) | |
| 518 || (size > 3 && ! strcmp (&in[size - 3], ".dir")) | |
| 519 || (size > 5 && (! strncmp (&in[size - 5], ".DIR", 4) | |
| 520 || ! strncmp (&in[size - 5], ".dir", 4)) | |
| 521 && (in[size - 1] == '.' || in[size - 1] == ';') | |
| 522 && in[size] == '1'))) | |
| 523 { | |
| 524 register char *p, *dot; | |
| 525 char brack; | |
| 526 | |
| 527 /* x.dir -> [.x] | |
| 528 dir:x.dir --> dir:[x] | |
| 529 dir:[x]y.dir --> dir:[x.y] */ | |
| 530 p = in + size; | |
| 531 while (p != in && *p != ':' && *p != '>' && *p != ']') p--; | |
| 532 if (p != in) | |
| 533 { | |
| 534 strncpy (out, in, p - in); | |
| 535 out[p - in] = '\0'; | |
| 536 if (*p == ':') | |
| 537 { | |
| 538 brack = ']'; | |
| 539 strcat (out, ":["); | |
| 540 } | |
| 541 else | |
| 542 { | |
| 543 brack = *p; | |
| 544 strcat (out, "."); | |
| 545 } | |
| 546 p++; | |
| 547 } | |
| 548 else | |
| 549 { | |
| 550 brack = ']'; | |
| 551 strcpy (out, "[."); | |
| 552 } | |
| 372 | 553 dot = index (p, '.'); |
| 554 if (dot) | |
| 230 | 555 { |
| 556 /* blindly remove any extension */ | |
| 557 size = strlen (out) + (dot - p); | |
| 558 strncat (out, p, dot - p); | |
| 559 } | |
| 560 else | |
| 561 { | |
| 562 strcat (out, p); | |
| 563 size = strlen (out); | |
| 564 } | |
| 565 out[size++] = brack; | |
| 566 out[size] = '\0'; | |
| 567 } | |
| 568 #else /* not VMS */ | |
| 569 /* For Unix syntax, Append a slash if necessary */ | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
570 if (!IS_DIRECTORY_SEP (out[size])) |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
571 { |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
572 out[size + 1] = DIRECTORY_SEP; |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
573 out[size + 2] = '\0'; |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
574 } |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
575 #ifdef DOS_NT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
576 CORRECT_DIR_SEPS (out); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
577 #endif |
| 230 | 578 #endif /* not VMS */ |
| 579 return out; | |
| 580 } | |
| 581 | |
| 582 DEFUN ("file-name-as-directory", Ffile_name_as_directory, | |
| 583 Sfile_name_as_directory, 1, 1, 0, | |
| 584 "Return a string representing file FILENAME interpreted as a directory.\n\ | |
| 585 This operation exists because a directory is also a file, but its name as\n\ | |
| 586 a directory is different from its name as a file.\n\ | |
| 587 The result can be used as the value of `default-directory'\n\ | |
| 588 or passed as second argument to `expand-file-name'.\n\ | |
| 589 For a Unix-syntax file name, just appends a slash.\n\ | |
| 590 On VMS, converts \"[X]FOO.DIR\" to \"[X.FOO]\", etc.") | |
| 591 (file) | |
| 592 Lisp_Object file; | |
| 593 { | |
| 594 char *buf; | |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
595 Lisp_Object handler; |
| 230 | 596 |
| 597 CHECK_STRING (file, 0); | |
| 485 | 598 if (NILP (file)) |
| 230 | 599 return Qnil; |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
600 |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
601 /* If the file name has special constructs in it, |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
602 call the corresponding file handler. */ |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
603 handler = Ffind_file_name_handler (file, Qfile_name_as_directory); |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
604 if (!NILP (handler)) |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
605 return call2 (handler, Qfile_name_as_directory, file); |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
606 |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
607 buf = (char *) alloca (STRING_BYTES (XSTRING (file)) + 10); |
| 230 | 608 return build_string (file_name_as_directory (buf, XSTRING (file)->data)); |
| 609 } | |
| 610 | |
| 611 /* | |
| 612 * Convert from directory name to filename. | |
| 613 * On VMS: | |
| 614 * xyzzy:[mukesh.emacs] => xyzzy:[mukesh]emacs.dir.1 | |
| 615 * xyzzy:[mukesh] => xyzzy:[000000]mukesh.dir.1 | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
616 * On UNIX, it's simple: just make sure there isn't a terminating / |
| 230 | 617 |
| 618 * Value is nonzero if the string output is different from the input. | |
| 619 */ | |
| 620 | |
| 21514 | 621 int |
| 230 | 622 directory_file_name (src, dst) |
| 623 char *src, *dst; | |
| 624 { | |
| 625 long slen; | |
| 626 #ifdef VMS | |
| 627 long rlen; | |
| 628 char * ptr, * rptr; | |
| 629 char bracket; | |
| 630 struct FAB fab = cc$rms_fab; | |
| 631 struct NAM nam = cc$rms_nam; | |
| 632 char esa[NAM$C_MAXRSS]; | |
| 633 #endif /* VMS */ | |
| 634 | |
| 635 slen = strlen (src); | |
| 636 #ifdef VMS | |
| 637 if (! index (src, '/') | |
| 638 && (src[slen - 1] == ']' | |
| 639 || src[slen - 1] == ':' | |
| 640 || src[slen - 1] == '>')) | |
| 641 { | |
| 642 /* VMS style - convert [x.y.z] to [x.y]z, [x] to [000000]x */ | |
| 643 fab.fab$l_fna = src; | |
| 644 fab.fab$b_fns = slen; | |
| 645 fab.fab$l_nam = &nam; | |
| 646 fab.fab$l_fop = FAB$M_NAM; | |
| 647 | |
| 648 nam.nam$l_esa = esa; | |
| 649 nam.nam$b_ess = sizeof esa; | |
| 650 nam.nam$b_nop |= NAM$M_SYNCHK; | |
| 651 | |
| 652 /* We call SYS$PARSE to handle such things as [--] for us. */ | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
653 if (SYS$PARSE (&fab, 0, 0) == RMS$_NORMAL) |
| 230 | 654 { |
| 655 slen = nam.nam$b_esl; | |
| 656 if (esa[slen - 1] == ';' && esa[slen - 2] == '.') | |
| 657 slen -= 2; | |
| 658 esa[slen] = '\0'; | |
| 659 src = esa; | |
| 660 } | |
| 661 if (src[slen - 1] != ']' && src[slen - 1] != '>') | |
| 662 { | |
| 663 /* what about when we have logical_name:???? */ | |
| 664 if (src[slen - 1] == ':') | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
665 { /* Xlate logical name and see what we get */ |
| 230 | 666 ptr = strcpy (dst, src); /* upper case for getenv */ |
| 667 while (*ptr) | |
| 668 { | |
| 669 if ('a' <= *ptr && *ptr <= 'z') | |
| 670 *ptr -= 040; | |
| 671 ptr++; | |
| 672 } | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
673 dst[slen - 1] = 0; /* remove colon */ |
| 230 | 674 if (!(src = egetenv (dst))) |
| 675 return 0; | |
| 676 /* should we jump to the beginning of this procedure? | |
| 677 Good points: allows us to use logical names that xlate | |
| 678 to Unix names, | |
| 679 Bad points: can be a problem if we just translated to a device | |
| 680 name... | |
| 681 For now, I'll punt and always expect VMS names, and hope for | |
| 682 the best! */ | |
| 683 slen = strlen (src); | |
| 684 if (src[slen - 1] != ']' && src[slen - 1] != '>') | |
| 685 { /* no recursion here! */ | |
| 686 strcpy (dst, src); | |
| 687 return 0; | |
| 688 } | |
| 689 } | |
| 690 else | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
691 { /* not a directory spec */ |
| 230 | 692 strcpy (dst, src); |
| 693 return 0; | |
| 694 } | |
| 695 } | |
| 696 bracket = src[slen - 1]; | |
| 697 | |
| 698 /* If bracket is ']' or '>', bracket - 2 is the corresponding | |
| 699 opening bracket. */ | |
| 372 | 700 ptr = index (src, bracket - 2); |
| 701 if (ptr == 0) | |
| 230 | 702 { /* no opening bracket */ |
| 703 strcpy (dst, src); | |
| 704 return 0; | |
| 705 } | |
| 706 if (!(rptr = rindex (src, '.'))) | |
| 707 rptr = ptr; | |
| 708 slen = rptr - src; | |
| 709 strncpy (dst, src, slen); | |
| 710 dst[slen] = '\0'; | |
| 711 if (*rptr == '.') | |
| 712 { | |
| 713 dst[slen++] = bracket; | |
| 714 dst[slen] = '\0'; | |
| 715 } | |
| 716 else | |
| 717 { | |
| 718 /* If we have the top-level of a rooted directory (i.e. xx:[000000]), | |
| 719 then translate the device and recurse. */ | |
| 720 if (dst[slen - 1] == ':' | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
721 && dst[slen - 2] != ':' /* skip decnet nodes */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
722 && strcmp (src + slen, "[000000]") == 0) |
| 230 | 723 { |
| 724 dst[slen - 1] = '\0'; | |
| 725 if ((ptr = egetenv (dst)) | |
| 726 && (rlen = strlen (ptr) - 1) > 0 | |
| 727 && (ptr[rlen] == ']' || ptr[rlen] == '>') | |
| 728 && ptr[rlen - 1] == '.') | |
| 729 { | |
|
1358
aa32c275cbf9
(directory_file_name): Don't clobber the envvar
Richard M. Stallman <rms@gnu.org>
parents:
1299
diff
changeset
|
730 char * buf = (char *) alloca (strlen (ptr) + 1); |
|
aa32c275cbf9
(directory_file_name): Don't clobber the envvar
Richard M. Stallman <rms@gnu.org>
parents:
1299
diff
changeset
|
731 strcpy (buf, ptr); |
|
aa32c275cbf9
(directory_file_name): Don't clobber the envvar
Richard M. Stallman <rms@gnu.org>
parents:
1299
diff
changeset
|
732 buf[rlen - 1] = ']'; |
|
aa32c275cbf9
(directory_file_name): Don't clobber the envvar
Richard M. Stallman <rms@gnu.org>
parents:
1299
diff
changeset
|
733 buf[rlen] = '\0'; |
|
aa32c275cbf9
(directory_file_name): Don't clobber the envvar
Richard M. Stallman <rms@gnu.org>
parents:
1299
diff
changeset
|
734 return directory_file_name (buf, dst); |
| 230 | 735 } |
| 736 else | |
| 737 dst[slen - 1] = ':'; | |
| 738 } | |
| 739 strcat (dst, "[000000]"); | |
| 740 slen += 8; | |
| 741 } | |
| 742 rptr++; | |
| 743 rlen = strlen (rptr) - 1; | |
| 744 strncat (dst, rptr, rlen); | |
| 745 dst[slen + rlen] = '\0'; | |
| 746 strcat (dst, ".DIR.1"); | |
| 747 return 1; | |
| 748 } | |
| 749 #endif /* VMS */ | |
| 750 /* Process as Unix format: just remove any final slash. | |
| 751 But leave "/" unchanged; do not change it to "". */ | |
| 752 strcpy (dst, src); | |
|
11667
6945dfa38123
(directory_file_name): Add APOLLO conditional.
Richard M. Stallman <rms@gnu.org>
parents:
11658
diff
changeset
|
753 #ifdef APOLLO |
|
6945dfa38123
(directory_file_name): Add APOLLO conditional.
Richard M. Stallman <rms@gnu.org>
parents:
11658
diff
changeset
|
754 /* Handle // as root for apollo's. */ |
|
6945dfa38123
(directory_file_name): Add APOLLO conditional.
Richard M. Stallman <rms@gnu.org>
parents:
11658
diff
changeset
|
755 if ((slen > 2 && dst[slen - 1] == '/') |
|
6945dfa38123
(directory_file_name): Add APOLLO conditional.
Richard M. Stallman <rms@gnu.org>
parents:
11658
diff
changeset
|
756 || (slen > 1 && dst[0] != '/' && dst[slen - 1] == '/')) |
|
6945dfa38123
(directory_file_name): Add APOLLO conditional.
Richard M. Stallman <rms@gnu.org>
parents:
11658
diff
changeset
|
757 dst[slen - 1] = 0; |
|
6945dfa38123
(directory_file_name): Add APOLLO conditional.
Richard M. Stallman <rms@gnu.org>
parents:
11658
diff
changeset
|
758 #else |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
759 if (slen > 1 |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
760 && IS_DIRECTORY_SEP (dst[slen - 1]) |
|
12369
54271828fd4e
(directory_file_name): Don't get confused by // at end on Unix-like systems.
Richard M. Stallman <rms@gnu.org>
parents:
11878
diff
changeset
|
761 #ifdef DOS_NT |
|
54271828fd4e
(directory_file_name): Don't get confused by // at end on Unix-like systems.
Richard M. Stallman <rms@gnu.org>
parents:
11878
diff
changeset
|
762 && !IS_ANY_SEP (dst[slen - 2]) |
|
54271828fd4e
(directory_file_name): Don't get confused by // at end on Unix-like systems.
Richard M. Stallman <rms@gnu.org>
parents:
11878
diff
changeset
|
763 #endif |
|
54271828fd4e
(directory_file_name): Don't get confused by // at end on Unix-like systems.
Richard M. Stallman <rms@gnu.org>
parents:
11878
diff
changeset
|
764 ) |
| 230 | 765 dst[slen - 1] = 0; |
|
11667
6945dfa38123
(directory_file_name): Add APOLLO conditional.
Richard M. Stallman <rms@gnu.org>
parents:
11658
diff
changeset
|
766 #endif |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
767 #ifdef DOS_NT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
768 CORRECT_DIR_SEPS (dst); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
769 #endif |
| 230 | 770 return 1; |
| 771 } | |
| 772 | |
| 773 DEFUN ("directory-file-name", Fdirectory_file_name, Sdirectory_file_name, | |
| 774 1, 1, 0, | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
775 "Returns the file name of the directory named DIRECTORY.\n\ |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
776 This is the name of the file that holds the data for the directory DIRECTORY.\n\ |
| 230 | 777 This operation exists because a directory is also a file, but its name as\n\ |
| 778 a directory is different from its name as a file.\n\ | |
| 779 In Unix-syntax, this function just removes the final slash.\n\ | |
| 780 On VMS, given a VMS-syntax directory name such as \"[X.Y]\",\n\ | |
| 781 it returns a file name such as \"[X]Y.DIR.1\".") | |
| 782 (directory) | |
| 783 Lisp_Object directory; | |
| 784 { | |
| 785 char *buf; | |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
786 Lisp_Object handler; |
| 230 | 787 |
| 788 CHECK_STRING (directory, 0); | |
| 789 | |
| 485 | 790 if (NILP (directory)) |
| 230 | 791 return Qnil; |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
792 |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
793 /* If the file name has special constructs in it, |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
794 call the corresponding file handler. */ |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
795 handler = Ffind_file_name_handler (directory, Qdirectory_file_name); |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
796 if (!NILP (handler)) |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
797 return call2 (handler, Qdirectory_file_name, directory); |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
798 |
| 230 | 799 #ifdef VMS |
| 800 /* 20 extra chars is insufficient for VMS, since we might perform a | |
| 801 logical name translation. an equivalence string can be up to 255 | |
| 802 chars long, so grab that much extra space... - sss */ | |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
803 buf = (char *) alloca (STRING_BYTES (XSTRING (directory)) + 20 + 255); |
| 230 | 804 #else |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
805 buf = (char *) alloca (STRING_BYTES (XSTRING (directory)) + 20); |
| 230 | 806 #endif |
| 807 directory_file_name (XSTRING (directory)->data, buf); | |
| 808 return build_string (buf); | |
| 809 } | |
| 810 | |
|
21684
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
811 static char make_temp_name_tbl[64] = |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
812 { |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
813 'A','B','C','D','E','F','G','H', |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
814 'I','J','K','L','M','N','O','P', |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
815 'Q','R','S','T','U','V','W','X', |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
816 'Y','Z','a','b','c','d','e','f', |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
817 'g','h','i','j','k','l','m','n', |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
818 'o','p','q','r','s','t','u','v', |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
819 'w','x','y','z','0','1','2','3', |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
820 '4','5','6','7','8','9','-','_' |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
821 }; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
822 static unsigned make_temp_name_count, make_temp_name_count_initialized_p; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
823 |
| 230 | 824 DEFUN ("make-temp-name", Fmake_temp_name, Smake_temp_name, 1, 1, 0, |
| 825 "Generate temporary file name (string) starting with PREFIX (a string).\n\ | |
| 826 The Emacs process number forms part of the result,\n\ | |
|
19468
b6517e9b8e60
(Fmake_temp_name): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
19464
diff
changeset
|
827 so there is no danger of generating a name being used by another process.\n\ |
|
21684
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
828 \n\ |
|
19468
b6517e9b8e60
(Fmake_temp_name): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
19464
diff
changeset
|
829 In addition, this function makes an attempt to choose a name\n\ |
|
21684
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
830 which has no existing file. To make this work,\n\ |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
831 PREFIX should be an absolute file name.") |
| 230 | 832 (prefix) |
| 833 Lisp_Object prefix; | |
| 834 { | |
| 835 Lisp_Object val; | |
|
21684
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
836 int len; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
837 int pid; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
838 unsigned char *p, *data; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
839 char pidbuf[20]; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
840 int pidlen; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
841 |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
842 CHECK_STRING (prefix, 0); |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
843 |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
844 /* VAL is created by adding 6 characters to PREFIX. The first |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
845 three are the PID of this process, in base 64, and the second |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
846 three are incremented if the file already exists. This ensures |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
847 262144 unique file names per PID per PREFIX. */ |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
848 |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
849 pid = (int) getpid (); |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
850 |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
851 #ifdef HAVE_LONG_FILE_NAMES |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
852 sprintf (pidbuf, "%d", pid); |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
853 pidlen = strlen (pidbuf); |
|
14519
7efdb933356e
(Fmake_temp_name) [MS-DOS]: Allow upto 8 characters in
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
854 #else |
|
21684
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
855 pidbuf[0] = make_temp_name_tbl[pid & 63], pid >>= 6; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
856 pidbuf[1] = make_temp_name_tbl[pid & 63], pid >>= 6; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
857 pidbuf[2] = make_temp_name_tbl[pid & 63], pid >>= 6; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
858 pidlen = 3; |
|
14519
7efdb933356e
(Fmake_temp_name) [MS-DOS]: Allow upto 8 characters in
Richard M. Stallman <rms@gnu.org>
parents:
14186
diff
changeset
|
859 #endif |
|
21684
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
860 |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
861 len = XSTRING (prefix)->size; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
862 val = make_uninit_string (len + 3 + pidlen); |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
863 data = XSTRING (val)->data; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
864 bcopy(XSTRING (prefix)->data, data, len); |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
865 p = data + len; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
866 |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
867 bcopy (pidbuf, p, pidlen); |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
868 p += pidlen; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
869 |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
870 /* Here we try to minimize useless stat'ing when this function is |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
871 invoked many times successively with the same PREFIX. We achieve |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
872 this by initializing count to a random value, and incrementing it |
| 21917 | 873 afterwards. |
| 874 | |
| 875 We don't want make-temp-name to be called while dumping, | |
| 876 because then make_temp_name_count_initialized_p would get set | |
| 877 and then make_temp_name_count would not be set when Emacs starts. */ | |
| 878 | |
|
21684
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
879 if (!make_temp_name_count_initialized_p) |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
880 { |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
881 make_temp_name_count = (unsigned) time (NULL); |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
882 make_temp_name_count_initialized_p = 1; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
883 } |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
884 |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
885 while (1) |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
886 { |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
887 struct stat ignored; |
|
21900
fd8b439fd6c9
(Fmake_temp_name): Improve randomness of generated file names.
Richard M. Stallman <rms@gnu.org>
parents:
21787
diff
changeset
|
888 unsigned num = make_temp_name_count; |
|
21684
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
889 |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
890 p[0] = make_temp_name_tbl[num & 63], num >>= 6; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
891 p[1] = make_temp_name_tbl[num & 63], num >>= 6; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
892 p[2] = make_temp_name_tbl[num & 63], num >>= 6; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
893 |
|
21900
fd8b439fd6c9
(Fmake_temp_name): Improve randomness of generated file names.
Richard M. Stallman <rms@gnu.org>
parents:
21787
diff
changeset
|
894 /* Poor man's congruential RN generator. Replace with |
|
fd8b439fd6c9
(Fmake_temp_name): Improve randomness of generated file names.
Richard M. Stallman <rms@gnu.org>
parents:
21787
diff
changeset
|
895 ++make_temp_name_count for debugging. */ |
|
fd8b439fd6c9
(Fmake_temp_name): Improve randomness of generated file names.
Richard M. Stallman <rms@gnu.org>
parents:
21787
diff
changeset
|
896 make_temp_name_count += 25229; |
|
fd8b439fd6c9
(Fmake_temp_name): Improve randomness of generated file names.
Richard M. Stallman <rms@gnu.org>
parents:
21787
diff
changeset
|
897 make_temp_name_count %= 225307; |
|
fd8b439fd6c9
(Fmake_temp_name): Improve randomness of generated file names.
Richard M. Stallman <rms@gnu.org>
parents:
21787
diff
changeset
|
898 |
|
21684
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
899 if (stat (data, &ignored) < 0) |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
900 { |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
901 /* We want to return only if errno is ENOENT. */ |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
902 if (errno == ENOENT) |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
903 return val; |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
904 else |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
905 /* The error here is dubious, but there is little else we |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
906 can do. The alternatives are to return nil, which is |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
907 as bad as (and in many cases worse than) throwing the |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
908 error, or to ignore the error, which will likely result |
|
21900
fd8b439fd6c9
(Fmake_temp_name): Improve randomness of generated file names.
Richard M. Stallman <rms@gnu.org>
parents:
21787
diff
changeset
|
909 in looping through 225307 stat's, which is not only |
|
fd8b439fd6c9
(Fmake_temp_name): Improve randomness of generated file names.
Richard M. Stallman <rms@gnu.org>
parents:
21787
diff
changeset
|
910 dog-slow, but also useless since it will fallback to |
|
fd8b439fd6c9
(Fmake_temp_name): Improve randomness of generated file names.
Richard M. Stallman <rms@gnu.org>
parents:
21787
diff
changeset
|
911 the errow below, anyway. */ |
|
21684
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
912 report_file_error ("Cannot create temporary name for prefix `%s'", |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
913 Fcons (prefix, Qnil)); |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
914 /* not reached */ |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
915 } |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
916 } |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
917 |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
918 error ("Cannot create temporary name for prefix `%s'", |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
919 XSTRING (prefix)->data); |
|
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
920 return Qnil; |
| 230 | 921 } |
|
21684
89e327fdea93
(Fmake_temp_name): Complete rewrite.
Richard M. Stallman <rms@gnu.org>
parents:
21543
diff
changeset
|
922 |
| 230 | 923 |
| 924 DEFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
925 "Convert filename NAME to absolute, and canonicalize it.\n\ |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
926 Second arg DEFAULT-DIRECTORY is directory to start with if NAME is relative\n\ |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
927 (does not start with slash); if DEFAULT-DIRECTORY is nil or missing,\n\ |
| 230 | 928 the current buffer's value of default-directory is used.\n\ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
929 File name components that are `.' are removed, and \n\ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
930 so are file name components followed by `..', along with the `..' itself;\n\ |
| 536 | 931 note that these simplifications are done without checking the resulting\n\ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
932 file names in the file system.\n\ |
| 536 | 933 An initial `~/' expands to your home directory.\n\ |
| 934 An initial `~USER/' expands to USER's home directory.\n\ | |
| 230 | 935 See also the function `substitute-in-file-name'.") |
|
19754
380cbf03df01
(Fexpand_file_name): If default dir isn't string, use `/'.
Richard M. Stallman <rms@gnu.org>
parents:
19695
diff
changeset
|
936 (name, default_directory) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
937 Lisp_Object name, default_directory; |
| 230 | 938 { |
| 939 unsigned char *nm; | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
940 |
| 230 | 941 register unsigned char *newdir, *p, *o; |
| 942 int tlen; | |
| 943 unsigned char *target; | |
| 944 struct passwd *pw; | |
| 945 #ifdef VMS | |
| 946 unsigned char * colon = 0; | |
| 947 unsigned char * close = 0; | |
| 948 unsigned char * slash = 0; | |
| 949 unsigned char * brack = 0; | |
| 950 int lbrack = 0, rbrack = 0; | |
| 951 int dots = 0; | |
| 952 #endif /* VMS */ | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
953 #ifdef DOS_NT |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
954 int drive = 0; |
|
15109
b801c02f3e92
(Fexpand_file_name) [DOS_NT]: Keep dir sep following ~
Richard M. Stallman <rms@gnu.org>
parents:
15097
diff
changeset
|
955 int collapse_newdir = 1; |
|
21987
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
956 int is_escaped = 0; |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
957 #endif /* DOS_NT */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
958 int length; |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
959 Lisp_Object handler; |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
960 |
| 230 | 961 CHECK_STRING (name, 0); |
| 962 | |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
963 /* If the file name has special constructs in it, |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
964 call the corresponding file handler. */ |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
965 handler = Ffind_file_name_handler (name, Qexpand_file_name); |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
966 if (!NILP (handler)) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
967 return call3 (handler, Qexpand_file_name, name, default_directory); |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
968 |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
969 /* Use the buffer's default-directory if DEFAULT_DIRECTORY is omitted. */ |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
970 if (NILP (default_directory)) |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
971 default_directory = current_buffer->directory; |
|
19754
380cbf03df01
(Fexpand_file_name): If default dir isn't string, use `/'.
Richard M. Stallman <rms@gnu.org>
parents:
19695
diff
changeset
|
972 if (! STRINGP (default_directory)) |
|
380cbf03df01
(Fexpand_file_name): If default dir isn't string, use `/'.
Richard M. Stallman <rms@gnu.org>
parents:
19695
diff
changeset
|
973 default_directory = build_string ("/"); |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
974 |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
975 if (!NILP (default_directory)) |
|
10719
40ae63b409f4
(Fexpand_file_name): Look for a handler for defalt.
Richard M. Stallman <rms@gnu.org>
parents:
10499
diff
changeset
|
976 { |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
977 handler = Ffind_file_name_handler (default_directory, Qexpand_file_name); |
|
10719
40ae63b409f4
(Fexpand_file_name): Look for a handler for defalt.
Richard M. Stallman <rms@gnu.org>
parents:
10499
diff
changeset
|
978 if (!NILP (handler)) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
979 return call3 (handler, Qexpand_file_name, name, default_directory); |
|
10719
40ae63b409f4
(Fexpand_file_name): Look for a handler for defalt.
Richard M. Stallman <rms@gnu.org>
parents:
10499
diff
changeset
|
980 } |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
981 |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
982 o = XSTRING (default_directory)->data; |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
983 |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
984 /* Make sure DEFAULT_DIRECTORY is properly expanded. |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
985 It would be better to do this down below where we actually use |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
986 default_directory. Unfortunately, calling Fexpand_file_name recursively |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
987 could invoke GC, and the strings might be relocated. This would |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
988 be annoying because we have pointers into strings lying around |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
989 that would need adjusting, and people would add new pointers to |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
990 the code and forget to adjust them, resulting in intermittent bugs. |
|
2407
1c590cd84ab3
(Fexpand_file_name): Default DEFALT at beginning,
Richard M. Stallman <rms@gnu.org>
parents:
2280
diff
changeset
|
991 Putting this call here avoids all that crud. |
|
1c590cd84ab3
(Fexpand_file_name): Default DEFALT at beginning,
Richard M. Stallman <rms@gnu.org>
parents:
2280
diff
changeset
|
992 |
|
1c590cd84ab3
(Fexpand_file_name): Default DEFALT at beginning,
Richard M. Stallman <rms@gnu.org>
parents:
2280
diff
changeset
|
993 The EQ test avoids infinite recursion. */ |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
994 if (! NILP (default_directory) && !EQ (default_directory, name) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
995 /* Save time in some common cases - as long as default_directory |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
996 is not relative, it can be canonicalized with name below (if it |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
997 is needed at all) without requiring it to be expanded now. */ |
|
14697
5a7714d4748e
(Fexpand_file_name): Fix confusion in detecting
Richard M. Stallman <rms@gnu.org>
parents:
14616
diff
changeset
|
998 #ifdef DOS_NT |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
999 /* Detect MSDOS file names with drive specifiers. */ |
|
21987
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1000 && ! (IS_DRIVE (o[0]) && IS_DEVICE_SEP (o[1]) && IS_DIRECTORY_SEP (o[2])) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1001 #ifdef WINDOWSNT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1002 /* Detect Windows file names in UNC format. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1003 && ! (IS_DIRECTORY_SEP (o[0]) && IS_DIRECTORY_SEP (o[1])) |
|
14697
5a7714d4748e
(Fexpand_file_name): Fix confusion in detecting
Richard M. Stallman <rms@gnu.org>
parents:
14616
diff
changeset
|
1004 #endif |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1005 #else /* not DOS_NT */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1006 /* Detect Unix absolute file names (/... alone is not absolute on |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1007 DOS or Windows). */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1008 && ! (IS_DIRECTORY_SEP (o[0])) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1009 #endif /* not DOS_NT */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1010 ) |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1011 { |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1012 struct gcpro gcpro1; |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1013 |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1014 GCPRO1 (name); |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1015 default_directory = Fexpand_file_name (default_directory, Qnil); |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1016 UNGCPRO; |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1017 } |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1018 |
| 230 | 1019 #ifdef VMS |
| 1020 /* Filenames on VMS are always upper case. */ | |
| 1021 name = Fupcase (name); | |
| 1022 #endif | |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1023 #ifdef FILE_SYSTEM_CASE |
|
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1024 name = FILE_SYSTEM_CASE (name); |
|
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1025 #endif |
| 230 | 1026 |
| 1027 nm = XSTRING (name)->data; | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1028 |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1029 #ifdef DOS_NT |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1030 /* We will force directory separators to be either all \ or /, so make |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1031 a local copy to modify, even if there ends up being no change. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1032 nm = strcpy (alloca (strlen (nm) + 1), nm); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1033 |
|
21987
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1034 /* Note if special escape prefix is present, but remove for now. */ |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1035 if (nm[0] == '/' && nm[1] == ':') |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1036 { |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1037 is_escaped = 1; |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1038 nm += 2; |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1039 } |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1040 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1041 /* Find and remove drive specifier if present; this makes nm absolute |
|
21987
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1042 even if the rest of the name appears to be relative. Only look for |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1043 drive specifier at the beginning. */ |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1044 if (IS_DRIVE (nm[0]) && IS_DEVICE_SEP (nm[1])) |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1045 { |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1046 drive = nm[0]; |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1047 nm += 2; |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1048 } |
|
19695
d28bbba0fcd0
(Fexpand_file_name) [WINDOWSNT]: When stripping
Geoff Voelker <voelker@cs.washington.edu>
parents:
19664
diff
changeset
|
1049 |
|
d28bbba0fcd0
(Fexpand_file_name) [WINDOWSNT]: When stripping
Geoff Voelker <voelker@cs.washington.edu>
parents:
19664
diff
changeset
|
1050 #ifdef WINDOWSNT |
|
d28bbba0fcd0
(Fexpand_file_name) [WINDOWSNT]: When stripping
Geoff Voelker <voelker@cs.washington.edu>
parents:
19664
diff
changeset
|
1051 /* If we see "c://somedir", we want to strip the first slash after the |
|
d28bbba0fcd0
(Fexpand_file_name) [WINDOWSNT]: When stripping
Geoff Voelker <voelker@cs.washington.edu>
parents:
19664
diff
changeset
|
1052 colon when stripping the drive letter. Otherwise, this expands to |
|
d28bbba0fcd0
(Fexpand_file_name) [WINDOWSNT]: When stripping
Geoff Voelker <voelker@cs.washington.edu>
parents:
19664
diff
changeset
|
1053 "//somedir". */ |
|
d28bbba0fcd0
(Fexpand_file_name) [WINDOWSNT]: When stripping
Geoff Voelker <voelker@cs.washington.edu>
parents:
19664
diff
changeset
|
1054 if (drive && IS_DIRECTORY_SEP (nm[0]) && IS_DIRECTORY_SEP (nm[1])) |
|
d28bbba0fcd0
(Fexpand_file_name) [WINDOWSNT]: When stripping
Geoff Voelker <voelker@cs.washington.edu>
parents:
19664
diff
changeset
|
1055 nm++; |
|
d28bbba0fcd0
(Fexpand_file_name) [WINDOWSNT]: When stripping
Geoff Voelker <voelker@cs.washington.edu>
parents:
19664
diff
changeset
|
1056 #endif /* WINDOWSNT */ |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1057 #endif /* DOS_NT */ |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1058 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1059 #ifdef WINDOWSNT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1060 /* Discard any previous drive specifier if nm is now in UNC format. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1061 if (IS_DIRECTORY_SEP (nm[0]) && IS_DIRECTORY_SEP (nm[1])) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1062 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1063 drive = 0; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1064 } |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1065 #endif |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1066 |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1067 /* If nm is absolute, look for /./ or /../ sequences; if none are |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1068 found, we can probably return right away. We will avoid allocating |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1069 a new string if name is already fully expanded. */ |
| 230 | 1070 if ( |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1071 IS_DIRECTORY_SEP (nm[0]) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1072 #ifdef MSDOS |
|
21987
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1073 && drive && !is_escaped |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1074 #endif |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1075 #ifdef WINDOWSNT |
|
21987
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1076 && (drive || IS_DIRECTORY_SEP (nm[1])) && !is_escaped |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1077 #endif |
| 230 | 1078 #ifdef VMS |
| 1079 || index (nm, ':') | |
| 1080 #endif /* VMS */ | |
| 1081 ) | |
| 1082 { | |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1083 /* If it turns out that the filename we want to return is just a |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1084 suffix of FILENAME, we don't need to go through and edit |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1085 things; we just need to construct a new string using data |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1086 starting at the middle of FILENAME. If we set lose to a |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1087 non-zero value, that means we've discovered that we can't do |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1088 that cool trick. */ |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1089 int lose = 0; |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
1090 |
| 230 | 1091 p = nm; |
| 1092 while (*p) | |
| 1093 { | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1094 /* Since we know the name is absolute, we can assume that each |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1095 element starts with a "/". */ |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1096 |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1097 /* "." and ".." are hairy. */ |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1098 if (IS_DIRECTORY_SEP (p[0]) |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1099 && p[1] == '.' |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1100 && (IS_DIRECTORY_SEP (p[2]) |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1101 || p[2] == 0 |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1102 || (p[2] == '.' && (IS_DIRECTORY_SEP (p[3]) |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1103 || p[3] == 0)))) |
| 230 | 1104 lose = 1; |
| 1105 #ifdef VMS | |
| 1106 if (p[0] == '\\') | |
| 1107 lose = 1; | |
| 1108 if (p[0] == '/') { | |
| 1109 /* if dev:[dir]/, move nm to / */ | |
| 1110 if (!slash && p > nm && (brack || colon)) { | |
| 1111 nm = (brack ? brack + 1 : colon + 1); | |
| 1112 lbrack = rbrack = 0; | |
| 1113 brack = 0; | |
| 1114 colon = 0; | |
| 1115 } | |
| 1116 slash = p; | |
| 1117 } | |
| 1118 if (p[0] == '-') | |
| 1119 #ifndef VMS4_4 | |
| 1120 /* VMS pre V4.4,convert '-'s in filenames. */ | |
| 1121 if (lbrack == rbrack) | |
| 1122 { | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1123 if (dots < 2) /* this is to allow negative version numbers */ |
| 230 | 1124 p[0] = '_'; |
| 1125 } | |
| 1126 else | |
| 1127 #endif /* VMS4_4 */ | |
| 1128 if (lbrack > rbrack && | |
| 1129 ((p[-1] == '.' || p[-1] == '[' || p[-1] == '<') && | |
| 1130 (p[1] == '.' || p[1] == ']' || p[1] == '>'))) | |
| 1131 lose = 1; | |
| 1132 #ifndef VMS4_4 | |
| 1133 else | |
| 1134 p[0] = '_'; | |
| 1135 #endif /* VMS4_4 */ | |
| 1136 /* count open brackets, reset close bracket pointer */ | |
| 1137 if (p[0] == '[' || p[0] == '<') | |
| 1138 lbrack++, brack = 0; | |
| 1139 /* count close brackets, set close bracket pointer */ | |
| 1140 if (p[0] == ']' || p[0] == '>') | |
| 1141 rbrack++, brack = p; | |
| 1142 /* detect ][ or >< */ | |
| 1143 if ((p[0] == ']' || p[0] == '>') && (p[1] == '[' || p[1] == '<')) | |
| 1144 lose = 1; | |
| 1145 if ((p[0] == ':' || p[0] == ']' || p[0] == '>') && p[1] == '~') | |
| 1146 nm = p + 1, lose = 1; | |
| 1147 if (p[0] == ':' && (colon || slash)) | |
| 1148 /* if dev1:[dir]dev2:, move nm to dev2: */ | |
| 1149 if (brack) | |
| 1150 { | |
| 1151 nm = brack + 1; | |
| 1152 brack = 0; | |
| 1153 } | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1154 /* if /name/dev:, move nm to dev: */ |
| 230 | 1155 else if (slash) |
| 1156 nm = slash + 1; | |
| 1157 /* if node::dev:, move colon following dev */ | |
| 1158 else if (colon && colon[-1] == ':') | |
| 1159 colon = p; | |
| 1160 /* if dev1:dev2:, move nm to dev2: */ | |
| 1161 else if (colon && colon[-1] != ':') | |
| 1162 { | |
| 1163 nm = colon + 1; | |
| 1164 colon = 0; | |
| 1165 } | |
| 1166 if (p[0] == ':' && !colon) | |
| 1167 { | |
| 1168 if (p[1] == ':') | |
| 1169 p++; | |
| 1170 colon = p; | |
| 1171 } | |
| 1172 if (lbrack == rbrack) | |
| 1173 if (p[0] == ';') | |
| 1174 dots = 2; | |
| 1175 else if (p[0] == '.') | |
| 1176 dots++; | |
| 1177 #endif /* VMS */ | |
| 1178 p++; | |
| 1179 } | |
| 1180 if (!lose) | |
| 1181 { | |
| 1182 #ifdef VMS | |
| 1183 if (index (nm, '/')) | |
| 1184 return build_string (sys_translate_unix (nm)); | |
| 1185 #endif /* VMS */ | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1186 #ifdef DOS_NT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1187 /* Make sure directories are all separated with / or \ as |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1188 desired, but avoid allocation of a new string when not |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1189 required. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1190 CORRECT_DIR_SEPS (nm); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1191 #ifdef WINDOWSNT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1192 if (IS_DIRECTORY_SEP (nm[1])) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1193 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1194 if (strcmp (nm, XSTRING (name)->data) != 0) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1195 name = build_string (nm); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1196 } |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1197 else |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1198 #endif |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1199 /* drive must be set, so this is okay */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1200 if (strcmp (nm - 2, XSTRING (name)->data) != 0) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1201 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1202 name = make_string (nm - 2, p - nm + 2); |
|
15324
6fd4e01fd332
(DRIVE_LETTER): [DOS_NT] New macro.
Richard M. Stallman <rms@gnu.org>
parents:
15313
diff
changeset
|
1203 XSTRING (name)->data[0] = DRIVE_LETTER (drive); |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1204 XSTRING (name)->data[1] = ':'; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1205 } |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1206 return name; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1207 #else /* not DOS_NT */ |
| 230 | 1208 if (nm == XSTRING (name)->data) |
| 1209 return name; | |
| 1210 return build_string (nm); | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1211 #endif /* not DOS_NT */ |
| 230 | 1212 } |
| 1213 } | |
| 1214 | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1215 /* At this point, nm might or might not be an absolute file name. We |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1216 need to expand ~ or ~user if present, otherwise prefix nm with |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1217 default_directory if nm is not absolute, and finally collapse /./ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1218 and /foo/../ sequences. |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1219 |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1220 We set newdir to be the appropriate prefix if one is needed: |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1221 - the relevant user directory if nm starts with ~ or ~user |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1222 - the specified drive's working dir (DOS/NT only) if nm does not |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1223 start with / |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1224 - the value of default_directory. |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1225 |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1226 Note that these prefixes are not guaranteed to be absolute (except |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1227 for the working dir of a drive). Therefore, to ensure we always |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1228 return an absolute name, if the final prefix is not absolute we |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1229 append it to the current working directory. */ |
| 230 | 1230 |
| 1231 newdir = 0; | |
| 1232 | |
| 1233 if (nm[0] == '~') /* prefix ~ */ | |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1234 { |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1235 if (IS_DIRECTORY_SEP (nm[1]) |
| 230 | 1236 #ifdef VMS |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1237 || nm[1] == ':' |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1238 #endif /* VMS */ |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1239 || nm[1] == 0) /* ~ by itself */ |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1240 { |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1241 if (!(newdir = (unsigned char *) egetenv ("HOME"))) |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1242 newdir = (unsigned char *) ""; |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1243 nm++; |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1244 #ifdef DOS_NT |
|
15109
b801c02f3e92
(Fexpand_file_name) [DOS_NT]: Keep dir sep following ~
Richard M. Stallman <rms@gnu.org>
parents:
15097
diff
changeset
|
1245 collapse_newdir = 0; |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1246 #endif |
| 230 | 1247 #ifdef VMS |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1248 nm++; /* Don't leave the slash in nm. */ |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1249 #endif /* VMS */ |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1250 } |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1251 else /* ~user/filename */ |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1252 { |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1253 for (p = nm; *p && (!IS_DIRECTORY_SEP (*p) |
| 230 | 1254 #ifdef VMS |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1255 && *p != ':' |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1256 #endif /* VMS */ |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1257 ); p++); |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1258 o = (unsigned char *) alloca (p - nm + 1); |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1259 bcopy ((char *) nm, o, p - nm); |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1260 o [p - nm] = 0; |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1261 |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1262 pw = (struct passwd *) getpwnam (o + 1); |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1263 if (pw) |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1264 { |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1265 newdir = (unsigned char *) pw -> pw_dir; |
| 230 | 1266 #ifdef VMS |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1267 nm = p + 1; /* skip the terminator */ |
| 230 | 1268 #else |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1269 nm = p; |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1270 #ifdef DOS_NT |
|
15109
b801c02f3e92
(Fexpand_file_name) [DOS_NT]: Keep dir sep following ~
Richard M. Stallman <rms@gnu.org>
parents:
15097
diff
changeset
|
1271 collapse_newdir = 0; |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1272 #endif |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1273 #endif /* VMS */ |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1274 } |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1275 |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1276 /* If we don't find a user of that name, leave the name |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1277 unchanged; don't move nm forward to p. */ |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1278 } |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1279 } |
| 230 | 1280 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1281 #ifdef DOS_NT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1282 /* On DOS and Windows, nm is absolute if a drive name was specified; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1283 use the drive's current directory as the prefix if needed. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1284 if (!newdir && drive) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1285 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1286 /* Get default directory if needed to make nm absolute. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1287 if (!IS_DIRECTORY_SEP (nm[0])) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1288 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1289 newdir = alloca (MAXPATHLEN + 1); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1290 if (!getdefdir (toupper (drive) - 'A' + 1, newdir)) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1291 newdir = NULL; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1292 } |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1293 if (!newdir) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1294 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1295 /* Either nm starts with /, or drive isn't mounted. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1296 newdir = alloca (4); |
|
15324
6fd4e01fd332
(DRIVE_LETTER): [DOS_NT] New macro.
Richard M. Stallman <rms@gnu.org>
parents:
15313
diff
changeset
|
1297 newdir[0] = DRIVE_LETTER (drive); |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1298 newdir[1] = ':'; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1299 newdir[2] = '/'; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1300 newdir[3] = 0; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1301 } |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1302 } |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1303 #endif /* DOS_NT */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1304 |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1305 /* Finally, if no prefix has been specified and nm is not absolute, |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1306 then it must be expanded relative to default_directory. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1307 |
|
15124
b2c682fcd3ef
(Fexpand_file_name) [DOS_NT]: Correct the `if' clause
Richard M. Stallman <rms@gnu.org>
parents:
15109
diff
changeset
|
1308 if (1 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1309 #ifndef DOS_NT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1310 /* /... alone is not absolute on DOS and Windows. */ |
|
15124
b2c682fcd3ef
(Fexpand_file_name) [DOS_NT]: Correct the `if' clause
Richard M. Stallman <rms@gnu.org>
parents:
15109
diff
changeset
|
1311 && !IS_DIRECTORY_SEP (nm[0]) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1312 #endif |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1313 #ifdef WINDOWSNT |
|
15124
b2c682fcd3ef
(Fexpand_file_name) [DOS_NT]: Correct the `if' clause
Richard M. Stallman <rms@gnu.org>
parents:
15109
diff
changeset
|
1314 && !(IS_DIRECTORY_SEP (nm[0]) && IS_DIRECTORY_SEP (nm[1])) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1315 #endif |
| 230 | 1316 #ifdef VMS |
| 1317 && !index (nm, ':') | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1318 #endif |
| 230 | 1319 && !newdir) |
| 1320 { | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1321 newdir = XSTRING (default_directory)->data; |
|
21987
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1322 #ifdef DOS_NT |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1323 /* Note if special escape prefix is present, but remove for now. */ |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1324 if (newdir[0] == '/' && newdir[1] == ':') |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1325 { |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1326 is_escaped = 1; |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1327 newdir += 2; |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1328 } |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1329 #endif |
| 230 | 1330 } |
| 1331 | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1332 #ifdef DOS_NT |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1333 if (newdir) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1334 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1335 /* First ensure newdir is an absolute name. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1336 if ( |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1337 /* Detect MSDOS file names with drive specifiers. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1338 ! (IS_DRIVE (newdir[0]) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1339 && IS_DEVICE_SEP (newdir[1]) && IS_DIRECTORY_SEP (newdir[2])) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1340 #ifdef WINDOWSNT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1341 /* Detect Windows file names in UNC format. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1342 && ! (IS_DIRECTORY_SEP (newdir[0]) && IS_DIRECTORY_SEP (newdir[1])) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1343 #endif |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1344 ) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1345 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1346 /* Effectively, let newdir be (expand-file-name newdir cwd). |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1347 Because of the admonition against calling expand-file-name |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1348 when we have pointers into lisp strings, we accomplish this |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1349 indirectly by prepending newdir to nm if necessary, and using |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1350 cwd (or the wd of newdir's drive) as the new newdir. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1351 |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1352 if (IS_DRIVE (newdir[0]) && newdir[1] == ':') |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1353 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1354 drive = newdir[0]; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1355 newdir += 2; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1356 } |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1357 if (!IS_DIRECTORY_SEP (nm[0])) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1358 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1359 char * tmp = alloca (strlen (newdir) + strlen (nm) + 2); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1360 file_name_as_directory (tmp, newdir); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1361 strcat (tmp, nm); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1362 nm = tmp; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1363 } |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1364 newdir = alloca (MAXPATHLEN + 1); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1365 if (drive) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1366 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1367 if (!getdefdir (toupper (drive) - 'A' + 1, newdir)) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1368 newdir = "/"; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1369 } |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1370 else |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1371 getwd (newdir); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1372 } |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1373 |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1374 /* Strip off drive name from prefix, if present. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1375 if (IS_DRIVE (newdir[0]) && newdir[1] == ':') |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1376 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1377 drive = newdir[0]; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1378 newdir += 2; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1379 } |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1380 |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1381 /* Keep only a prefix from newdir if nm starts with slash |
|
19754
380cbf03df01
(Fexpand_file_name): If default dir isn't string, use `/'.
Richard M. Stallman <rms@gnu.org>
parents:
19695
diff
changeset
|
1382 (//server/share for UNC, nothing otherwise). */ |
|
15109
b801c02f3e92
(Fexpand_file_name) [DOS_NT]: Keep dir sep following ~
Richard M. Stallman <rms@gnu.org>
parents:
15097
diff
changeset
|
1383 if (IS_DIRECTORY_SEP (nm[0]) && collapse_newdir) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1384 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1385 #ifdef WINDOWSNT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1386 if (IS_DIRECTORY_SEP (newdir[0]) && IS_DIRECTORY_SEP (newdir[1])) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1387 { |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1388 newdir = strcpy (alloca (strlen (newdir) + 1), newdir); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1389 p = newdir + 2; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1390 while (*p && !IS_DIRECTORY_SEP (*p)) p++; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1391 p++; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1392 while (*p && !IS_DIRECTORY_SEP (*p)) p++; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1393 *p = 0; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1394 } |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1395 else |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1396 #endif |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1397 newdir = ""; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1398 } |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1399 } |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1400 #endif /* DOS_NT */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1401 |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1402 if (newdir) |
| 372 | 1403 { |
|
15313
0fad77a676b7
(Fexpand_file_name) [WINDOWSNT]: Don't strip trailing /
Richard M. Stallman <rms@gnu.org>
parents:
15124
diff
changeset
|
1404 /* Get rid of any slash at the end of newdir, unless newdir is |
|
21987
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1405 just / or // (an incomplete UNC name). */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1406 length = strlen (newdir); |
|
21987
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1407 if (length > 1 && IS_DIRECTORY_SEP (newdir[length - 1]) |
|
15313
0fad77a676b7
(Fexpand_file_name) [WINDOWSNT]: Don't strip trailing /
Richard M. Stallman <rms@gnu.org>
parents:
15124
diff
changeset
|
1408 #ifdef WINDOWSNT |
|
0fad77a676b7
(Fexpand_file_name) [WINDOWSNT]: Don't strip trailing /
Richard M. Stallman <rms@gnu.org>
parents:
15124
diff
changeset
|
1409 && !(length == 2 && IS_DIRECTORY_SEP (newdir[0])) |
|
0fad77a676b7
(Fexpand_file_name) [WINDOWSNT]: Don't strip trailing /
Richard M. Stallman <rms@gnu.org>
parents:
15124
diff
changeset
|
1410 #endif |
|
0fad77a676b7
(Fexpand_file_name) [WINDOWSNT]: Don't strip trailing /
Richard M. Stallman <rms@gnu.org>
parents:
15124
diff
changeset
|
1411 ) |
| 372 | 1412 { |
| 1413 unsigned char *temp = (unsigned char *) alloca (length); | |
| 1414 bcopy (newdir, temp, length - 1); | |
| 1415 temp[length - 1] = 0; | |
| 1416 newdir = temp; | |
| 1417 } | |
| 1418 tlen = length + 1; | |
| 1419 } | |
| 1420 else | |
| 1421 tlen = 0; | |
| 230 | 1422 |
| 372 | 1423 /* Now concatenate the directory and name to new space in the stack frame */ |
| 1424 tlen += strlen (nm) + 1; | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1425 #ifdef DOS_NT |
|
21987
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1426 /* Reserve space for drive specifier and escape prefix, since either |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1427 or both may need to be inserted. (The Microsoft x86 compiler |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1428 produces incorrect code if the following two lines are combined.) */ |
|
21987
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1429 target = (unsigned char *) alloca (tlen + 4); |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1430 target += 4; |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1431 #else /* not DOS_NT */ |
| 230 | 1432 target = (unsigned char *) alloca (tlen); |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1433 #endif /* not DOS_NT */ |
| 230 | 1434 *target = 0; |
| 1435 | |
| 1436 if (newdir) | |
| 1437 { | |
| 1438 #ifndef VMS | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1439 if (nm[0] == 0 || IS_DIRECTORY_SEP (nm[0])) |
|
22106
f4a52ea42920
(Fexpand_file_name) [WINDOWSNT]: Be careful not to
Richard M. Stallman <rms@gnu.org>
parents:
22056
diff
changeset
|
1440 { |
|
22113
be43fb8acb62
(Fexpand_file_name): Change conditional
Richard M. Stallman <rms@gnu.org>
parents:
22106
diff
changeset
|
1441 #ifdef DOS_NT |
|
22106
f4a52ea42920
(Fexpand_file_name) [WINDOWSNT]: Be careful not to
Richard M. Stallman <rms@gnu.org>
parents:
22056
diff
changeset
|
1442 /* If newdir is effectively "C:/", then the drive letter will have |
|
f4a52ea42920
(Fexpand_file_name) [WINDOWSNT]: Be careful not to
Richard M. Stallman <rms@gnu.org>
parents:
22056
diff
changeset
|
1443 been stripped and newdir will be "/". Concatenating with an |
|
f4a52ea42920
(Fexpand_file_name) [WINDOWSNT]: Be careful not to
Richard M. Stallman <rms@gnu.org>
parents:
22056
diff
changeset
|
1444 absolute directory in nm produces "//", which will then be |
|
f4a52ea42920
(Fexpand_file_name) [WINDOWSNT]: Be careful not to
Richard M. Stallman <rms@gnu.org>
parents:
22056
diff
changeset
|
1445 incorrectly treated as a network share. Ignore newdir in |
|
f4a52ea42920
(Fexpand_file_name) [WINDOWSNT]: Be careful not to
Richard M. Stallman <rms@gnu.org>
parents:
22056
diff
changeset
|
1446 this case (keeping the drive letter). */ |
|
f4a52ea42920
(Fexpand_file_name) [WINDOWSNT]: Be careful not to
Richard M. Stallman <rms@gnu.org>
parents:
22056
diff
changeset
|
1447 if (!(drive && nm[0] && IS_DIRECTORY_SEP (newdir[0]) |
|
f4a52ea42920
(Fexpand_file_name) [WINDOWSNT]: Be careful not to
Richard M. Stallman <rms@gnu.org>
parents:
22056
diff
changeset
|
1448 && newdir[1] == '\0')) |
|
f4a52ea42920
(Fexpand_file_name) [WINDOWSNT]: Be careful not to
Richard M. Stallman <rms@gnu.org>
parents:
22056
diff
changeset
|
1449 #endif |
|
f4a52ea42920
(Fexpand_file_name) [WINDOWSNT]: Be careful not to
Richard M. Stallman <rms@gnu.org>
parents:
22056
diff
changeset
|
1450 strcpy (target, newdir); |
|
f4a52ea42920
(Fexpand_file_name) [WINDOWSNT]: Be careful not to
Richard M. Stallman <rms@gnu.org>
parents:
22056
diff
changeset
|
1451 } |
| 230 | 1452 else |
| 1453 #endif | |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1454 file_name_as_directory (target, newdir); |
| 230 | 1455 } |
| 1456 | |
| 1457 strcat (target, nm); | |
| 1458 #ifdef VMS | |
| 1459 if (index (target, '/')) | |
| 1460 strcpy (target, sys_translate_unix (target)); | |
| 1461 #endif /* VMS */ | |
| 1462 | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1463 /* ASSERT (IS_DIRECTORY_SEP (target[0])) if not VMS */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1464 |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1465 /* Now canonicalize by removing /. and /foo/.. if they appear. */ |
| 230 | 1466 |
| 1467 p = target; | |
| 1468 o = target; | |
| 1469 | |
| 1470 while (*p) | |
| 1471 { | |
| 1472 #ifdef VMS | |
| 1473 if (*p != ']' && *p != '>' && *p != '-') | |
| 1474 { | |
| 1475 if (*p == '\\') | |
| 1476 p++; | |
| 1477 *o++ = *p++; | |
| 1478 } | |
| 1479 else if ((p[0] == ']' || p[0] == '>') && p[0] == p[1] + 2) | |
| 1480 /* brackets are offset from each other by 2 */ | |
| 1481 { | |
| 1482 p += 2; | |
| 1483 if (*p != '.' && *p != '-' && o[-1] != '.') | |
| 1484 /* convert [foo][bar] to [bar] */ | |
| 1485 while (o[-1] != '[' && o[-1] != '<') | |
| 1486 o--; | |
| 1487 else if (*p == '-' && *o != '.') | |
| 1488 *--p = '.'; | |
| 1489 } | |
| 1490 else if (p[0] == '-' && o[-1] == '.' && | |
| 1491 (p[1] == '.' || p[1] == ']' || p[1] == '>')) | |
| 1492 /* flush .foo.- ; leave - if stopped by '[' or '<' */ | |
| 1493 { | |
| 1494 do | |
| 1495 o--; | |
| 1496 while (o[-1] != '.' && o[-1] != '[' && o[-1] != '<'); | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1497 if (p[1] == '.') /* foo.-.bar ==> bar. */ |
| 230 | 1498 p += 2; |
| 1499 else if (o[-1] == '.') /* '.foo.-]' ==> ']' */ | |
| 1500 p++, o--; | |
| 1501 /* else [foo.-] ==> [-] */ | |
| 1502 } | |
| 1503 else | |
| 1504 { | |
| 1505 #ifndef VMS4_4 | |
| 1506 if (*p == '-' && | |
| 1507 o[-1] != '[' && o[-1] != '<' && o[-1] != '.' && | |
| 1508 p[1] != ']' && p[1] != '>' && p[1] != '.') | |
| 1509 *p = '_'; | |
| 1510 #endif /* VMS4_4 */ | |
| 1511 *o++ = *p++; | |
| 1512 } | |
| 1513 #else /* not VMS */ | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1514 if (!IS_DIRECTORY_SEP (*p)) |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1515 { |
| 230 | 1516 *o++ = *p++; |
| 1517 } | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1518 else if (IS_DIRECTORY_SEP (p[0]) |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1519 && p[1] == '.' |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1520 && (IS_DIRECTORY_SEP (p[2]) |
|
1589
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1521 || p[2] == 0)) |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1522 { |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1523 /* If "/." is the entire filename, keep the "/". Otherwise, |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1524 just delete the whole "/.". */ |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1525 if (o == target && p[2] == '\0') |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1526 *o++ = *p; |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1527 p += 2; |
|
6168f42d716c
* fileio.c (Fexpand_file_name): Don't fiddle with "/." if it's the
Jim Blandy <jimb@redhat.com>
parents:
1536
diff
changeset
|
1528 } |
|
11426
6502c07121b7
(Fexpand_file_name): Use IS_DIRECTORY_SEP instead of
Karl Heuer <kwzh@gnu.org>
parents:
11392
diff
changeset
|
1529 else if (IS_DIRECTORY_SEP (p[0]) && p[1] == '.' && p[2] == '.' |
| 230 | 1530 /* `/../' is the "superroot" on certain file systems. */ |
| 1531 && o != target | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1532 && (IS_DIRECTORY_SEP (p[3]) || p[3] == 0)) |
| 230 | 1533 { |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1534 while (o != target && (--o) && !IS_DIRECTORY_SEP (*o)) |
| 230 | 1535 ; |
|
17503
ba848dceb1c9
(Fexpand_file_name): Fix expansion of "/foo/../".
Richard M. Stallman <rms@gnu.org>
parents:
17396
diff
changeset
|
1536 /* Keep initial / only if this is the whole name. */ |
|
ba848dceb1c9
(Fexpand_file_name): Fix expansion of "/foo/../".
Richard M. Stallman <rms@gnu.org>
parents:
17396
diff
changeset
|
1537 if (o == target && IS_ANY_SEP (*o) && p[3] == 0) |
|
15427
97557b39e3b7
(Fexpand_file_name): When simplifying /foo/.., keep the initial slash.
Richard M. Stallman <rms@gnu.org>
parents:
15343
diff
changeset
|
1538 ++o; |
| 230 | 1539 p += 3; |
| 1540 } | |
| 1541 else | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1542 { |
| 230 | 1543 *o++ = *p++; |
| 1544 } | |
| 1545 #endif /* not VMS */ | |
| 1546 } | |
| 1547 | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1548 #ifdef DOS_NT |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1549 /* At last, set drive name. */ |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1550 #ifdef WINDOWSNT |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1551 /* Except for network file name. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1552 if (!(IS_DIRECTORY_SEP (target[0]) && IS_DIRECTORY_SEP (target[1]))) |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1553 #endif /* WINDOWSNT */ |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1554 { |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1555 if (!drive) abort (); |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1556 target -= 2; |
|
15324
6fd4e01fd332
(DRIVE_LETTER): [DOS_NT] New macro.
Richard M. Stallman <rms@gnu.org>
parents:
15313
diff
changeset
|
1557 target[0] = DRIVE_LETTER (drive); |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1558 target[1] = ':'; |
|
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1559 } |
|
21987
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1560 /* Reinsert the escape prefix if required. */ |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1561 if (is_escaped) |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1562 { |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1563 target -= 2; |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1564 target[0] = '/'; |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1565 target[1] = ':'; |
|
cd7ff97f3b05
(Fexpand_file_name) [DOS_NT]: Note when special escape
Richard M. Stallman <rms@gnu.org>
parents:
21949
diff
changeset
|
1566 } |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1567 CORRECT_DIR_SEPS (target); |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1568 #endif /* DOS_NT */ |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1569 |
| 230 | 1570 return make_string (target, o - target); |
| 1571 } | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1572 |
| 230 | 1573 #if 0 |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1574 /* Changed this DEFUN to a DEAFUN, so as not to confuse `make-docfile'. */ |
| 732 | 1575 DEAFUN ("expand-file-name", Fexpand_file_name, Sexpand_file_name, 1, 2, 0, |
| 230 | 1576 "Convert FILENAME to absolute, and canonicalize it.\n\ |
| 1577 Second arg DEFAULT is directory to start with if FILENAME is relative\n\ | |
| 1578 (does not start with slash); if DEFAULT is nil or missing,\n\ | |
| 1579 the current buffer's value of default-directory is used.\n\ | |
| 1580 Filenames containing `.' or `..' as components are simplified;\n\ | |
| 1581 initial `~/' expands to your home directory.\n\ | |
| 1582 See also the function `substitute-in-file-name'.") | |
| 1583 (name, defalt) | |
| 1584 Lisp_Object name, defalt; | |
| 1585 { | |
| 1586 unsigned char *nm; | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1587 |
| 230 | 1588 register unsigned char *newdir, *p, *o; |
| 1589 int tlen; | |
| 1590 unsigned char *target; | |
| 1591 struct passwd *pw; | |
| 1592 int lose; | |
| 1593 #ifdef VMS | |
| 1594 unsigned char * colon = 0; | |
| 1595 unsigned char * close = 0; | |
| 1596 unsigned char * slash = 0; | |
| 1597 unsigned char * brack = 0; | |
| 1598 int lbrack = 0, rbrack = 0; | |
| 1599 int dots = 0; | |
| 1600 #endif /* VMS */ | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1601 |
| 230 | 1602 CHECK_STRING (name, 0); |
| 1603 | |
| 1604 #ifdef VMS | |
| 1605 /* Filenames on VMS are always upper case. */ | |
| 1606 name = Fupcase (name); | |
| 1607 #endif | |
| 1608 | |
| 1609 nm = XSTRING (name)->data; | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1610 |
| 230 | 1611 /* If nm is absolute, flush ...// and detect /./ and /../. |
|
19754
380cbf03df01
(Fexpand_file_name): If default dir isn't string, use `/'.
Richard M. Stallman <rms@gnu.org>
parents:
19695
diff
changeset
|
1612 If no /./ or /../ we can return right away. */ |
| 230 | 1613 if ( |
| 1614 nm[0] == '/' | |
| 1615 #ifdef VMS | |
| 1616 || index (nm, ':') | |
| 1617 #endif /* VMS */ | |
| 1618 ) | |
| 1619 { | |
| 1620 p = nm; | |
| 1621 lose = 0; | |
| 1622 while (*p) | |
| 1623 { | |
| 1624 if (p[0] == '/' && p[1] == '/' | |
| 1625 #ifdef APOLLO | |
|
19754
380cbf03df01
(Fexpand_file_name): If default dir isn't string, use `/'.
Richard M. Stallman <rms@gnu.org>
parents:
19695
diff
changeset
|
1626 /* // at start of filename is meaningful on Apollo system. */ |
| 230 | 1627 && nm != p |
| 1628 #endif /* APOLLO */ | |
| 1629 ) | |
| 1630 nm = p + 1; | |
| 1631 if (p[0] == '/' && p[1] == '~') | |
| 1632 nm = p + 1, lose = 1; | |
| 1633 if (p[0] == '/' && p[1] == '.' | |
| 1634 && (p[2] == '/' || p[2] == 0 | |
| 1635 || (p[2] == '.' && (p[3] == '/' || p[3] == 0)))) | |
| 1636 lose = 1; | |
| 1637 #ifdef VMS | |
| 1638 if (p[0] == '\\') | |
| 1639 lose = 1; | |
| 1640 if (p[0] == '/') { | |
| 1641 /* if dev:[dir]/, move nm to / */ | |
| 1642 if (!slash && p > nm && (brack || colon)) { | |
| 1643 nm = (brack ? brack + 1 : colon + 1); | |
| 1644 lbrack = rbrack = 0; | |
| 1645 brack = 0; | |
| 1646 colon = 0; | |
| 1647 } | |
| 1648 slash = p; | |
| 1649 } | |
| 1650 if (p[0] == '-') | |
| 1651 #ifndef VMS4_4 | |
| 1652 /* VMS pre V4.4,convert '-'s in filenames. */ | |
| 1653 if (lbrack == rbrack) | |
| 1654 { | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1655 if (dots < 2) /* this is to allow negative version numbers */ |
| 230 | 1656 p[0] = '_'; |
| 1657 } | |
| 1658 else | |
| 1659 #endif /* VMS4_4 */ | |
| 1660 if (lbrack > rbrack && | |
| 1661 ((p[-1] == '.' || p[-1] == '[' || p[-1] == '<') && | |
| 1662 (p[1] == '.' || p[1] == ']' || p[1] == '>'))) | |
| 1663 lose = 1; | |
| 1664 #ifndef VMS4_4 | |
| 1665 else | |
| 1666 p[0] = '_'; | |
| 1667 #endif /* VMS4_4 */ | |
| 1668 /* count open brackets, reset close bracket pointer */ | |
| 1669 if (p[0] == '[' || p[0] == '<') | |
| 1670 lbrack++, brack = 0; | |
| 1671 /* count close brackets, set close bracket pointer */ | |
| 1672 if (p[0] == ']' || p[0] == '>') | |
| 1673 rbrack++, brack = p; | |
| 1674 /* detect ][ or >< */ | |
| 1675 if ((p[0] == ']' || p[0] == '>') && (p[1] == '[' || p[1] == '<')) | |
| 1676 lose = 1; | |
| 1677 if ((p[0] == ':' || p[0] == ']' || p[0] == '>') && p[1] == '~') | |
| 1678 nm = p + 1, lose = 1; | |
| 1679 if (p[0] == ':' && (colon || slash)) | |
| 1680 /* if dev1:[dir]dev2:, move nm to dev2: */ | |
| 1681 if (brack) | |
| 1682 { | |
| 1683 nm = brack + 1; | |
| 1684 brack = 0; | |
| 1685 } | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1686 /* If /name/dev:, move nm to dev: */ |
| 230 | 1687 else if (slash) |
| 1688 nm = slash + 1; | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1689 /* If node::dev:, move colon following dev */ |
| 230 | 1690 else if (colon && colon[-1] == ':') |
| 1691 colon = p; | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1692 /* If dev1:dev2:, move nm to dev2: */ |
| 230 | 1693 else if (colon && colon[-1] != ':') |
| 1694 { | |
| 1695 nm = colon + 1; | |
| 1696 colon = 0; | |
| 1697 } | |
| 1698 if (p[0] == ':' && !colon) | |
| 1699 { | |
| 1700 if (p[1] == ':') | |
| 1701 p++; | |
| 1702 colon = p; | |
| 1703 } | |
| 1704 if (lbrack == rbrack) | |
| 1705 if (p[0] == ';') | |
| 1706 dots = 2; | |
| 1707 else if (p[0] == '.') | |
| 1708 dots++; | |
| 1709 #endif /* VMS */ | |
| 1710 p++; | |
| 1711 } | |
| 1712 if (!lose) | |
| 1713 { | |
| 1714 #ifdef VMS | |
| 1715 if (index (nm, '/')) | |
| 1716 return build_string (sys_translate_unix (nm)); | |
| 1717 #endif /* VMS */ | |
| 1718 if (nm == XSTRING (name)->data) | |
| 1719 return name; | |
| 1720 return build_string (nm); | |
| 1721 } | |
| 1722 } | |
| 1723 | |
| 1724 /* Now determine directory to start with and put it in NEWDIR */ | |
| 1725 | |
| 1726 newdir = 0; | |
| 1727 | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1728 if (nm[0] == '~') /* prefix ~ */ |
| 230 | 1729 if (nm[1] == '/' |
| 1730 #ifdef VMS | |
| 1731 || nm[1] == ':' | |
| 1732 #endif /* VMS */ | |
| 1733 || nm[1] == 0)/* ~/filename */ | |
| 1734 { | |
| 1735 if (!(newdir = (unsigned char *) egetenv ("HOME"))) | |
| 1736 newdir = (unsigned char *) ""; | |
| 1737 nm++; | |
| 1738 #ifdef VMS | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1739 nm++; /* Don't leave the slash in nm. */ |
| 230 | 1740 #endif /* VMS */ |
| 1741 } | |
| 1742 else /* ~user/filename */ | |
| 1743 { | |
| 1744 /* Get past ~ to user */ | |
| 1745 unsigned char *user = nm + 1; | |
| 1746 /* Find end of name. */ | |
| 1747 unsigned char *ptr = (unsigned char *) index (user, '/'); | |
| 1748 int len = ptr ? ptr - user : strlen (user); | |
| 1749 #ifdef VMS | |
| 1750 unsigned char *ptr1 = index (user, ':'); | |
| 1751 if (ptr1 != 0 && ptr1 - user < len) | |
| 1752 len = ptr1 - user; | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1753 #endif /* VMS */ |
| 230 | 1754 /* Copy the user name into temp storage. */ |
| 1755 o = (unsigned char *) alloca (len + 1); | |
| 1756 bcopy ((char *) user, o, len); | |
| 1757 o[len] = 0; | |
| 1758 | |
| 1759 /* Look up the user name. */ | |
| 1760 pw = (struct passwd *) getpwnam (o + 1); | |
| 1761 if (!pw) | |
| 1762 error ("\"%s\" isn't a registered user", o + 1); | |
| 1763 | |
| 1764 newdir = (unsigned char *) pw->pw_dir; | |
| 1765 | |
| 1766 /* Discard the user name from NM. */ | |
| 1767 nm += len; | |
| 1768 } | |
| 1769 | |
| 1770 if (nm[0] != '/' | |
| 1771 #ifdef VMS | |
| 1772 && !index (nm, ':') | |
| 1773 #endif /* not VMS */ | |
| 1774 && !newdir) | |
| 1775 { | |
| 485 | 1776 if (NILP (defalt)) |
| 230 | 1777 defalt = current_buffer->directory; |
| 1778 CHECK_STRING (defalt, 1); | |
| 1779 newdir = XSTRING (defalt)->data; | |
| 1780 } | |
| 1781 | |
| 1782 /* Now concatenate the directory and name to new space in the stack frame */ | |
| 1783 | |
| 1784 tlen = (newdir ? strlen (newdir) + 1 : 0) + strlen (nm) + 1; | |
| 1785 target = (unsigned char *) alloca (tlen); | |
| 1786 *target = 0; | |
| 1787 | |
| 1788 if (newdir) | |
| 1789 { | |
| 1790 #ifndef VMS | |
| 1791 if (nm[0] == 0 || nm[0] == '/') | |
| 1792 strcpy (target, newdir); | |
| 1793 else | |
| 1794 #endif | |
| 1795 file_name_as_directory (target, newdir); | |
| 1796 } | |
| 1797 | |
| 1798 strcat (target, nm); | |
| 1799 #ifdef VMS | |
| 1800 if (index (target, '/')) | |
| 1801 strcpy (target, sys_translate_unix (target)); | |
| 1802 #endif /* VMS */ | |
| 1803 | |
| 1804 /* Now canonicalize by removing /. and /foo/.. if they appear */ | |
| 1805 | |
| 1806 p = target; | |
| 1807 o = target; | |
| 1808 | |
| 1809 while (*p) | |
| 1810 { | |
| 1811 #ifdef VMS | |
| 1812 if (*p != ']' && *p != '>' && *p != '-') | |
| 1813 { | |
| 1814 if (*p == '\\') | |
| 1815 p++; | |
| 1816 *o++ = *p++; | |
| 1817 } | |
| 1818 else if ((p[0] == ']' || p[0] == '>') && p[0] == p[1] + 2) | |
| 1819 /* brackets are offset from each other by 2 */ | |
| 1820 { | |
| 1821 p += 2; | |
| 1822 if (*p != '.' && *p != '-' && o[-1] != '.') | |
| 1823 /* convert [foo][bar] to [bar] */ | |
| 1824 while (o[-1] != '[' && o[-1] != '<') | |
| 1825 o--; | |
| 1826 else if (*p == '-' && *o != '.') | |
| 1827 *--p = '.'; | |
| 1828 } | |
| 1829 else if (p[0] == '-' && o[-1] == '.' && | |
| 1830 (p[1] == '.' || p[1] == ']' || p[1] == '>')) | |
| 1831 /* flush .foo.- ; leave - if stopped by '[' or '<' */ | |
| 1832 { | |
| 1833 do | |
| 1834 o--; | |
| 1835 while (o[-1] != '.' && o[-1] != '[' && o[-1] != '<'); | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1836 if (p[1] == '.') /* foo.-.bar ==> bar. */ |
| 230 | 1837 p += 2; |
| 1838 else if (o[-1] == '.') /* '.foo.-]' ==> ']' */ | |
| 1839 p++, o--; | |
| 1840 /* else [foo.-] ==> [-] */ | |
| 1841 } | |
| 1842 else | |
| 1843 { | |
| 1844 #ifndef VMS4_4 | |
| 1845 if (*p == '-' && | |
| 1846 o[-1] != '[' && o[-1] != '<' && o[-1] != '.' && | |
| 1847 p[1] != ']' && p[1] != '>' && p[1] != '.') | |
| 1848 *p = '_'; | |
| 1849 #endif /* VMS4_4 */ | |
| 1850 *o++ = *p++; | |
| 1851 } | |
| 1852 #else /* not VMS */ | |
| 1853 if (*p != '/') | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1854 { |
| 230 | 1855 *o++ = *p++; |
| 1856 } | |
| 1857 else if (!strncmp (p, "//", 2) | |
| 1858 #ifdef APOLLO | |
|
19754
380cbf03df01
(Fexpand_file_name): If default dir isn't string, use `/'.
Richard M. Stallman <rms@gnu.org>
parents:
19695
diff
changeset
|
1859 /* // at start of filename is meaningful in Apollo system. */ |
| 230 | 1860 && o != target |
| 1861 #endif /* APOLLO */ | |
| 1862 ) | |
| 1863 { | |
| 1864 o = target; | |
| 1865 p++; | |
| 1866 } | |
| 1867 else if (p[0] == '/' && p[1] == '.' && | |
| 1868 (p[2] == '/' || p[2] == 0)) | |
| 1869 p += 2; | |
| 1870 else if (!strncmp (p, "/..", 3) | |
| 1871 /* `/../' is the "superroot" on certain file systems. */ | |
| 1872 && o != target | |
| 1873 && (p[3] == '/' || p[3] == 0)) | |
| 1874 { | |
| 1875 while (o != target && *--o != '/') | |
| 1876 ; | |
| 1877 #ifdef APOLLO | |
| 1878 if (o == target + 1 && o[-1] == '/' && o[0] == '/') | |
| 1879 ++o; | |
| 1880 else | |
| 1881 #endif /* APOLLO */ | |
| 1882 if (o == target && *o == '/') | |
| 1883 ++o; | |
| 1884 p += 3; | |
| 1885 } | |
| 1886 else | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1887 { |
| 230 | 1888 *o++ = *p++; |
| 1889 } | |
| 1890 #endif /* not VMS */ | |
| 1891 } | |
| 1892 | |
| 1893 return make_string (target, o - target); | |
| 1894 } | |
| 1895 #endif | |
| 1896 | |
| 1897 DEFUN ("substitute-in-file-name", Fsubstitute_in_file_name, | |
| 1898 Ssubstitute_in_file_name, 1, 1, 0, | |
| 1899 "Substitute environment variables referred to in FILENAME.\n\ | |
| 1900 `$FOO' where FOO is an environment variable name means to substitute\n\ | |
| 1901 the value of that variable. The variable name should be terminated\n\ | |
| 1902 with a character not a letter, digit or underscore; otherwise, enclose\n\ | |
| 1903 the entire variable name in braces.\n\ | |
| 1904 If `/~' appears, all of FILENAME through that `/' is discarded.\n\n\ | |
| 1905 On VMS, `$' substitution is not done; this function does little and only\n\ | |
| 1906 duplicates what `expand-file-name' does.") | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1907 (filename) |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1908 Lisp_Object filename; |
| 230 | 1909 { |
| 1910 unsigned char *nm; | |
| 1911 | |
| 1912 register unsigned char *s, *p, *o, *x, *endp; | |
| 1913 unsigned char *target; | |
| 1914 int total = 0; | |
| 1915 int substituted = 0; | |
| 1916 unsigned char *xnm; | |
|
9955
dfb5d7e86733
(Fread_file_name_internal): Protect orig_string.
Richard M. Stallman <rms@gnu.org>
parents:
9921
diff
changeset
|
1917 Lisp_Object handler; |
| 230 | 1918 |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1919 CHECK_STRING (filename, 0); |
| 230 | 1920 |
|
9955
dfb5d7e86733
(Fread_file_name_internal): Protect orig_string.
Richard M. Stallman <rms@gnu.org>
parents:
9921
diff
changeset
|
1921 /* If the file name has special constructs in it, |
|
dfb5d7e86733
(Fread_file_name_internal): Protect orig_string.
Richard M. Stallman <rms@gnu.org>
parents:
9921
diff
changeset
|
1922 call the corresponding file handler. */ |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1923 handler = Ffind_file_name_handler (filename, Qsubstitute_in_file_name); |
|
9955
dfb5d7e86733
(Fread_file_name_internal): Protect orig_string.
Richard M. Stallman <rms@gnu.org>
parents:
9921
diff
changeset
|
1924 if (!NILP (handler)) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1925 return call2 (handler, Qsubstitute_in_file_name, filename); |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1926 |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
1927 nm = XSTRING (filename)->data; |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1928 #ifdef DOS_NT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1929 nm = strcpy (alloca (strlen (nm) + 1), nm); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1930 CORRECT_DIR_SEPS (nm); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1931 substituted = (strcmp (nm, XSTRING (filename)->data) != 0); |
|
8185
b5cc015a3698
(Ffile_name_directory, Ffile_name_nondirectory,
Richard M. Stallman <rms@gnu.org>
parents:
8079
diff
changeset
|
1932 #endif |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
1933 endp = nm + STRING_BYTES (XSTRING (filename)); |
| 230 | 1934 |
|
19754
380cbf03df01
(Fexpand_file_name): If default dir isn't string, use `/'.
Richard M. Stallman <rms@gnu.org>
parents:
19695
diff
changeset
|
1935 /* If /~ or // appears, discard everything through first slash. */ |
| 230 | 1936 |
| 1937 for (p = nm; p != endp; p++) | |
| 1938 { | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1939 if ((p[0] == '~' |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1940 #if defined (APOLLO) || defined (WINDOWSNT) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1941 /* // at start of file name is meaningful in Apollo and |
|
19754
380cbf03df01
(Fexpand_file_name): If default dir isn't string, use `/'.
Richard M. Stallman <rms@gnu.org>
parents:
19695
diff
changeset
|
1942 WindowsNT systems. */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1943 || (IS_DIRECTORY_SEP (p[0]) && p - 1 != nm) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1944 #else /* not (APOLLO || WINDOWSNT) */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1945 || IS_DIRECTORY_SEP (p[0]) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1946 #endif /* not (APOLLO || WINDOWSNT) */ |
| 230 | 1947 ) |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1948 && p != nm |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1949 && (0 |
| 230 | 1950 #ifdef VMS |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1951 || p[-1] == ':' || p[-1] == ']' || p[-1] == '>' |
| 230 | 1952 #endif /* VMS */ |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1953 || IS_DIRECTORY_SEP (p[-1]))) |
| 230 | 1954 { |
| 1955 nm = p; | |
| 1956 substituted = 1; | |
| 1957 } | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1958 #ifdef DOS_NT |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1959 /* see comment in expand-file-name about drive specifiers */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1960 else if (IS_DRIVE (p[0]) && p[1] == ':' |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
1961 && p > nm && IS_DIRECTORY_SEP (p[-1])) |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1962 { |
|
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1963 nm = p; |
|
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1964 substituted = 1; |
|
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
1965 } |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
1966 #endif /* DOS_NT */ |
| 230 | 1967 } |
| 1968 | |
| 1969 #ifdef VMS | |
| 1970 return build_string (nm); | |
| 1971 #else | |
| 1972 | |
| 1973 /* See if any variables are substituted into the string | |
| 1974 and find the total length of their values in `total' */ | |
| 1975 | |
| 1976 for (p = nm; p != endp;) | |
| 1977 if (*p != '$') | |
| 1978 p++; | |
| 1979 else | |
| 1980 { | |
| 1981 p++; | |
| 1982 if (p == endp) | |
| 1983 goto badsubst; | |
| 1984 else if (*p == '$') | |
| 1985 { | |
| 1986 /* "$$" means a single "$" */ | |
| 1987 p++; | |
| 1988 total -= 1; | |
| 1989 substituted = 1; | |
| 1990 continue; | |
| 1991 } | |
| 1992 else if (*p == '{') | |
| 1993 { | |
| 1994 o = ++p; | |
| 1995 while (p != endp && *p != '}') p++; | |
| 1996 if (*p != '}') goto missingclose; | |
| 1997 s = p; | |
| 1998 } | |
| 1999 else | |
| 2000 { | |
| 2001 o = p; | |
| 2002 while (p != endp && (isalnum (*p) || *p == '_')) p++; | |
| 2003 s = p; | |
| 2004 } | |
| 2005 | |
| 2006 /* Copy out the variable name */ | |
| 2007 target = (unsigned char *) alloca (s - o + 1); | |
| 2008 strncpy (target, o, s - o); | |
| 2009 target[s - o] = 0; | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2010 #ifdef DOS_NT |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
2011 strupr (target); /* $home == $HOME etc. */ |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2012 #endif /* DOS_NT */ |
| 230 | 2013 |
| 2014 /* Get variable value */ | |
| 2015 o = (unsigned char *) egetenv (target); | |
| 2016 if (!o) goto badvar; | |
| 2017 total += strlen (o); | |
| 2018 substituted = 1; | |
| 2019 } | |
| 2020 | |
| 2021 if (!substituted) | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2022 return filename; |
| 230 | 2023 |
| 2024 /* If substitution required, recopy the string and do it */ | |
| 2025 /* Make space in stack frame for the new copy */ | |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
2026 xnm = (unsigned char *) alloca (STRING_BYTES (XSTRING (filename)) + total + 1); |
| 230 | 2027 x = xnm; |
| 2028 | |
| 2029 /* Copy the rest of the name through, replacing $ constructs with values */ | |
| 2030 for (p = nm; *p;) | |
| 2031 if (*p != '$') | |
| 2032 *x++ = *p++; | |
| 2033 else | |
| 2034 { | |
| 2035 p++; | |
| 2036 if (p == endp) | |
| 2037 goto badsubst; | |
| 2038 else if (*p == '$') | |
| 2039 { | |
| 2040 *x++ = *p++; | |
| 2041 continue; | |
| 2042 } | |
| 2043 else if (*p == '{') | |
| 2044 { | |
| 2045 o = ++p; | |
| 2046 while (p != endp && *p != '}') p++; | |
| 2047 if (*p != '}') goto missingclose; | |
| 2048 s = p++; | |
| 2049 } | |
| 2050 else | |
| 2051 { | |
| 2052 o = p; | |
| 2053 while (p != endp && (isalnum (*p) || *p == '_')) p++; | |
| 2054 s = p; | |
| 2055 } | |
| 2056 | |
| 2057 /* Copy out the variable name */ | |
| 2058 target = (unsigned char *) alloca (s - o + 1); | |
| 2059 strncpy (target, o, s - o); | |
| 2060 target[s - o] = 0; | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2061 #ifdef DOS_NT |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
2062 strupr (target); /* $home == $HOME etc. */ |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2063 #endif /* DOS_NT */ |
| 230 | 2064 |
| 2065 /* Get variable value */ | |
| 2066 o = (unsigned char *) egetenv (target); | |
| 2067 if (!o) | |
| 2068 goto badvar; | |
| 2069 | |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2070 if (STRING_MULTIBYTE (filename)) |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2071 { |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2072 /* If the original string is multibyte, |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2073 convert what we substitute into multibyte. */ |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2074 unsigned char workbuf[4], *str; |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2075 int len; |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2076 |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2077 while (*o) |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2078 { |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2079 int c = *o++; |
|
20707
48745ae8daa0
(Fsubstitute_in_file_name): Use unibyte_char_to_multibyte.
Richard M. Stallman <rms@gnu.org>
parents:
20651
diff
changeset
|
2080 c = unibyte_char_to_multibyte (c); |
|
48745ae8daa0
(Fsubstitute_in_file_name): Use unibyte_char_to_multibyte.
Richard M. Stallman <rms@gnu.org>
parents:
20651
diff
changeset
|
2081 if (! SINGLE_BYTE_CHAR_P (c)) |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2082 { |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2083 len = CHAR_STRING (c, workbuf, str); |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2084 bcopy (str, x, len); |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2085 x += len; |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2086 } |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2087 else |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2088 *x++ = c; |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2089 } |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2090 } |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2091 else |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2092 { |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2093 strcpy (x, o); |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2094 x += strlen (o); |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2095 } |
| 230 | 2096 } |
| 2097 | |
| 2098 *x = 0; | |
| 2099 | |
|
19754
380cbf03df01
(Fexpand_file_name): If default dir isn't string, use `/'.
Richard M. Stallman <rms@gnu.org>
parents:
19695
diff
changeset
|
2100 /* If /~ or // appears, discard everything through first slash. */ |
| 230 | 2101 |
| 2102 for (p = xnm; p != x; p++) | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2103 if ((p[0] == '~' |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2104 #if defined (APOLLO) || defined (WINDOWSNT) |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2105 || (IS_DIRECTORY_SEP (p[0]) && p - 1 != xnm) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2106 #else /* not (APOLLO || WINDOWSNT) */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2107 || IS_DIRECTORY_SEP (p[0]) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2108 #endif /* not (APOLLO || WINDOWSNT) */ |
| 230 | 2109 ) |
|
17580
331ce9fbf08b
(Fsubstitute_in_file_name): Use xnm uniformly, never nm,
Richard M. Stallman <rms@gnu.org>
parents:
17558
diff
changeset
|
2110 && p != xnm && IS_DIRECTORY_SEP (p[-1])) |
| 230 | 2111 xnm = p; |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2112 #ifdef DOS_NT |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2113 else if (IS_DRIVE (p[0]) && p[1] == ':' |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2114 && p > nm && IS_DIRECTORY_SEP (p[-1])) |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2115 xnm = p; |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
2116 #endif |
| 230 | 2117 |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2118 if (STRING_MULTIBYTE (filename)) |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2119 return make_string (xnm, x - xnm); |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
2120 return make_unibyte_string (xnm, x - xnm); |
| 230 | 2121 |
| 2122 badsubst: | |
| 2123 error ("Bad format environment-variable substitution"); | |
| 2124 missingclose: | |
| 2125 error ("Missing \"}\" in environment-variable substitution"); | |
| 2126 badvar: | |
| 2127 error ("Substituting nonexistent environment variable \"%s\"", target); | |
| 2128 | |
| 2129 /* NOTREACHED */ | |
| 2130 #endif /* not VMS */ | |
| 2131 } | |
| 2132 | |
| 853 | 2133 /* A slightly faster and more convenient way to get |
|
4451
73b91cd2c55e
(expand_and_dir_to_file): Remove final / by copying abspath.
Richard M. Stallman <rms@gnu.org>
parents:
4395
diff
changeset
|
2134 (directory-file-name (expand-file-name FOO)). */ |
| 853 | 2135 |
| 230 | 2136 Lisp_Object |
| 2137 expand_and_dir_to_file (filename, defdir) | |
| 2138 Lisp_Object filename, defdir; | |
| 2139 { | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2140 register Lisp_Object absname; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2141 |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2142 absname = Fexpand_file_name (filename, defdir); |
| 230 | 2143 #ifdef VMS |
| 2144 { | |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
2145 register int c = XSTRING (absname)->data[STRING_BYTES (XSTRING (absname)) - 1]; |
| 230 | 2146 if (c == ':' || c == ']' || c == '>') |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2147 absname = Fdirectory_file_name (absname); |
| 230 | 2148 } |
| 2149 #else | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2150 /* Remove final slash, if any (unless this is the root dir). |
| 230 | 2151 stat behaves differently depending! */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2152 if (XSTRING (absname)->size > 1 |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
2153 && IS_DIRECTORY_SEP (XSTRING (absname)->data[STRING_BYTES (XSTRING (absname)) - 1]) |
|
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
2154 && !IS_DEVICE_SEP (XSTRING (absname)->data[STRING_BYTES (XSTRING (absname))-2])) |
|
4483
6894dd27c9ec
(expand_and_dir_to_file): Use Fdirectory_file_name.
Richard M. Stallman <rms@gnu.org>
parents:
4451
diff
changeset
|
2155 /* We cannot take shortcuts; they might be wrong for magic file names. */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2156 absname = Fdirectory_file_name (absname); |
| 230 | 2157 #endif |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2158 return absname; |
| 230 | 2159 } |
| 2160 | |
|
13098
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2161 /* Signal an error if the file ABSNAME already exists. |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2162 If INTERACTIVE is nonzero, ask the user whether to proceed, |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2163 and bypass the error if the user says to go ahead. |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2164 QUERYSTRING is a name for the action that is being considered |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2165 to alter the file. |
|
21020
f7ace8487b28
(auto_save_1): Pass new arg to Fwrite_region.
Richard M. Stallman <rms@gnu.org>
parents:
20944
diff
changeset
|
2166 |
|
13098
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2167 *STATPTR is used to store the stat information if the file exists. |
|
21020
f7ace8487b28
(auto_save_1): Pass new arg to Fwrite_region.
Richard M. Stallman <rms@gnu.org>
parents:
20944
diff
changeset
|
2168 If the file does not exist, STATPTR->st_mode is set to 0. |
|
21304
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2169 If STATPTR is null, we don't store into it. |
|
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2170 |
|
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2171 If QUICK is nonzero, we ask for y or n, not yes or no. */ |
|
13098
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2172 |
|
8846
6bf0ce964319
(barf_or_query_if_file_exists): Fix declaration.
Karl Heuer <kwzh@gnu.org>
parents:
8808
diff
changeset
|
2173 void |
|
21304
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2174 barf_or_query_if_file_exists (absname, querystring, interactive, statptr, quick) |
| 230 | 2175 Lisp_Object absname; |
| 2176 unsigned char *querystring; | |
| 2177 int interactive; | |
|
13098
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2178 struct stat *statptr; |
|
21304
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2179 int quick; |
| 230 | 2180 { |
|
21949
a2166fb22606
(barf_or_query_if_file_exists): Encode file name.
Richard M. Stallman <rms@gnu.org>
parents:
21917
diff
changeset
|
2181 register Lisp_Object tem, encoded_filename; |
| 8597 | 2182 struct stat statbuf; |
| 230 | 2183 struct gcpro gcpro1; |
| 2184 | |
|
21949
a2166fb22606
(barf_or_query_if_file_exists): Encode file name.
Richard M. Stallman <rms@gnu.org>
parents:
21917
diff
changeset
|
2185 encoded_filename = ENCODE_FILE (absname); |
|
a2166fb22606
(barf_or_query_if_file_exists): Encode file name.
Richard M. Stallman <rms@gnu.org>
parents:
21917
diff
changeset
|
2186 |
| 8597 | 2187 /* stat is a good way to tell whether the file exists, |
| 2188 regardless of what access permissions it has. */ | |
|
21949
a2166fb22606
(barf_or_query_if_file_exists): Encode file name.
Richard M. Stallman <rms@gnu.org>
parents:
21917
diff
changeset
|
2189 if (stat (XSTRING (encoded_filename)->data, &statbuf) >= 0) |
| 230 | 2190 { |
| 2191 if (! interactive) | |
| 2192 Fsignal (Qfile_already_exists, | |
| 2193 Fcons (build_string ("File already exists"), | |
| 2194 Fcons (absname, Qnil))); | |
| 2195 GCPRO1 (absname); | |
|
21304
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2196 tem = format1 ("File %s already exists; %s anyway? ", |
|
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2197 XSTRING (absname)->data, querystring); |
|
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2198 if (quick) |
|
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2199 tem = Fy_or_n_p (tem); |
|
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2200 else |
|
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2201 tem = do_yes_or_no_p (tem); |
| 230 | 2202 UNGCPRO; |
| 485 | 2203 if (NILP (tem)) |
| 230 | 2204 Fsignal (Qfile_already_exists, |
| 2205 Fcons (build_string ("File already exists"), | |
| 2206 Fcons (absname, Qnil))); | |
|
13098
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2207 if (statptr) |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2208 *statptr = statbuf; |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2209 } |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2210 else |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2211 { |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2212 if (statptr) |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2213 statptr->st_mode = 0; |
| 230 | 2214 } |
| 2215 return; | |
| 2216 } | |
| 2217 | |
| 2218 DEFUN ("copy-file", Fcopy_file, Scopy_file, 2, 4, | |
| 410 | 2219 "fCopy file: \nFCopy %s to file: \np\nP", |
| 230 | 2220 "Copy FILE to NEWNAME. Both args must be strings.\n\ |
| 2221 Signals a `file-already-exists' error if file NEWNAME already exists,\n\ | |
| 2222 unless a third argument OK-IF-ALREADY-EXISTS is supplied and non-nil.\n\ | |
| 2223 A number as third arg means request confirmation if NEWNAME already exists.\n\ | |
| 2224 This is what happens in interactive use with M-x.\n\ | |
| 410 | 2225 Fourth arg KEEP-TIME non-nil means give the new file the same\n\ |
| 2226 last-modified time as the old one. (This works on only some systems.)\n\ | |
| 2227 A prefix arg makes KEEP-TIME non-nil.") | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2228 (file, newname, ok_if_already_exists, keep_date) |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2229 Lisp_Object file, newname, ok_if_already_exists, keep_date; |
| 230 | 2230 { |
| 2231 int ifd, ofd, n; | |
| 2232 char buf[16 * 1024]; | |
|
13098
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2233 struct stat st, out_st; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2234 Lisp_Object handler; |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2235 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
|
592
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
2236 int count = specpdl_ptr - specpdl; |
|
4879
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2237 int input_file_statable_p; |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2238 Lisp_Object encoded_file, encoded_newname; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2239 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2240 encoded_file = encoded_newname = Qnil; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2241 GCPRO4 (file, newname, encoded_file, encoded_newname); |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2242 CHECK_STRING (file, 0); |
| 230 | 2243 CHECK_STRING (newname, 1); |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2244 |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2245 file = Fexpand_file_name (file, Qnil); |
| 230 | 2246 newname = Fexpand_file_name (newname, Qnil); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2247 |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
2248 /* If the input file name has special constructs in it, |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2249 call the corresponding file handler. */ |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2250 handler = Ffind_file_name_handler (file, Qcopy_file); |
|
3705
309c27256ceb
(Fcopy_file): Pass all the args to the handler.
Richard M. Stallman <rms@gnu.org>
parents:
3598
diff
changeset
|
2251 /* Likewise for output file name. */ |
|
309c27256ceb
(Fcopy_file): Pass all the args to the handler.
Richard M. Stallman <rms@gnu.org>
parents:
3598
diff
changeset
|
2252 if (NILP (handler)) |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
2253 handler = Ffind_file_name_handler (newname, Qcopy_file); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2254 if (!NILP (handler)) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2255 RETURN_UNGCPRO (call5 (handler, Qcopy_file, file, newname, |
|
6370
51a014b7c656
(Frename_file, Fcopy_file, Fadd_name_to_file, Fmake_symbolic_link): Fix typo
Karl Heuer <kwzh@gnu.org>
parents:
6367
diff
changeset
|
2256 ok_if_already_exists, keep_date)); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2257 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2258 encoded_file = ENCODE_FILE (file); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2259 encoded_newname = ENCODE_FILE (newname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2260 |
| 485 | 2261 if (NILP (ok_if_already_exists) |
|
9131
2190d1e7a69f
(Ffind_file_name_handler, Fcopy_file, Frename_file, Fadd_name_to_file,
Karl Heuer <kwzh@gnu.org>
parents:
9078
diff
changeset
|
2262 || INTEGERP (ok_if_already_exists)) |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2263 barf_or_query_if_file_exists (encoded_newname, "copy to it", |
|
21304
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2264 INTEGERP (ok_if_already_exists), &out_st, 0); |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2265 else if (stat (XSTRING (encoded_newname)->data, &out_st) < 0) |
|
13098
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2266 out_st.st_mode = 0; |
| 230 | 2267 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2268 ifd = open (XSTRING (encoded_file)->data, O_RDONLY); |
| 230 | 2269 if (ifd < 0) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2270 report_file_error ("Opening input file", Fcons (file, Qnil)); |
| 230 | 2271 |
|
592
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
2272 record_unwind_protect (close_file_unwind, make_number (ifd)); |
|
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
2273 |
|
4879
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2274 /* We can only copy regular files and symbolic links. Other files are not |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2275 copyable by us. */ |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2276 input_file_statable_p = (fstat (ifd, &st) >= 0); |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2277 |
|
21739
e02be2b47d18
(Fcopy_file): Skip dev/inode check on Windows.
Geoff Voelker <voelker@cs.washington.edu>
parents:
21684
diff
changeset
|
2278 #if !defined (DOS_NT) || __DJGPP__ > 1 |
|
13098
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2279 if (out_st.st_mode != 0 |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2280 && st.st_dev == out_st.st_dev && st.st_ino == out_st.st_ino) |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2281 { |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2282 errno = 0; |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2283 report_file_error ("Input and output files are the same", |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2284 Fcons (file, Fcons (newname, Qnil))); |
|
13098
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2285 } |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2286 #endif |
|
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2287 |
|
4879
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2288 #if defined (S_ISREG) && defined (S_ISLNK) |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2289 if (input_file_statable_p) |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2290 { |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2291 if (!(S_ISREG (st.st_mode)) && !(S_ISLNK (st.st_mode))) |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2292 { |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2293 #if defined (EISDIR) |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2294 /* Get a better looking error message. */ |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2295 errno = EISDIR; |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2296 #endif /* EISDIR */ |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2297 report_file_error ("Non-regular file", Fcons (file, Qnil)); |
|
4879
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2298 } |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2299 } |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2300 #endif /* S_ISREG && S_ISLNK */ |
|
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2301 |
| 230 | 2302 #ifdef VMS |
| 2303 /* Create the copy file with the same record format as the input file */ | |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2304 ofd = sys_creat (XSTRING (encoded_newname)->data, 0666, ifd); |
| 230 | 2305 #else |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
2306 #ifdef MSDOS |
|
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
2307 /* System's default file type was set to binary by _fmode in emacs.c. */ |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2308 ofd = creat (XSTRING (encoded_newname)->data, S_IREAD | S_IWRITE); |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
2309 #else /* not MSDOS */ |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2310 ofd = creat (XSTRING (encoded_newname)->data, 0666); |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
2311 #endif /* not MSDOS */ |
| 230 | 2312 #endif /* VMS */ |
| 2313 if (ofd < 0) | |
|
13098
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2314 report_file_error ("Opening output file", Fcons (newname, Qnil)); |
| 230 | 2315 |
|
592
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
2316 record_unwind_protect (close_file_unwind, make_number (ofd)); |
|
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
2317 |
|
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
2318 immediate_quit = 1; |
|
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
2319 QUIT; |
| 230 | 2320 while ((n = read (ifd, buf, sizeof buf)) > 0) |
| 2321 if (write (ofd, buf, n) != n) | |
|
13098
e1d400bc526e
(barf_or_query_if_file_exists): New arg STATPTR. Callers changed.
Richard M. Stallman <rms@gnu.org>
parents:
12985
diff
changeset
|
2322 report_file_error ("I/O error", Fcons (newname, Qnil)); |
|
592
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
2323 immediate_quit = 0; |
| 230 | 2324 |
|
7493
f4fb8b913c5d
(Fcopy_file): Close output before setting its times.
Richard M. Stallman <rms@gnu.org>
parents:
7445
diff
changeset
|
2325 /* Closing the output clobbers the file times on some systems. */ |
|
f4fb8b913c5d
(Fcopy_file): Close output before setting its times.
Richard M. Stallman <rms@gnu.org>
parents:
7445
diff
changeset
|
2326 if (close (ofd) < 0) |
|
f4fb8b913c5d
(Fcopy_file): Close output before setting its times.
Richard M. Stallman <rms@gnu.org>
parents:
7445
diff
changeset
|
2327 report_file_error ("I/O error", Fcons (newname, Qnil)); |
|
f4fb8b913c5d
(Fcopy_file): Close output before setting its times.
Richard M. Stallman <rms@gnu.org>
parents:
7445
diff
changeset
|
2328 |
|
4879
1774c84aca2e
(Fcopy_file): Don't allow the copying of anything other than regular
Brian Fox <bfox@gnu.org>
parents:
4853
diff
changeset
|
2329 if (input_file_statable_p) |
| 230 | 2330 { |
| 485 | 2331 if (!NILP (keep_date)) |
| 230 | 2332 { |
| 564 | 2333 EMACS_TIME atime, mtime; |
| 2334 EMACS_SET_SECS_USECS (atime, st.st_atime, 0); | |
| 2335 EMACS_SET_SECS_USECS (mtime, st.st_mtime, 0); | |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2336 if (set_file_times (XSTRING (encoded_newname)->data, |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2337 atime, mtime)) |
|
17271
e34a30952e14
(Fcopy_file): Use Qfile_date_error if can't set file date.
Richard M. Stallman <rms@gnu.org>
parents:
17114
diff
changeset
|
2338 Fsignal (Qfile_date_error, |
|
17287
b1cb0037ecec
(Fcopy_file): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
17286
diff
changeset
|
2339 Fcons (build_string ("Cannot set file date"), |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
2340 Fcons (newname, Qnil))); |
| 230 | 2341 } |
|
13541
2178c4d6a427
(check_executable) [DOS_NT]: Treat all dirs as executable.
Richard M. Stallman <rms@gnu.org>
parents:
13451
diff
changeset
|
2342 #ifndef MSDOS |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2343 chmod (XSTRING (encoded_newname)->data, st.st_mode & 07777); |
|
13541
2178c4d6a427
(check_executable) [DOS_NT]: Treat all dirs as executable.
Richard M. Stallman <rms@gnu.org>
parents:
13451
diff
changeset
|
2344 #else /* MSDOS */ |
|
2178c4d6a427
(check_executable) [DOS_NT]: Treat all dirs as executable.
Richard M. Stallman <rms@gnu.org>
parents:
13451
diff
changeset
|
2345 #if defined (__DJGPP__) && __DJGPP__ > 1 |
|
2178c4d6a427
(check_executable) [DOS_NT]: Treat all dirs as executable.
Richard M. Stallman <rms@gnu.org>
parents:
13451
diff
changeset
|
2346 /* In DJGPP v2.0 and later, fstat usually returns true file mode bits, |
|
2178c4d6a427
(check_executable) [DOS_NT]: Treat all dirs as executable.
Richard M. Stallman <rms@gnu.org>
parents:
13451
diff
changeset
|
2347 and if it can't, it tells so. Otherwise, under MSDOS we usually |
|
2178c4d6a427
(check_executable) [DOS_NT]: Treat all dirs as executable.
Richard M. Stallman <rms@gnu.org>
parents:
13451
diff
changeset
|
2348 get only the READ bit, which will make the copied file read-only, |
|
2178c4d6a427
(check_executable) [DOS_NT]: Treat all dirs as executable.
Richard M. Stallman <rms@gnu.org>
parents:
13451
diff
changeset
|
2349 so it's better not to chmod at all. */ |
|
2178c4d6a427
(check_executable) [DOS_NT]: Treat all dirs as executable.
Richard M. Stallman <rms@gnu.org>
parents:
13451
diff
changeset
|
2350 if ((_djstat_flags & _STFAIL_WRITEBIT) == 0) |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2351 chmod (XSTRING (encoded_newname)->data, st.st_mode & 07777); |
|
13541
2178c4d6a427
(check_executable) [DOS_NT]: Treat all dirs as executable.
Richard M. Stallman <rms@gnu.org>
parents:
13451
diff
changeset
|
2352 #endif /* DJGPP version 2 or newer */ |
|
2178c4d6a427
(check_executable) [DOS_NT]: Treat all dirs as executable.
Richard M. Stallman <rms@gnu.org>
parents:
13451
diff
changeset
|
2353 #endif /* MSDOS */ |
| 230 | 2354 } |
| 2355 | |
|
7493
f4fb8b913c5d
(Fcopy_file): Close output before setting its times.
Richard M. Stallman <rms@gnu.org>
parents:
7445
diff
changeset
|
2356 close (ifd); |
|
f4fb8b913c5d
(Fcopy_file): Close output before setting its times.
Richard M. Stallman <rms@gnu.org>
parents:
7445
diff
changeset
|
2357 |
|
592
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
2358 /* Discard the unwind protects. */ |
|
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
2359 specpdl_ptr = specpdl + count; |
|
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
2360 |
| 230 | 2361 UNGCPRO; |
| 2362 return Qnil; | |
| 2363 } | |
|
10084
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2364 |
|
1533
b86ef0432100
(Fmake_directory_internal): Renamed from Fmake_directory.
Richard M. Stallman <rms@gnu.org>
parents:
1377
diff
changeset
|
2365 DEFUN ("make-directory-internal", Fmake_directory_internal, |
|
1536
0877009e6324
* fileio.c (Fmake_directory_internal): Remove extra paren before the
Jim Blandy <jimb@redhat.com>
parents:
1533
diff
changeset
|
2366 Smake_directory_internal, 1, 1, 0, |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2367 "Create a new directory named DIRECTORY.") |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2368 (directory) |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2369 Lisp_Object directory; |
| 230 | 2370 { |
| 2371 unsigned char *dir; | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2372 Lisp_Object handler; |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2373 Lisp_Object encoded_dir; |
| 230 | 2374 |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2375 CHECK_STRING (directory, 0); |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2376 directory = Fexpand_file_name (directory, Qnil); |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2377 |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2378 handler = Ffind_file_name_handler (directory, Qmake_directory_internal); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2379 if (!NILP (handler)) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2380 return call2 (handler, Qmake_directory_internal, directory); |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2381 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2382 encoded_dir = ENCODE_FILE (directory); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2383 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2384 dir = XSTRING (encoded_dir)->data; |
| 230 | 2385 |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2386 #ifdef WINDOWSNT |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2387 if (mkdir (dir) != 0) |
|
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2388 #else |
| 230 | 2389 if (mkdir (dir, 0777) != 0) |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2390 #endif |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2391 report_file_error ("Creating directory", Flist (1, &directory)); |
| 230 | 2392 |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2393 return Qnil; |
| 230 | 2394 } |
| 2395 | |
|
686
bd3068742807
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
648
diff
changeset
|
2396 DEFUN ("delete-directory", Fdelete_directory, Sdelete_directory, 1, 1, "FDelete directory: ", |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2397 "Delete the directory named DIRECTORY.") |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2398 (directory) |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2399 Lisp_Object directory; |
| 230 | 2400 { |
| 2401 unsigned char *dir; | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2402 Lisp_Object handler; |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2403 Lisp_Object encoded_dir; |
| 230 | 2404 |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2405 CHECK_STRING (directory, 0); |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2406 directory = Fdirectory_file_name (Fexpand_file_name (directory, Qnil)); |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2407 |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2408 handler = Ffind_file_name_handler (directory, Qdelete_directory); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2409 if (!NILP (handler)) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2410 return call2 (handler, Qdelete_directory, directory); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2411 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2412 encoded_dir = ENCODE_FILE (directory); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2413 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2414 dir = XSTRING (encoded_dir)->data; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2415 |
| 230 | 2416 if (rmdir (dir) != 0) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2417 report_file_error ("Removing directory", Flist (1, &directory)); |
| 230 | 2418 |
| 2419 return Qnil; | |
| 2420 } | |
| 2421 | |
| 2422 DEFUN ("delete-file", Fdelete_file, Sdelete_file, 1, 1, "fDelete file: ", | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2423 "Delete file named FILENAME.\n\ |
| 230 | 2424 If file has multiple names, it continues to exist with the other names.") |
| 2425 (filename) | |
| 2426 Lisp_Object filename; | |
| 2427 { | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2428 Lisp_Object handler; |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2429 Lisp_Object encoded_file; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2430 |
| 230 | 2431 CHECK_STRING (filename, 0); |
| 2432 filename = Fexpand_file_name (filename, Qnil); | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2433 |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
2434 handler = Ffind_file_name_handler (filename, Qdelete_file); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2435 if (!NILP (handler)) |
|
9170
1d95c81487a3
(Fdelete_file): Undo Sep 16 change.
Karl Heuer <kwzh@gnu.org>
parents:
9131
diff
changeset
|
2436 return call2 (handler, Qdelete_file, filename); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2437 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2438 encoded_file = ENCODE_FILE (filename); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2439 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2440 if (0 > unlink (XSTRING (encoded_file)->data)) |
| 230 | 2441 report_file_error ("Removing old name", Flist (1, &filename)); |
|
9170
1d95c81487a3
(Fdelete_file): Undo Sep 16 change.
Karl Heuer <kwzh@gnu.org>
parents:
9131
diff
changeset
|
2442 return Qnil; |
| 230 | 2443 } |
| 2444 | |
|
10084
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2445 static Lisp_Object |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2446 internal_delete_file_1 (ignore) |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2447 Lisp_Object ignore; |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2448 { |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2449 return Qt; |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2450 } |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2451 |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2452 /* Delete file FILENAME, returning 1 if successful and 0 if failed. */ |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2453 |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2454 int |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2455 internal_delete_file (filename) |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2456 Lisp_Object filename; |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2457 { |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2458 return NILP (internal_condition_case_1 (Fdelete_file, filename, |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2459 Qt, internal_delete_file_1)); |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2460 } |
|
e930bf84753c
(internal_delete_file, internal_delete_file_1): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
9962
diff
changeset
|
2461 |
| 230 | 2462 DEFUN ("rename-file", Frename_file, Srename_file, 2, 3, |
| 2463 "fRename file: \nFRename %s to file: \np", | |
| 2464 "Rename FILE as NEWNAME. Both args strings.\n\ | |
| 2465 If file has names other than FILE, it continues to have those names.\n\ | |
| 2466 Signals a `file-already-exists' error if a file NEWNAME already exists\n\ | |
| 2467 unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.\n\ | |
| 2468 A number as third arg means request confirmation if NEWNAME already exists.\n\ | |
| 2469 This is what happens in interactive use with M-x.") | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2470 (file, newname, ok_if_already_exists) |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2471 Lisp_Object file, newname, ok_if_already_exists; |
| 230 | 2472 { |
| 2473 #ifdef NO_ARG_ARRAY | |
| 2474 Lisp_Object args[2]; | |
| 2475 #endif | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2476 Lisp_Object handler; |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2477 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2478 Lisp_Object encoded_file, encoded_newname; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2479 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2480 encoded_file = encoded_newname = Qnil; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2481 GCPRO4 (file, newname, encoded_file, encoded_newname); |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2482 CHECK_STRING (file, 0); |
| 230 | 2483 CHECK_STRING (newname, 1); |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2484 file = Fexpand_file_name (file, Qnil); |
| 230 | 2485 newname = Fexpand_file_name (newname, Qnil); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2486 |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2487 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2488 call the corresponding file handler. */ |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2489 handler = Ffind_file_name_handler (file, Qrename_file); |
|
3705
309c27256ceb
(Fcopy_file): Pass all the args to the handler.
Richard M. Stallman <rms@gnu.org>
parents:
3598
diff
changeset
|
2490 if (NILP (handler)) |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
2491 handler = Ffind_file_name_handler (newname, Qrename_file); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2492 if (!NILP (handler)) |
|
6370
51a014b7c656
(Frename_file, Fcopy_file, Fadd_name_to_file, Fmake_symbolic_link): Fix typo
Karl Heuer <kwzh@gnu.org>
parents:
6367
diff
changeset
|
2493 RETURN_UNGCPRO (call4 (handler, Qrename_file, |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2494 file, newname, ok_if_already_exists)); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2495 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2496 encoded_file = ENCODE_FILE (file); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2497 encoded_newname = ENCODE_FILE (newname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2498 |
| 485 | 2499 if (NILP (ok_if_already_exists) |
|
9131
2190d1e7a69f
(Ffind_file_name_handler, Fcopy_file, Frename_file, Fadd_name_to_file,
Karl Heuer <kwzh@gnu.org>
parents:
9078
diff
changeset
|
2500 || INTEGERP (ok_if_already_exists)) |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2501 barf_or_query_if_file_exists (encoded_newname, "rename to it", |
|
21304
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2502 INTEGERP (ok_if_already_exists), 0, 0); |
| 230 | 2503 #ifndef BSD4_1 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2504 if (0 > rename (XSTRING (encoded_file)->data, XSTRING (encoded_newname)->data)) |
| 230 | 2505 #else |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2506 if (0 > link (XSTRING (encoded_file)->data, XSTRING (encoded_newname)->data) |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2507 || 0 > unlink (XSTRING (encoded_file)->data)) |
| 230 | 2508 #endif |
| 2509 { | |
| 2510 if (errno == EXDEV) | |
| 2511 { | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2512 Fcopy_file (file, newname, |
|
3963
39caef7a70c2
(Frename_file): After prompting for ok-if-already-exists, pass only nil or
Roland McGrath <roland@gnu.org>
parents:
3829
diff
changeset
|
2513 /* We have already prompted if it was an integer, |
|
39caef7a70c2
(Frename_file): After prompting for ok-if-already-exists, pass only nil or
Roland McGrath <roland@gnu.org>
parents:
3829
diff
changeset
|
2514 so don't have copy-file prompt again. */ |
|
39caef7a70c2
(Frename_file): After prompting for ok-if-already-exists, pass only nil or
Roland McGrath <roland@gnu.org>
parents:
3829
diff
changeset
|
2515 NILP (ok_if_already_exists) ? Qnil : Qt, Qt); |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2516 Fdelete_file (file); |
| 230 | 2517 } |
| 2518 else | |
| 2519 #ifdef NO_ARG_ARRAY | |
| 2520 { | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2521 args[0] = file; |
| 230 | 2522 args[1] = newname; |
| 2523 report_file_error ("Renaming", Flist (2, args)); | |
| 2524 } | |
| 2525 #else | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2526 report_file_error ("Renaming", Flist (2, &file)); |
| 230 | 2527 #endif |
| 2528 } | |
| 2529 UNGCPRO; | |
| 2530 return Qnil; | |
| 2531 } | |
| 2532 | |
| 2533 DEFUN ("add-name-to-file", Fadd_name_to_file, Sadd_name_to_file, 2, 3, | |
| 2534 "fAdd name to file: \nFName to add to %s: \np", | |
| 2535 "Give FILE additional name NEWNAME. Both args strings.\n\ | |
| 2536 Signals a `file-already-exists' error if a file NEWNAME already exists\n\ | |
| 2537 unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.\n\ | |
| 2538 A number as third arg means request confirmation if NEWNAME already exists.\n\ | |
| 2539 This is what happens in interactive use with M-x.") | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2540 (file, newname, ok_if_already_exists) |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2541 Lisp_Object file, newname, ok_if_already_exists; |
| 230 | 2542 { |
| 2543 #ifdef NO_ARG_ARRAY | |
| 2544 Lisp_Object args[2]; | |
| 2545 #endif | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2546 Lisp_Object handler; |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2547 Lisp_Object encoded_file, encoded_newname; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2548 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2549 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2550 GCPRO4 (file, newname, encoded_file, encoded_newname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2551 encoded_file = encoded_newname = Qnil; |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2552 CHECK_STRING (file, 0); |
| 230 | 2553 CHECK_STRING (newname, 1); |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2554 file = Fexpand_file_name (file, Qnil); |
| 230 | 2555 newname = Fexpand_file_name (newname, Qnil); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2556 |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2557 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2558 call the corresponding file handler. */ |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2559 handler = Ffind_file_name_handler (file, Qadd_name_to_file); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2560 if (!NILP (handler)) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2561 RETURN_UNGCPRO (call4 (handler, Qadd_name_to_file, file, |
|
6370
51a014b7c656
(Frename_file, Fcopy_file, Fadd_name_to_file, Fmake_symbolic_link): Fix typo
Karl Heuer <kwzh@gnu.org>
parents:
6367
diff
changeset
|
2562 newname, ok_if_already_exists)); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2563 |
|
12985
3adacdaa1d3f
(Fmake_symbolic_link, Fadd_name_to_file):
Richard M. Stallman <rms@gnu.org>
parents:
12853
diff
changeset
|
2564 /* If the new name has special constructs in it, |
|
3adacdaa1d3f
(Fmake_symbolic_link, Fadd_name_to_file):
Richard M. Stallman <rms@gnu.org>
parents:
12853
diff
changeset
|
2565 call the corresponding file handler. */ |
|
3adacdaa1d3f
(Fmake_symbolic_link, Fadd_name_to_file):
Richard M. Stallman <rms@gnu.org>
parents:
12853
diff
changeset
|
2566 handler = Ffind_file_name_handler (newname, Qadd_name_to_file); |
|
3adacdaa1d3f
(Fmake_symbolic_link, Fadd_name_to_file):
Richard M. Stallman <rms@gnu.org>
parents:
12853
diff
changeset
|
2567 if (!NILP (handler)) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2568 RETURN_UNGCPRO (call4 (handler, Qadd_name_to_file, file, |
|
12985
3adacdaa1d3f
(Fmake_symbolic_link, Fadd_name_to_file):
Richard M. Stallman <rms@gnu.org>
parents:
12853
diff
changeset
|
2569 newname, ok_if_already_exists)); |
|
3adacdaa1d3f
(Fmake_symbolic_link, Fadd_name_to_file):
Richard M. Stallman <rms@gnu.org>
parents:
12853
diff
changeset
|
2570 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2571 encoded_file = ENCODE_FILE (file); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2572 encoded_newname = ENCODE_FILE (newname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2573 |
| 485 | 2574 if (NILP (ok_if_already_exists) |
|
9131
2190d1e7a69f
(Ffind_file_name_handler, Fcopy_file, Frename_file, Fadd_name_to_file,
Karl Heuer <kwzh@gnu.org>
parents:
9078
diff
changeset
|
2575 || INTEGERP (ok_if_already_exists)) |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2576 barf_or_query_if_file_exists (encoded_newname, "make it a new name", |
|
21304
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2577 INTEGERP (ok_if_already_exists), 0, 0); |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2578 |
| 230 | 2579 unlink (XSTRING (newname)->data); |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2580 if (0 > link (XSTRING (encoded_file)->data, XSTRING (encoded_newname)->data)) |
| 230 | 2581 { |
| 2582 #ifdef NO_ARG_ARRAY | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2583 args[0] = file; |
| 230 | 2584 args[1] = newname; |
| 2585 report_file_error ("Adding new name", Flist (2, args)); | |
| 2586 #else | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2587 report_file_error ("Adding new name", Flist (2, &file)); |
| 230 | 2588 #endif |
| 2589 } | |
| 2590 | |
| 2591 UNGCPRO; | |
| 2592 return Qnil; | |
| 2593 } | |
| 2594 | |
| 2595 #ifdef S_IFLNK | |
| 2596 DEFUN ("make-symbolic-link", Fmake_symbolic_link, Smake_symbolic_link, 2, 3, | |
| 2597 "FMake symbolic link to file: \nFMake symbolic link to file %s: \np", | |
| 2598 "Make a symbolic link to FILENAME, named LINKNAME. Both args strings.\n\ | |
|
8738
56c445a92c4c
(Fset_default_file_modes): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
8703
diff
changeset
|
2599 Signals a `file-already-exists' error if a file LINKNAME already exists\n\ |
| 230 | 2600 unless optional third argument OK-IF-ALREADY-EXISTS is non-nil.\n\ |
|
8738
56c445a92c4c
(Fset_default_file_modes): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
8703
diff
changeset
|
2601 A number as third arg means request confirmation if LINKNAME already exists.\n\ |
| 230 | 2602 This happens for interactive use with M-x.") |
| 732 | 2603 (filename, linkname, ok_if_already_exists) |
| 2604 Lisp_Object filename, linkname, ok_if_already_exists; | |
| 230 | 2605 { |
| 2606 #ifdef NO_ARG_ARRAY | |
| 2607 Lisp_Object args[2]; | |
| 2608 #endif | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2609 Lisp_Object handler; |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2610 Lisp_Object encoded_filename, encoded_linkname; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2611 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2612 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2613 GCPRO4 (filename, linkname, encoded_filename, encoded_linkname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2614 encoded_filename = encoded_linkname = Qnil; |
| 230 | 2615 CHECK_STRING (filename, 0); |
| 732 | 2616 CHECK_STRING (linkname, 1); |
|
5245
4a9b93b0eac3
(Fmake_symbolic_link): Do expand FILENAME if starts with ~.
Richard M. Stallman <rms@gnu.org>
parents:
5129
diff
changeset
|
2617 /* If the link target has a ~, we must expand it to get |
|
4a9b93b0eac3
(Fmake_symbolic_link): Do expand FILENAME if starts with ~.
Richard M. Stallman <rms@gnu.org>
parents:
5129
diff
changeset
|
2618 a truly valid file name. Otherwise, do not expand; |
|
4a9b93b0eac3
(Fmake_symbolic_link): Do expand FILENAME if starts with ~.
Richard M. Stallman <rms@gnu.org>
parents:
5129
diff
changeset
|
2619 we want to permit links to relative file names. */ |
|
4a9b93b0eac3
(Fmake_symbolic_link): Do expand FILENAME if starts with ~.
Richard M. Stallman <rms@gnu.org>
parents:
5129
diff
changeset
|
2620 if (XSTRING (filename)->data[0] == '~') |
|
4a9b93b0eac3
(Fmake_symbolic_link): Do expand FILENAME if starts with ~.
Richard M. Stallman <rms@gnu.org>
parents:
5129
diff
changeset
|
2621 filename = Fexpand_file_name (filename, Qnil); |
| 732 | 2622 linkname = Fexpand_file_name (linkname, Qnil); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2623 |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2624 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2625 call the corresponding file handler. */ |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
2626 handler = Ffind_file_name_handler (filename, Qmake_symbolic_link); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2627 if (!NILP (handler)) |
|
6370
51a014b7c656
(Frename_file, Fcopy_file, Fadd_name_to_file, Fmake_symbolic_link): Fix typo
Karl Heuer <kwzh@gnu.org>
parents:
6367
diff
changeset
|
2628 RETURN_UNGCPRO (call4 (handler, Qmake_symbolic_link, filename, |
|
51a014b7c656
(Frename_file, Fcopy_file, Fadd_name_to_file, Fmake_symbolic_link): Fix typo
Karl Heuer <kwzh@gnu.org>
parents:
6367
diff
changeset
|
2629 linkname, ok_if_already_exists)); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2630 |
|
12985
3adacdaa1d3f
(Fmake_symbolic_link, Fadd_name_to_file):
Richard M. Stallman <rms@gnu.org>
parents:
12853
diff
changeset
|
2631 /* If the new link name has special constructs in it, |
|
3adacdaa1d3f
(Fmake_symbolic_link, Fadd_name_to_file):
Richard M. Stallman <rms@gnu.org>
parents:
12853
diff
changeset
|
2632 call the corresponding file handler. */ |
|
3adacdaa1d3f
(Fmake_symbolic_link, Fadd_name_to_file):
Richard M. Stallman <rms@gnu.org>
parents:
12853
diff
changeset
|
2633 handler = Ffind_file_name_handler (linkname, Qmake_symbolic_link); |
|
3adacdaa1d3f
(Fmake_symbolic_link, Fadd_name_to_file):
Richard M. Stallman <rms@gnu.org>
parents:
12853
diff
changeset
|
2634 if (!NILP (handler)) |
|
3adacdaa1d3f
(Fmake_symbolic_link, Fadd_name_to_file):
Richard M. Stallman <rms@gnu.org>
parents:
12853
diff
changeset
|
2635 RETURN_UNGCPRO (call4 (handler, Qmake_symbolic_link, filename, |
|
3adacdaa1d3f
(Fmake_symbolic_link, Fadd_name_to_file):
Richard M. Stallman <rms@gnu.org>
parents:
12853
diff
changeset
|
2636 linkname, ok_if_already_exists)); |
|
3adacdaa1d3f
(Fmake_symbolic_link, Fadd_name_to_file):
Richard M. Stallman <rms@gnu.org>
parents:
12853
diff
changeset
|
2637 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2638 encoded_filename = ENCODE_FILE (filename); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2639 encoded_linkname = ENCODE_FILE (linkname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2640 |
| 485 | 2641 if (NILP (ok_if_already_exists) |
|
9131
2190d1e7a69f
(Ffind_file_name_handler, Fcopy_file, Frename_file, Fadd_name_to_file,
Karl Heuer <kwzh@gnu.org>
parents:
9078
diff
changeset
|
2642 || INTEGERP (ok_if_already_exists)) |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2643 barf_or_query_if_file_exists (encoded_linkname, "make it a link", |
|
21304
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
2644 INTEGERP (ok_if_already_exists), 0, 0); |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2645 if (0 > symlink (XSTRING (encoded_filename)->data, |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2646 XSTRING (encoded_linkname)->data)) |
| 230 | 2647 { |
| 2648 /* If we didn't complain already, silently delete existing file. */ | |
| 2649 if (errno == EEXIST) | |
| 2650 { | |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2651 unlink (XSTRING (encoded_linkname)->data); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2652 if (0 <= symlink (XSTRING (encoded_filename)->data, |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2653 XSTRING (encoded_linkname)->data)) |
|
8602
99f6ae4160f5
(Fmake_symbolic_link, Ffile_accessible_directory_p, Finsert_file_contents,
Karl Heuer <kwzh@gnu.org>
parents:
8597
diff
changeset
|
2654 { |
|
99f6ae4160f5
(Fmake_symbolic_link, Ffile_accessible_directory_p, Finsert_file_contents,
Karl Heuer <kwzh@gnu.org>
parents:
8597
diff
changeset
|
2655 UNGCPRO; |
|
99f6ae4160f5
(Fmake_symbolic_link, Ffile_accessible_directory_p, Finsert_file_contents,
Karl Heuer <kwzh@gnu.org>
parents:
8597
diff
changeset
|
2656 return Qnil; |
|
99f6ae4160f5
(Fmake_symbolic_link, Ffile_accessible_directory_p, Finsert_file_contents,
Karl Heuer <kwzh@gnu.org>
parents:
8597
diff
changeset
|
2657 } |
| 230 | 2658 } |
| 2659 | |
| 2660 #ifdef NO_ARG_ARRAY | |
| 2661 args[0] = filename; | |
| 732 | 2662 args[1] = linkname; |
| 230 | 2663 report_file_error ("Making symbolic link", Flist (2, args)); |
| 2664 #else | |
| 2665 report_file_error ("Making symbolic link", Flist (2, &filename)); | |
| 2666 #endif | |
| 2667 } | |
| 2668 UNGCPRO; | |
| 2669 return Qnil; | |
| 2670 } | |
| 2671 #endif /* S_IFLNK */ | |
| 2672 | |
| 2673 #ifdef VMS | |
| 2674 | |
| 2675 DEFUN ("define-logical-name", Fdefine_logical_name, Sdefine_logical_name, | |
| 2676 2, 2, "sDefine logical name: \nsDefine logical name %s as: ", | |
| 2677 "Define the job-wide logical name NAME to have the value STRING.\n\ | |
| 2678 If STRING is nil or a null string, the logical name NAME is deleted.") | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2679 (name, string) |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2680 Lisp_Object name; |
| 230 | 2681 Lisp_Object string; |
| 2682 { | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2683 CHECK_STRING (name, 0); |
| 485 | 2684 if (NILP (string)) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2685 delete_logical_name (XSTRING (name)->data); |
| 230 | 2686 else |
| 2687 { | |
| 2688 CHECK_STRING (string, 1); | |
| 2689 | |
| 2690 if (XSTRING (string)->size == 0) | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2691 delete_logical_name (XSTRING (name)->data); |
| 230 | 2692 else |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
2693 define_logical_name (XSTRING (name)->data, XSTRING (string)->data); |
| 230 | 2694 } |
| 2695 | |
| 2696 return string; | |
| 2697 } | |
| 2698 #endif /* VMS */ | |
| 2699 | |
| 2700 #ifdef HPUX_NET | |
| 2701 | |
| 2702 DEFUN ("sysnetunam", Fsysnetunam, Ssysnetunam, 2, 2, 0, | |
| 2703 "Open a network connection to PATH using LOGIN as the login string.") | |
| 2704 (path, login) | |
| 2705 Lisp_Object path, login; | |
| 2706 { | |
| 2707 int netresult; | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2708 |
| 230 | 2709 CHECK_STRING (path, 0); |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2710 CHECK_STRING (login, 0); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2711 |
| 230 | 2712 netresult = netunam (XSTRING (path)->data, XSTRING (login)->data); |
| 2713 | |
| 2714 if (netresult == -1) | |
| 2715 return Qnil; | |
| 2716 else | |
| 2717 return Qt; | |
| 2718 } | |
| 2719 #endif /* HPUX_NET */ | |
| 2720 | |
| 2721 DEFUN ("file-name-absolute-p", Ffile_name_absolute_p, Sfile_name_absolute_p, | |
| 2722 1, 1, 0, | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2723 "Return t if file FILENAME specifies an absolute file name.\n\ |
| 230 | 2724 On Unix, this is a name starting with a `/' or a `~'.") |
| 2725 (filename) | |
| 2726 Lisp_Object filename; | |
| 2727 { | |
| 2728 unsigned char *ptr; | |
| 2729 | |
| 2730 CHECK_STRING (filename, 0); | |
| 2731 ptr = XSTRING (filename)->data; | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2732 if (IS_DIRECTORY_SEP (*ptr) || *ptr == '~' |
| 230 | 2733 #ifdef VMS |
| 2734 /* ??? This criterion is probably wrong for '<'. */ | |
| 2735 || index (ptr, ':') || index (ptr, '<') | |
| 2736 || (*ptr == '[' && (ptr[1] != '-' || (ptr[2] != '.' && ptr[2] != ']')) | |
| 2737 && ptr[1] != '.') | |
| 2738 #endif /* VMS */ | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2739 #ifdef DOS_NT |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2740 || (IS_DRIVE (*ptr) && ptr[1] == ':' && IS_DIRECTORY_SEP (ptr[2])) |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
2741 #endif |
| 230 | 2742 ) |
| 2743 return Qt; | |
| 2744 else | |
| 2745 return Qnil; | |
| 2746 } | |
|
9078
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2747 |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2748 /* Return nonzero if file FILENAME exists and can be executed. */ |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2749 |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2750 static int |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2751 check_executable (filename) |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2752 char *filename; |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2753 { |
|
12642
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2754 #ifdef DOS_NT |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2755 int len = strlen (filename); |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2756 char *suffix; |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2757 struct stat st; |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2758 if (stat (filename, &st) < 0) |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2759 return 0; |
|
15625
537b4cdf9eff
(Fcopy_file): Use st_ino under DJGPP v2 and later to
Karl Heuer <kwzh@gnu.org>
parents:
15617
diff
changeset
|
2760 #if defined (WINDOWSNT) || (defined (MSDOS) && __DJGPP__ > 1) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2761 return ((st.st_mode & S_IEXEC) != 0); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2762 #else |
|
12642
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2763 return (S_ISREG (st.st_mode) |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2764 && len >= 5 |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2765 && (stricmp ((suffix = filename + len-4), ".com") == 0 |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2766 || stricmp (suffix, ".exe") == 0 |
|
13541
2178c4d6a427
(check_executable) [DOS_NT]: Treat all dirs as executable.
Richard M. Stallman <rms@gnu.org>
parents:
13451
diff
changeset
|
2767 || stricmp (suffix, ".bat") == 0) |
|
2178c4d6a427
(check_executable) [DOS_NT]: Treat all dirs as executable.
Richard M. Stallman <rms@gnu.org>
parents:
13451
diff
changeset
|
2768 || (st.st_mode & S_IFMT) == S_IFDIR); |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2769 #endif /* not WINDOWSNT */ |
|
12642
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2770 #else /* not DOS_NT */ |
|
15533
a749d414efbb
(check_executable): Use euidaccess, not eaccess.
Richard M. Stallman <rms@gnu.org>
parents:
15427
diff
changeset
|
2771 #ifdef HAVE_EUIDACCESS |
|
a749d414efbb
(check_executable): Use euidaccess, not eaccess.
Richard M. Stallman <rms@gnu.org>
parents:
15427
diff
changeset
|
2772 return (euidaccess (filename, 1) >= 0); |
|
9078
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2773 #else |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2774 /* Access isn't quite right because it uses the real uid |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2775 and we really want to test with the effective uid. |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2776 But Unix doesn't give us a right way to do it. */ |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2777 return (access (filename, 1) >= 0); |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2778 #endif |
|
12642
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2779 #endif /* not DOS_NT */ |
|
9078
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2780 } |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2781 |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2782 /* Return nonzero if file FILENAME exists and can be written. */ |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2783 |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2784 static int |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2785 check_writable (filename) |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2786 char *filename; |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2787 { |
|
12642
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2788 #ifdef MSDOS |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2789 struct stat st; |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2790 if (stat (filename, &st) < 0) |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2791 return 0; |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2792 return (st.st_mode & S_IWRITE || (st.st_mode & S_IFMT) == S_IFDIR); |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2793 #else /* not MSDOS */ |
|
15738
4ccf88623c95
(check_writable): Use euidaccess, not eaccess.
Karl Heuer <kwzh@gnu.org>
parents:
15625
diff
changeset
|
2794 #ifdef HAVE_EUIDACCESS |
|
4ccf88623c95
(check_writable): Use euidaccess, not eaccess.
Karl Heuer <kwzh@gnu.org>
parents:
15625
diff
changeset
|
2795 return (euidaccess (filename, 2) >= 0); |
|
9078
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2796 #else |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2797 /* Access isn't quite right because it uses the real uid |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2798 and we really want to test with the effective uid. |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2799 But Unix doesn't give us a right way to do it. |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2800 Opening with O_WRONLY could work for an ordinary file, |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2801 but would lose for directories. */ |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2802 return (access (filename, 2) >= 0); |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2803 #endif |
|
12642
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
2804 #endif /* not MSDOS */ |
|
9078
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
2805 } |
| 230 | 2806 |
| 2807 DEFUN ("file-exists-p", Ffile_exists_p, Sfile_exists_p, 1, 1, 0, | |
| 2808 "Return t if file FILENAME exists. (This does not mean you can read it.)\n\ | |
| 2809 See also `file-readable-p' and `file-attributes'.") | |
| 2810 (filename) | |
| 2811 Lisp_Object filename; | |
| 2812 { | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2813 Lisp_Object absname; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2814 Lisp_Object handler; |
| 8597 | 2815 struct stat statbuf; |
| 230 | 2816 |
| 2817 CHECK_STRING (filename, 0); | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2818 absname = Fexpand_file_name (filename, Qnil); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2819 |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2820 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2821 call the corresponding file handler. */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2822 handler = Ffind_file_name_handler (absname, Qfile_exists_p); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2823 if (!NILP (handler)) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2824 return call2 (handler, Qfile_exists_p, absname); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2825 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2826 absname = ENCODE_FILE (absname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2827 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2828 return (stat (XSTRING (absname)->data, &statbuf) >= 0) ? Qt : Qnil; |
| 230 | 2829 } |
| 2830 | |
| 2831 DEFUN ("file-executable-p", Ffile_executable_p, Sfile_executable_p, 1, 1, 0, | |
| 2832 "Return t if FILENAME can be executed by you.\n\ | |
| 2236 | 2833 For a directory, this means you can access files in that directory.") |
| 230 | 2834 (filename) |
| 2835 Lisp_Object filename; | |
| 2836 | |
| 2837 { | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2838 Lisp_Object absname; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2839 Lisp_Object handler; |
| 230 | 2840 |
| 2841 CHECK_STRING (filename, 0); | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2842 absname = Fexpand_file_name (filename, Qnil); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2843 |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2844 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2845 call the corresponding file handler. */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2846 handler = Ffind_file_name_handler (absname, Qfile_executable_p); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2847 if (!NILP (handler)) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2848 return call2 (handler, Qfile_executable_p, absname); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2849 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2850 absname = ENCODE_FILE (absname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2851 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2852 return (check_executable (XSTRING (absname)->data) ? Qt : Qnil); |
| 230 | 2853 } |
| 2854 | |
| 2855 DEFUN ("file-readable-p", Ffile_readable_p, Sfile_readable_p, 1, 1, 0, | |
| 2856 "Return t if file FILENAME exists and you can read it.\n\ | |
| 2857 See also `file-exists-p' and `file-attributes'.") | |
| 2858 (filename) | |
| 2859 Lisp_Object filename; | |
| 2860 { | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2861 Lisp_Object absname; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2862 Lisp_Object handler; |
| 8597 | 2863 int desc; |
|
16534
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2864 int flags; |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2865 struct stat statbuf; |
| 230 | 2866 |
| 2867 CHECK_STRING (filename, 0); | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2868 absname = Fexpand_file_name (filename, Qnil); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2869 |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2870 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2871 call the corresponding file handler. */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2872 handler = Ffind_file_name_handler (absname, Qfile_readable_p); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2873 if (!NILP (handler)) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2874 return call2 (handler, Qfile_readable_p, absname); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2875 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2876 absname = ENCODE_FILE (absname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2877 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2878 #ifdef DOS_NT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2879 /* Under MS-DOS and Windows, open does not work for directories. */ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2880 if (access (XSTRING (absname)->data, 0) == 0) |
|
13902
31e37f3d8ccd
(Ffile_readable_p) [MSDOS]: Use access rather than open.
Richard M. Stallman <rms@gnu.org>
parents:
13769
diff
changeset
|
2881 return Qt; |
|
31e37f3d8ccd
(Ffile_readable_p) [MSDOS]: Use access rather than open.
Richard M. Stallman <rms@gnu.org>
parents:
13769
diff
changeset
|
2882 return Qnil; |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2883 #else /* not DOS_NT */ |
|
16534
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2884 flags = O_RDONLY; |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2885 #if defined (S_ISFIFO) && defined (O_NONBLOCK) |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2886 /* Opening a fifo without O_NONBLOCK can wait. |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2887 We don't want to wait. But we don't want to mess wth O_NONBLOCK |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2888 except in the case of a fifo, on a system which handles it. */ |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2889 desc = stat (XSTRING (absname)->data, &statbuf); |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2890 if (desc < 0) |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2891 return Qnil; |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2892 if (S_ISFIFO (statbuf.st_mode)) |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2893 flags |= O_NONBLOCK; |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2894 #endif |
|
21aae8d73ddd
(USG5 or BSD_SYSTEM or LINUX): Include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
16474
diff
changeset
|
2895 desc = open (XSTRING (absname)->data, flags); |
| 8597 | 2896 if (desc < 0) |
| 2897 return Qnil; | |
| 2898 close (desc); | |
| 2899 return Qt; | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2900 #endif /* not DOS_NT */ |
| 230 | 2901 } |
| 2902 | |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2903 /* Having this before file-symlink-p mysteriously caused it to be forgotten |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2904 on the RT/PC. */ |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2905 DEFUN ("file-writable-p", Ffile_writable_p, Sfile_writable_p, 1, 1, 0, |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2906 "Return t if file FILENAME can be written or created by you.") |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2907 (filename) |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2908 Lisp_Object filename; |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2909 { |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2910 Lisp_Object absname, dir, encoded; |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2911 Lisp_Object handler; |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2912 struct stat statbuf; |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2913 |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2914 CHECK_STRING (filename, 0); |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2915 absname = Fexpand_file_name (filename, Qnil); |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2916 |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2917 /* If the file name has special constructs in it, |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2918 call the corresponding file handler. */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2919 handler = Ffind_file_name_handler (absname, Qfile_writable_p); |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2920 if (!NILP (handler)) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2921 return call2 (handler, Qfile_writable_p, absname); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2922 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2923 encoded = ENCODE_FILE (absname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2924 if (stat (XSTRING (encoded)->data, &statbuf) >= 0) |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2925 return (check_writable (XSTRING (encoded)->data) |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2926 ? Qt : Qnil); |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2927 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
2928 dir = Ffile_name_directory (absname); |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2929 #ifdef VMS |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2930 if (!NILP (dir)) |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2931 dir = Fdirectory_file_name (dir); |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2932 #endif /* VMS */ |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2933 #ifdef MSDOS |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2934 if (!NILP (dir)) |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2935 dir = Fdirectory_file_name (dir); |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2936 #endif /* MSDOS */ |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2937 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2938 dir = ENCODE_FILE (dir); |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2939 return (check_writable (!NILP (dir) ? (char *) XSTRING (dir)->data : "") |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2940 ? Qt : Qnil); |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2941 } |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
2942 |
|
16155
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2943 DEFUN ("access-file", Faccess_file, Saccess_file, 2, 2, 0, |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2944 "Access file FILENAME, and get an error if that does not work.\n\ |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2945 The second argument STRING is used in the error message.\n\ |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2946 If there is no error, we return nil.") |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2947 (filename, string) |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2948 Lisp_Object filename, string; |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2949 { |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2950 Lisp_Object handler, encoded_filename; |
|
16155
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2951 int fd; |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2952 |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2953 CHECK_STRING (filename, 0); |
|
22658
9f320d762e2f
(Faccess_file): Check type of second argument STRING.
Richard M. Stallman <rms@gnu.org>
parents:
22613
diff
changeset
|
2954 CHECK_STRING (string, 1); |
|
16155
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2955 |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2956 /* If the file name has special constructs in it, |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2957 call the corresponding file handler. */ |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2958 handler = Ffind_file_name_handler (filename, Qaccess_file); |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2959 if (!NILP (handler)) |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2960 return call3 (handler, Qaccess_file, filename, string); |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2961 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2962 encoded_filename = ENCODE_FILE (filename); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2963 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2964 fd = open (XSTRING (encoded_filename)->data, O_RDONLY); |
|
16155
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2965 if (fd < 0) |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2966 report_file_error (XSTRING (string)->data, Fcons (filename, Qnil)); |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2967 close (fd); |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2968 |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2969 return Qnil; |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2970 } |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
2971 |
| 230 | 2972 DEFUN ("file-symlink-p", Ffile_symlink_p, Sfile_symlink_p, 1, 1, 0, |
|
5616
67a8c4a8c80e
(Ffile_symlink_p): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
5553
diff
changeset
|
2973 "Return non-nil if file FILENAME is the name of a symbolic link.\n\ |
|
67a8c4a8c80e
(Ffile_symlink_p): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
5553
diff
changeset
|
2974 The value is the name of the file to which it is linked.\n\ |
|
67a8c4a8c80e
(Ffile_symlink_p): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
5553
diff
changeset
|
2975 Otherwise returns nil.") |
| 230 | 2976 (filename) |
| 2977 Lisp_Object filename; | |
| 2978 { | |
| 2979 #ifdef S_IFLNK | |
| 2980 char *buf; | |
| 2981 int bufsize; | |
| 2982 int valsize; | |
| 2983 Lisp_Object val; | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2984 Lisp_Object handler; |
| 230 | 2985 |
| 2986 CHECK_STRING (filename, 0); | |
| 2987 filename = Fexpand_file_name (filename, Qnil); | |
| 2988 | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2989 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2990 call the corresponding file handler. */ |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
2991 handler = Ffind_file_name_handler (filename, Qfile_symlink_p); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2992 if (!NILP (handler)) |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2993 return call2 (handler, Qfile_symlink_p, filename); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
2994 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2995 filename = ENCODE_FILE (filename); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
2996 |
| 230 | 2997 bufsize = 100; |
| 2998 while (1) | |
| 2999 { | |
| 3000 buf = (char *) xmalloc (bufsize); | |
| 3001 bzero (buf, bufsize); | |
| 3002 valsize = readlink (XSTRING (filename)->data, buf, bufsize); | |
| 3003 if (valsize < bufsize) break; | |
| 3004 /* Buffer was not long enough */ | |
|
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2435
diff
changeset
|
3005 xfree (buf); |
| 230 | 3006 bufsize *= 2; |
| 3007 } | |
| 3008 if (valsize == -1) | |
| 3009 { | |
|
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2435
diff
changeset
|
3010 xfree (buf); |
| 230 | 3011 return Qnil; |
| 3012 } | |
| 3013 val = make_string (buf, valsize); | |
|
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2435
diff
changeset
|
3014 xfree (buf); |
|
21048
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
3015 val = DECODE_FILE (val); |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
3016 return val; |
| 230 | 3017 #else /* not S_IFLNK */ |
| 3018 return Qnil; | |
| 3019 #endif /* not S_IFLNK */ | |
| 3020 } | |
| 3021 | |
| 3022 DEFUN ("file-directory-p", Ffile_directory_p, Sfile_directory_p, 1, 1, 0, | |
| 18431 | 3023 "Return t if FILENAME names an existing directory.") |
| 230 | 3024 (filename) |
| 3025 Lisp_Object filename; | |
| 3026 { | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3027 register Lisp_Object absname; |
| 230 | 3028 struct stat st; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3029 Lisp_Object handler; |
| 230 | 3030 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3031 absname = expand_and_dir_to_file (filename, current_buffer->directory); |
| 230 | 3032 |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3033 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3034 call the corresponding file handler. */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3035 handler = Ffind_file_name_handler (absname, Qfile_directory_p); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3036 if (!NILP (handler)) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3037 return call2 (handler, Qfile_directory_p, absname); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3038 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3039 absname = ENCODE_FILE (absname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3040 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3041 if (stat (XSTRING (absname)->data, &st) < 0) |
| 230 | 3042 return Qnil; |
| 3043 return (st.st_mode & S_IFMT) == S_IFDIR ? Qt : Qnil; | |
| 3044 } | |
| 3045 | |
| 536 | 3046 DEFUN ("file-accessible-directory-p", Ffile_accessible_directory_p, Sfile_accessible_directory_p, 1, 1, 0, |
| 3047 "Return t if file FILENAME is the name of a directory as a file,\n\ | |
| 3048 and files in that directory can be opened by you. In order to use a\n\ | |
| 3049 directory as a buffer's current directory, this predicate must return true.\n\ | |
| 3050 A directory name spec may be given instead; then the value is t\n\ | |
| 3051 if the directory so specified exists and really is a readable and\n\ | |
| 3052 searchable directory.") | |
| 3053 (filename) | |
| 3054 Lisp_Object filename; | |
| 3055 { | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3056 Lisp_Object handler; |
|
8602
99f6ae4160f5
(Fmake_symbolic_link, Ffile_accessible_directory_p, Finsert_file_contents,
Karl Heuer <kwzh@gnu.org>
parents:
8597
diff
changeset
|
3057 int tem; |
|
8703
aaa0730f8b1e
(Ffile_accessible_directory_p): Put back the gcpro.
Karl Heuer <kwzh@gnu.org>
parents:
8662
diff
changeset
|
3058 struct gcpro gcpro1; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3059 |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3060 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3061 call the corresponding file handler. */ |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
3062 handler = Ffind_file_name_handler (filename, Qfile_accessible_directory_p); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3063 if (!NILP (handler)) |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3064 return call2 (handler, Qfile_accessible_directory_p, filename); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3065 |
|
8703
aaa0730f8b1e
(Ffile_accessible_directory_p): Put back the gcpro.
Karl Heuer <kwzh@gnu.org>
parents:
8662
diff
changeset
|
3066 /* It's an unlikely combination, but yes we really do need to gcpro: |
|
aaa0730f8b1e
(Ffile_accessible_directory_p): Put back the gcpro.
Karl Heuer <kwzh@gnu.org>
parents:
8662
diff
changeset
|
3067 Suppose that file-accessible-directory-p has no handler, but |
|
aaa0730f8b1e
(Ffile_accessible_directory_p): Put back the gcpro.
Karl Heuer <kwzh@gnu.org>
parents:
8662
diff
changeset
|
3068 file-directory-p does have a handler; this handler causes a GC which |
|
aaa0730f8b1e
(Ffile_accessible_directory_p): Put back the gcpro.
Karl Heuer <kwzh@gnu.org>
parents:
8662
diff
changeset
|
3069 relocates the string in `filename'; and finally file-directory-p |
|
aaa0730f8b1e
(Ffile_accessible_directory_p): Put back the gcpro.
Karl Heuer <kwzh@gnu.org>
parents:
8662
diff
changeset
|
3070 returns non-nil. Then we would end up passing a garbaged string |
|
aaa0730f8b1e
(Ffile_accessible_directory_p): Put back the gcpro.
Karl Heuer <kwzh@gnu.org>
parents:
8662
diff
changeset
|
3071 to file-executable-p. */ |
|
aaa0730f8b1e
(Ffile_accessible_directory_p): Put back the gcpro.
Karl Heuer <kwzh@gnu.org>
parents:
8662
diff
changeset
|
3072 GCPRO1 (filename); |
|
8602
99f6ae4160f5
(Fmake_symbolic_link, Ffile_accessible_directory_p, Finsert_file_contents,
Karl Heuer <kwzh@gnu.org>
parents:
8597
diff
changeset
|
3073 tem = (NILP (Ffile_directory_p (filename)) |
|
99f6ae4160f5
(Fmake_symbolic_link, Ffile_accessible_directory_p, Finsert_file_contents,
Karl Heuer <kwzh@gnu.org>
parents:
8597
diff
changeset
|
3074 || NILP (Ffile_executable_p (filename))); |
|
8703
aaa0730f8b1e
(Ffile_accessible_directory_p): Put back the gcpro.
Karl Heuer <kwzh@gnu.org>
parents:
8662
diff
changeset
|
3075 UNGCPRO; |
|
8602
99f6ae4160f5
(Fmake_symbolic_link, Ffile_accessible_directory_p, Finsert_file_contents,
Karl Heuer <kwzh@gnu.org>
parents:
8597
diff
changeset
|
3076 return tem ? Qnil : Qt; |
| 536 | 3077 } |
| 3078 | |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3079 DEFUN ("file-regular-p", Ffile_regular_p, Sfile_regular_p, 1, 1, 0, |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3080 "Return t if file FILENAME is the name of a regular file.\n\ |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3081 This is the sort of file that holds an ordinary stream of data bytes.") |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3082 (filename) |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3083 Lisp_Object filename; |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3084 { |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3085 register Lisp_Object absname; |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3086 struct stat st; |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3087 Lisp_Object handler; |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3088 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3089 absname = expand_and_dir_to_file (filename, current_buffer->directory); |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3090 |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3091 /* If the file name has special constructs in it, |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3092 call the corresponding file handler. */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3093 handler = Ffind_file_name_handler (absname, Qfile_regular_p); |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3094 if (!NILP (handler)) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3095 return call2 (handler, Qfile_regular_p, absname); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3096 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3097 absname = ENCODE_FILE (absname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3098 |
|
22681
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3099 #ifdef WINDOWSNT |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3100 { |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3101 int result; |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3102 Lisp_Object tem = Vw32_get_true_file_attributes; |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3103 |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3104 /* Tell stat to use expensive method to get accurate info. */ |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3105 Vw32_get_true_file_attributes = Qt; |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3106 result = stat (XSTRING (absname)->data, &st); |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3107 Vw32_get_true_file_attributes = tem; |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3108 |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3109 if (result < 0) |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3110 return Qnil; |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3111 return (st.st_mode & S_IFMT) == S_IFREG ? Qt : Qnil; |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3112 } |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3113 #else |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3114 if (stat (XSTRING (absname)->data, &st) < 0) |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3115 return Qnil; |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3116 return (st.st_mode & S_IFMT) == S_IFREG ? Qt : Qnil; |
|
22681
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3117 #endif |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3118 } |
|
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3119 |
| 230 | 3120 DEFUN ("file-modes", Ffile_modes, Sfile_modes, 1, 1, 0, |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
3121 "Return mode bits of file named FILENAME, as an integer.") |
| 230 | 3122 (filename) |
| 3123 Lisp_Object filename; | |
| 3124 { | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3125 Lisp_Object absname; |
| 230 | 3126 struct stat st; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3127 Lisp_Object handler; |
| 230 | 3128 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3129 absname = expand_and_dir_to_file (filename, current_buffer->directory); |
| 230 | 3130 |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3131 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3132 call the corresponding file handler. */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3133 handler = Ffind_file_name_handler (absname, Qfile_modes); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3134 if (!NILP (handler)) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3135 return call2 (handler, Qfile_modes, absname); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3136 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3137 absname = ENCODE_FILE (absname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3138 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3139 if (stat (XSTRING (absname)->data, &st) < 0) |
| 230 | 3140 return Qnil; |
|
15625
537b4cdf9eff
(Fcopy_file): Use st_ino under DJGPP v2 and later to
Karl Heuer <kwzh@gnu.org>
parents:
15617
diff
changeset
|
3141 #if defined (MSDOS) && __DJGPP__ < 2 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3142 if (check_executable (XSTRING (absname)->data)) |
|
12642
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
3143 st.st_mode |= S_IEXEC; |
|
15625
537b4cdf9eff
(Fcopy_file): Use st_ino under DJGPP v2 and later to
Karl Heuer <kwzh@gnu.org>
parents:
15617
diff
changeset
|
3144 #endif /* MSDOS && __DJGPP__ < 2 */ |
|
6383
62db5566c287
(Ffile_modes) [MSDOS]: set exec-bit based on file suffix.
Karl Heuer <kwzh@gnu.org>
parents:
6370
diff
changeset
|
3145 |
| 230 | 3146 return make_number (st.st_mode & 07777); |
| 3147 } | |
| 3148 | |
| 3149 DEFUN ("set-file-modes", Fset_file_modes, Sset_file_modes, 2, 2, 0, | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
3150 "Set mode bits of file named FILENAME to MODE (an integer).\n\ |
| 230 | 3151 Only the 12 low bits of MODE are used.") |
| 3152 (filename, mode) | |
| 3153 Lisp_Object filename, mode; | |
| 3154 { | |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3155 Lisp_Object absname, encoded_absname; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3156 Lisp_Object handler; |
| 230 | 3157 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3158 absname = Fexpand_file_name (filename, current_buffer->directory); |
| 230 | 3159 CHECK_NUMBER (mode, 1); |
| 3160 | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3161 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3162 call the corresponding file handler. */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3163 handler = Ffind_file_name_handler (absname, Qset_file_modes); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3164 if (!NILP (handler)) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3165 return call3 (handler, Qset_file_modes, absname, mode); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3166 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3167 encoded_absname = ENCODE_FILE (absname); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3168 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3169 if (chmod (XSTRING (encoded_absname)->data, XINT (mode)) < 0) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3170 report_file_error ("Doing chmod", Fcons (absname, Qnil)); |
| 230 | 3171 |
| 3172 return Qnil; | |
| 3173 } | |
| 3174 | |
|
1763
65e858c07a8b
(Fset_default_file_modes, Fdefault_file_modes): Renamed from .._mode.
Richard M. Stallman <rms@gnu.org>
parents:
1762
diff
changeset
|
3175 DEFUN ("set-default-file-modes", Fset_default_file_modes, Sset_default_file_modes, 1, 1, 0, |
|
1762
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3176 "Set the file permission bits for newly created files.\n\ |
|
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3177 The argument MODE should be an integer; only the low 9 bits are used.\n\ |
| 550 | 3178 This setting is inherited by subprocesses.") |
|
1762
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3179 (mode) |
|
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3180 Lisp_Object mode; |
| 550 | 3181 { |
|
1762
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3182 CHECK_NUMBER (mode, 0); |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3183 |
|
1762
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3184 umask ((~ XINT (mode)) & 0777); |
| 550 | 3185 |
| 3186 return Qnil; | |
| 3187 } | |
| 3188 | |
|
1763
65e858c07a8b
(Fset_default_file_modes, Fdefault_file_modes): Renamed from .._mode.
Richard M. Stallman <rms@gnu.org>
parents:
1762
diff
changeset
|
3189 DEFUN ("default-file-modes", Fdefault_file_modes, Sdefault_file_modes, 0, 0, 0, |
|
1762
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3190 "Return the default file protection for created files.\n\ |
|
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3191 The value is an integer.") |
| 550 | 3192 () |
| 3193 { | |
|
1762
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3194 int realmask; |
|
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3195 Lisp_Object value; |
|
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3196 |
|
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3197 realmask = umask (0); |
|
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3198 umask (realmask); |
|
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3199 |
|
9266
811ad893828b
(Fdefault_file_modes, Finsert_file_contents, Fdo_auto_save): Use new accessor
Karl Heuer <kwzh@gnu.org>
parents:
9241
diff
changeset
|
3200 XSETINT (value, (~ realmask) & 0777); |
|
1762
d70878f22be4
(Fset_default_file_mode, Fdefault_file_mode):
Richard M. Stallman <rms@gnu.org>
parents:
1761
diff
changeset
|
3201 return value; |
| 550 | 3202 } |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
3203 |
|
689
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
3204 #ifdef unix |
|
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
3205 |
|
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
3206 DEFUN ("unix-sync", Funix_sync, Sunix_sync, 0, 0, "", |
|
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
3207 "Tell Unix to finish all pending disk updates.") |
|
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
3208 () |
|
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
3209 { |
|
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
3210 sync (); |
|
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
3211 return Qnil; |
|
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
3212 } |
|
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
3213 |
|
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
3214 #endif /* unix */ |
|
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
3215 |
| 230 | 3216 DEFUN ("file-newer-than-file-p", Ffile_newer_than_file_p, Sfile_newer_than_file_p, 2, 2, 0, |
| 3217 "Return t if file FILE1 is newer than file FILE2.\n\ | |
| 3218 If FILE1 does not exist, the answer is nil;\n\ | |
| 3219 otherwise, if FILE2 does not exist, the answer is t.") | |
| 3220 (file1, file2) | |
| 3221 Lisp_Object file1, file2; | |
| 3222 { | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3223 Lisp_Object absname1, absname2; |
| 230 | 3224 struct stat st; |
| 3225 int mtime1; | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3226 Lisp_Object handler; |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
3227 struct gcpro gcpro1, gcpro2; |
| 230 | 3228 |
| 3229 CHECK_STRING (file1, 0); | |
| 3230 CHECK_STRING (file2, 0); | |
| 3231 | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3232 absname1 = Qnil; |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3233 GCPRO2 (absname1, file2); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3234 absname1 = expand_and_dir_to_file (file1, current_buffer->directory); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3235 absname2 = expand_and_dir_to_file (file2, current_buffer->directory); |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
3236 UNGCPRO; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3237 |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3238 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3239 call the corresponding file handler. */ |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3240 handler = Ffind_file_name_handler (absname1, Qfile_newer_than_file_p); |
|
3705
309c27256ceb
(Fcopy_file): Pass all the args to the handler.
Richard M. Stallman <rms@gnu.org>
parents:
3598
diff
changeset
|
3241 if (NILP (handler)) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3242 handler = Ffind_file_name_handler (absname2, Qfile_newer_than_file_p); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3243 if (!NILP (handler)) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3244 return call3 (handler, Qfile_newer_than_file_p, absname1, absname2); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3245 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3246 GCPRO2 (absname1, absname2); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3247 absname1 = ENCODE_FILE (absname1); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3248 absname2 = ENCODE_FILE (absname2); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3249 UNGCPRO; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3250 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3251 if (stat (XSTRING (absname1)->data, &st) < 0) |
| 230 | 3252 return Qnil; |
| 3253 | |
| 3254 mtime1 = st.st_mtime; | |
| 3255 | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
3256 if (stat (XSTRING (absname2)->data, &st) < 0) |
| 230 | 3257 return Qt; |
| 3258 | |
| 3259 return (mtime1 > st.st_mtime) ? Qt : Qnil; | |
| 3260 } | |
| 3261 | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3262 #ifdef DOS_NT |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
3263 Lisp_Object Qfind_buffer_file_type; |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3264 #endif /* DOS_NT */ |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
3265 |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3266 #ifndef READ_BUF_SIZE |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3267 #define READ_BUF_SIZE (64 << 10) |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3268 #endif |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3269 |
|
22492
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3270 /* This function is called when a function bound to |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3271 Vset_auto_coding_function causes some error. At that time, a text |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3272 of a file has already been inserted in the current buffer, but, |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3273 markers has not yet been adjusted. Thus we must adjust markers |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3274 here. We are sure that the buffer was empty before the text of the |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3275 file was inserted. */ |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3276 |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3277 static Lisp_Object |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3278 set_auto_coding_unwind (multibyte) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3279 Lisp_Object multibyte; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3280 { |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3281 int inserted = Z_BYTE - BEG_BYTE; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3282 |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3283 if (!NILP (multibyte)) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3284 inserted = multibyte_chars_in_text (GPT_ADDR - inserted, inserted); |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3285 adjust_after_insert (PT, PT_BYTE, Z, Z_BYTE, inserted); |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3286 |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3287 return Qnil; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3288 } |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3289 |
| 230 | 3290 DEFUN ("insert-file-contents", Finsert_file_contents, Sinsert_file_contents, |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3291 1, 5, 0, |
| 230 | 3292 "Insert contents of file FILENAME after point.\n\ |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3293 Returns list of absolute file name and number of bytes inserted.\n\ |
| 230 | 3294 If second argument VISIT is non-nil, the buffer's visited filename\n\ |
| 3295 and last save file modtime are set, and it is marked unmodified.\n\ | |
| 3296 If visiting and the file does not exist, visiting is completed\n\ | |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3297 before the error is signaled.\n\ |
|
3787
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3298 The optional third and fourth arguments BEG and END\n\ |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3299 specify what portion of the file to insert.\n\ |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3300 These arguments count bytes in the file, not characters in the buffer.\n\ |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3301 If VISIT is non-nil, BEG and END must be nil.\n\ |
| 16696 | 3302 \n\ |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3303 If optional fifth argument REPLACE is non-nil,\n\ |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3304 it means replace the current buffer contents (in the accessible portion)\n\ |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3305 with the file contents. This is better than simply deleting and inserting\n\ |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3306 the whole thing because (1) it preserves some marker positions\n\ |
| 16696 | 3307 and (2) it puts less data in the undo list.\n\ |
| 3308 When REPLACE is non-nil, the value is the number of characters actually read,\n\ | |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3309 which is often less than the number of characters to be read.\n\ |
|
22362
e845baca3407
(Finsert_file_contents): Always update
Karl Heuer <kwzh@gnu.org>
parents:
22311
diff
changeset
|
3310 \n\ |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3311 This does code conversion according to the value of\n\ |
|
22362
e845baca3407
(Finsert_file_contents): Always update
Karl Heuer <kwzh@gnu.org>
parents:
22311
diff
changeset
|
3312 `coding-system-for-read' or `file-coding-system-alist',\n\ |
|
e845baca3407
(Finsert_file_contents): Always update
Karl Heuer <kwzh@gnu.org>
parents:
22311
diff
changeset
|
3313 and sets the variable `last-coding-system-used' to the coding system\n\ |
|
e845baca3407
(Finsert_file_contents): Always update
Karl Heuer <kwzh@gnu.org>
parents:
22311
diff
changeset
|
3314 actually used.") |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3315 (filename, visit, beg, end, replace) |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3316 Lisp_Object filename, visit, beg, end, replace; |
| 230 | 3317 { |
| 3318 struct stat st; | |
| 3319 register int fd; | |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3320 int inserted = 0; |
| 230 | 3321 register int how_much; |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3322 register int unprocessed; |
| 230 | 3323 int count = specpdl_ptr - specpdl; |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3324 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3325 Lisp_Object handler, val, insval, orig_filename; |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
3326 Lisp_Object p; |
|
3787
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3327 int total; |
|
9921
62392796a691
(Finsert_file_contents): Init not_regular at the beginning.
Richard M. Stallman <rms@gnu.org>
parents:
9915
diff
changeset
|
3328 int not_regular = 0; |
|
22053
8697087ea026
(Finsert_file_contents): Check that a -*- coding: -*- spec
Richard M. Stallman <rms@gnu.org>
parents:
22042
diff
changeset
|
3329 unsigned char read_buf[READ_BUF_SIZE]; |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3330 struct coding_system coding; |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3331 unsigned char buffer[1 << 14]; |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3332 int replace_handled = 0; |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3333 int set_coding_system = 0; |
|
22492
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3334 int coding_system_decided = 0; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3335 |
|
10304
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
3336 if (current_buffer->base_buffer && ! NILP (visit)) |
|
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
3337 error ("Cannot do file visiting in an indirect buffer"); |
|
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
3338 |
|
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
3339 if (!NILP (current_buffer->read_only)) |
|
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
3340 Fbarf_if_buffer_read_only (); |
|
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
3341 |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3342 val = Qnil; |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
3343 p = Qnil; |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3344 orig_filename = Qnil; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3345 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3346 GCPRO4 (filename, val, p, orig_filename); |
| 230 | 3347 |
| 3348 CHECK_STRING (filename, 0); | |
| 3349 filename = Fexpand_file_name (filename, Qnil); | |
| 3350 | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3351 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3352 call the corresponding file handler. */ |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
3353 handler = Ffind_file_name_handler (filename, Qinsert_file_contents); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3354 if (!NILP (handler)) |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3355 { |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3356 val = call6 (handler, Qinsert_file_contents, filename, |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3357 visit, beg, end, replace); |
|
22450
455438d7b6c7
(Finsert_file_contents): After calling handler,
Kenichi Handa <handa@m17n.org>
parents:
22441
diff
changeset
|
3358 if (CONSP (val) && CONSP (XCONS (val)->cdr)) |
|
22478
7cb57c276eea
(Finsert_file_contents): Fix change to set INSERTED.
Richard M. Stallman <rms@gnu.org>
parents:
22451
diff
changeset
|
3359 inserted = XINT (XCONS (XCONS (val)->cdr)->car); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3360 goto handled; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3361 } |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
3362 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3363 orig_filename = filename; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3364 filename = ENCODE_FILE (filename); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3365 |
| 230 | 3366 fd = -1; |
| 3367 | |
|
22681
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3368 #ifdef WINDOWSNT |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3369 { |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3370 Lisp_Object tem = Vw32_get_true_file_attributes; |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3371 |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3372 /* Tell stat to use expensive method to get accurate info. */ |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3373 Vw32_get_true_file_attributes = Qt; |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3374 total = stat (XSTRING (filename)->data, &st); |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3375 Vw32_get_true_file_attributes = tem; |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3376 } |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3377 if (total < 0) |
|
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3378 #else |
| 230 | 3379 #ifndef APOLLO |
|
8047
fb950b66d754
(Finsert_file_contents): Fix check for non-regular files.
Karl Heuer <kwzh@gnu.org>
parents:
7695
diff
changeset
|
3380 if (stat (XSTRING (filename)->data, &st) < 0) |
| 230 | 3381 #else |
| 8597 | 3382 if ((fd = open (XSTRING (filename)->data, O_RDONLY)) < 0 |
| 230 | 3383 || fstat (fd, &st) < 0) |
| 3384 #endif /* not APOLLO */ | |
|
22681
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
3385 #endif /* WINDOWSNT */ |
| 230 | 3386 { |
| 3387 if (fd >= 0) close (fd); | |
|
8047
fb950b66d754
(Finsert_file_contents): Fix check for non-regular files.
Karl Heuer <kwzh@gnu.org>
parents:
7695
diff
changeset
|
3388 badopen: |
| 485 | 3389 if (NILP (visit)) |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3390 report_file_error ("Opening input file", Fcons (orig_filename, Qnil)); |
| 230 | 3391 st.st_mtime = -1; |
| 3392 how_much = 0; | |
|
19925
31b8e0e60e2d
(Finsert_file_contents): If a coding system is
Richard M. Stallman <rms@gnu.org>
parents:
19861
diff
changeset
|
3393 if (!NILP (Vcoding_system_for_read)) |
|
31b8e0e60e2d
(Finsert_file_contents): If a coding system is
Richard M. Stallman <rms@gnu.org>
parents:
19861
diff
changeset
|
3394 current_buffer->buffer_file_coding_system = Vcoding_system_for_read; |
| 230 | 3395 goto notfound; |
| 3396 } | |
| 3397 | |
|
8047
fb950b66d754
(Finsert_file_contents): Fix check for non-regular files.
Karl Heuer <kwzh@gnu.org>
parents:
7695
diff
changeset
|
3398 #ifdef S_IFREG |
|
fb950b66d754
(Finsert_file_contents): Fix check for non-regular files.
Karl Heuer <kwzh@gnu.org>
parents:
7695
diff
changeset
|
3399 /* This code will need to be changed in order to work on named |
|
fb950b66d754
(Finsert_file_contents): Fix check for non-regular files.
Karl Heuer <kwzh@gnu.org>
parents:
7695
diff
changeset
|
3400 pipes, and it's probably just not worth it. So we should at |
|
fb950b66d754
(Finsert_file_contents): Fix check for non-regular files.
Karl Heuer <kwzh@gnu.org>
parents:
7695
diff
changeset
|
3401 least signal an error. */ |
|
fb950b66d754
(Finsert_file_contents): Fix check for non-regular files.
Karl Heuer <kwzh@gnu.org>
parents:
7695
diff
changeset
|
3402 if (!S_ISREG (st.st_mode)) |
|
9915
ec185bc66071
(Finsert_file_contents): If VISIT, set the buffer components
Richard M. Stallman <rms@gnu.org>
parents:
9872
diff
changeset
|
3403 { |
|
17286
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3404 not_regular = 1; |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3405 |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3406 if (! NILP (visit)) |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3407 goto notfound; |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3408 |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3409 if (! NILP (replace) || ! NILP (beg) || ! NILP (end)) |
|
9915
ec185bc66071
(Finsert_file_contents): If VISIT, set the buffer components
Richard M. Stallman <rms@gnu.org>
parents:
9872
diff
changeset
|
3410 Fsignal (Qfile_error, |
|
ec185bc66071
(Finsert_file_contents): If VISIT, set the buffer components
Richard M. Stallman <rms@gnu.org>
parents:
9872
diff
changeset
|
3411 Fcons (build_string ("not a regular file"), |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3412 Fcons (orig_filename, Qnil))); |
|
9915
ec185bc66071
(Finsert_file_contents): If VISIT, set the buffer components
Richard M. Stallman <rms@gnu.org>
parents:
9872
diff
changeset
|
3413 } |
|
8047
fb950b66d754
(Finsert_file_contents): Fix check for non-regular files.
Karl Heuer <kwzh@gnu.org>
parents:
7695
diff
changeset
|
3414 #endif |
|
fb950b66d754
(Finsert_file_contents): Fix check for non-regular files.
Karl Heuer <kwzh@gnu.org>
parents:
7695
diff
changeset
|
3415 |
|
fb950b66d754
(Finsert_file_contents): Fix check for non-regular files.
Karl Heuer <kwzh@gnu.org>
parents:
7695
diff
changeset
|
3416 if (fd < 0) |
| 8597 | 3417 if ((fd = open (XSTRING (filename)->data, O_RDONLY)) < 0) |
|
8047
fb950b66d754
(Finsert_file_contents): Fix check for non-regular files.
Karl Heuer <kwzh@gnu.org>
parents:
7695
diff
changeset
|
3418 goto badopen; |
|
fb950b66d754
(Finsert_file_contents): Fix check for non-regular files.
Karl Heuer <kwzh@gnu.org>
parents:
7695
diff
changeset
|
3419 |
|
6036
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
3420 /* Replacement should preserve point as it preserves markers. */ |
|
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
3421 if (!NILP (replace)) |
|
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
3422 record_unwind_protect (restore_point_unwind, Fpoint_marker ()); |
|
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
3423 |
| 230 | 3424 record_unwind_protect (close_file_unwind, make_number (fd)); |
| 3425 | |
| 3426 /* Supposedly happens on VMS. */ | |
|
17286
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3427 if (! not_regular && st.st_size < 0) |
| 230 | 3428 error ("File size is negative"); |
| 752 | 3429 |
|
3787
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3430 if (!NILP (beg) || !NILP (end)) |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3431 if (!NILP (visit)) |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3432 error ("Attempt to visit less than an entire file"); |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3433 |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3434 if (!NILP (beg)) |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3435 CHECK_NUMBER (beg, 0); |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3436 else |
|
9307
44d6fc4b638b
(Finsert_file_contents, Fwrite_region, Fdo_auto_save, Fset_buffer_auto_saved):
Karl Heuer <kwzh@gnu.org>
parents:
9291
diff
changeset
|
3437 XSETFASTINT (beg, 0); |
|
3787
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3438 |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3439 if (!NILP (end)) |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3440 CHECK_NUMBER (end, 0); |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3441 else |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3442 { |
|
17286
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3443 if (! not_regular) |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3444 { |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3445 XSETINT (end, st.st_size); |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3446 if (XINT (end) != st.st_size) |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3447 error ("Maximum buffer size exceeded"); |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3448 } |
|
3787
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3449 } |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3450 |
|
22492
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3451 if (BEG < Z) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3452 { |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3453 /* Decide the coding system to use for reading the file now |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3454 because we can't use an optimized method for handling |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3455 `coding:' tag if the current buffer is not empty. */ |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3456 Lisp_Object val; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3457 val = Qnil; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3458 |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3459 if (!NILP (Vcoding_system_for_read)) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3460 val = Vcoding_system_for_read; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3461 else if (! NILP (replace)) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3462 /* In REPLACE mode, we can use the same coding system |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3463 that was used to visit the file. */ |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3464 val = current_buffer->buffer_file_coding_system; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3465 else |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3466 { |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3467 /* Don't try looking inside a file for a coding system |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3468 specification if it is not seekable. */ |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3469 if (! not_regular && ! NILP (Vset_auto_coding_function)) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3470 { |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3471 /* Find a coding system specified in the heading two |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3472 lines or in the tailing several lines of the file. |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3473 We assume that the 1K-byte and 3K-byte for heading |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3474 and tailing respectively are sufficient fot this |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3475 purpose. */ |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3476 int how_many, nread; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3477 |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3478 if (st.st_size <= (1024 * 4)) |
|
22053
8697087ea026
(Finsert_file_contents): Check that a -*- coding: -*- spec
Richard M. Stallman <rms@gnu.org>
parents:
22042
diff
changeset
|
3479 nread = read (fd, read_buf, 1024 * 4); |
|
22492
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3480 else |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3481 { |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3482 nread = read (fd, read_buf, 1024); |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3483 if (nread >= 0) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3484 { |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3485 if (lseek (fd, st.st_size - (1024 * 3), 0) < 0) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3486 report_file_error ("Setting file position", |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3487 Fcons (orig_filename, Qnil)); |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3488 nread += read (fd, read_buf + nread, 1024 * 3); |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3489 } |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3490 } |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3491 |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3492 if (nread < 0) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3493 error ("IO error reading %s: %s", |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3494 XSTRING (orig_filename)->data, strerror (errno)); |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3495 else if (nread > 0) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3496 { |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3497 int count = specpdl_ptr - specpdl; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3498 struct buffer *prev = current_buffer; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3499 |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3500 record_unwind_protect (Fset_buffer, Fcurrent_buffer ()); |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3501 temp_output_buffer_setup (" *code-converting-work*"); |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3502 set_buffer_internal (XBUFFER (Vstandard_output)); |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3503 current_buffer->enable_multibyte_characters = Qnil; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3504 insert_1_both (read_buf, nread, nread, 0, 0, 0); |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3505 TEMP_SET_PT_BOTH (BEG, BEG_BYTE); |
|
22811
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
3506 val = call2 (Vset_auto_coding_function, |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
3507 filename, make_number (nread)); |
|
22492
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3508 set_buffer_internal (prev); |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3509 /* Discard the unwind protect for recovering the |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3510 current buffer. */ |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3511 specpdl_ptr--; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3512 |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3513 /* Rewind the file for the actual read done later. */ |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3514 if (lseek (fd, 0, 0) < 0) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3515 report_file_error ("Setting file position", |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3516 Fcons (orig_filename, Qnil)); |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3517 } |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3518 } |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3519 |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3520 if (NILP (val)) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3521 { |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3522 /* If we have not yet decided a coding system, check |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3523 file-coding-system-alist. */ |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3524 Lisp_Object args[6], coding_systems; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3525 |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3526 args[0] = Qinsert_file_contents, args[1] = orig_filename; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3527 args[2] = visit, args[3] = beg, args[4] = end, args[5] = replace; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3528 coding_systems = Ffind_operation_coding_system (6, args); |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3529 if (CONSP (coding_systems)) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3530 val = XCONS (coding_systems)->car; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3531 } |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3532 } |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3533 |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3534 setup_coding_system (Fcheck_coding_system (val), &coding); |
|
22362
e845baca3407
(Finsert_file_contents): Always update
Karl Heuer <kwzh@gnu.org>
parents:
22311
diff
changeset
|
3535 |
|
22492
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3536 if (NILP (Vcoding_system_for_read) |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3537 && NILP (current_buffer->enable_multibyte_characters)) |
|
22613
285822d24189
(Finsert_file_contents): Call setup_raw_text_coding_system.
Kenichi Handa <handa@m17n.org>
parents:
22493
diff
changeset
|
3538 /* We must suppress all text conversion except for end-of-line |
|
285822d24189
(Finsert_file_contents): Call setup_raw_text_coding_system.
Kenichi Handa <handa@m17n.org>
parents:
22493
diff
changeset
|
3539 conversion. */ |
|
285822d24189
(Finsert_file_contents): Call setup_raw_text_coding_system.
Kenichi Handa <handa@m17n.org>
parents:
22493
diff
changeset
|
3540 setup_raw_text_coding_system (&coding); |
|
22492
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3541 |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3542 coding_system_decided = 1; |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3543 } |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3544 |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3545 /* Ensure we always set Vlast_coding_system_used. */ |
|
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3546 set_coding_system = 1; |
|
19448
950a178e8783
(Vauto_file_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
19437
diff
changeset
|
3547 |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3548 /* If requested, replace the accessible part of the buffer |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3549 with the file contents. Avoid replacing text at the |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3550 beginning or end of the buffer that matches the file contents; |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3551 that preserves markers pointing to the unchanged parts. |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3552 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3553 Here we implement this feature in an optimized way |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3554 for the case where code conversion is NOT needed. |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3555 The following if-statement handles the case of conversion |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3556 in a less optimal way. |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3557 |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3558 If the code conversion is "automatic" then we try using this |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3559 method and hope for the best. |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3560 But if we discover the need for conversion, we give up on this method |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3561 and let the following if-statement handle the replace job. */ |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3562 if (!NILP (replace) |
|
22492
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3563 && BEGV < ZV |
|
22042
31e8f7100c12
(Finsert_file_contents): Don't use the fast replace code
Richard M. Stallman <rms@gnu.org>
parents:
21987
diff
changeset
|
3564 && ! CODING_REQUIRE_DECODING (&coding) |
|
31e8f7100c12
(Finsert_file_contents): Don't use the fast replace code
Richard M. Stallman <rms@gnu.org>
parents:
21987
diff
changeset
|
3565 && (coding.eol_type == CODING_EOL_UNDECIDED |
|
31e8f7100c12
(Finsert_file_contents): Don't use the fast replace code
Richard M. Stallman <rms@gnu.org>
parents:
21987
diff
changeset
|
3566 || coding.eol_type == CODING_EOL_LF)) |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
3567 { |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3568 /* same_at_start and same_at_end count bytes, |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3569 because file access counts bytes |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3570 and BEG and END count bytes. */ |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3571 int same_at_start = BEGV_BYTE; |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3572 int same_at_end = ZV_BYTE; |
|
6328
e97a1cc44be8
(Finsert_file_contents): Don't let same_at_end be less than same_at_start.
Richard M. Stallman <rms@gnu.org>
parents:
6209
diff
changeset
|
3573 int overlap; |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3574 /* There is still a possibility we will find the need to do code |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3575 conversion. If that happens, we set this variable to 1 to |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3576 give up on handling REPLACE in the optimized way. */ |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3577 int giveup_match_end = 0; |
|
6328
e97a1cc44be8
(Finsert_file_contents): Don't let same_at_end be less than same_at_start.
Richard M. Stallman <rms@gnu.org>
parents:
6209
diff
changeset
|
3578 |
|
16695
7df45948d2d8
(Finsert_file_contents): Handle BEG and END non-nil
Richard M. Stallman <rms@gnu.org>
parents:
16662
diff
changeset
|
3579 if (XINT (beg) != 0) |
|
7df45948d2d8
(Finsert_file_contents): Handle BEG and END non-nil
Richard M. Stallman <rms@gnu.org>
parents:
16662
diff
changeset
|
3580 { |
|
7df45948d2d8
(Finsert_file_contents): Handle BEG and END non-nil
Richard M. Stallman <rms@gnu.org>
parents:
16662
diff
changeset
|
3581 if (lseek (fd, XINT (beg), 0) < 0) |
|
7df45948d2d8
(Finsert_file_contents): Handle BEG and END non-nil
Richard M. Stallman <rms@gnu.org>
parents:
16662
diff
changeset
|
3582 report_file_error ("Setting file position", |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3583 Fcons (orig_filename, Qnil)); |
|
16695
7df45948d2d8
(Finsert_file_contents): Handle BEG and END non-nil
Richard M. Stallman <rms@gnu.org>
parents:
16662
diff
changeset
|
3584 } |
|
7df45948d2d8
(Finsert_file_contents): Handle BEG and END non-nil
Richard M. Stallman <rms@gnu.org>
parents:
16662
diff
changeset
|
3585 |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3586 immediate_quit = 1; |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3587 QUIT; |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3588 /* Count how many chars at the start of the file |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3589 match the text at the beginning of the buffer. */ |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3590 while (1) |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3591 { |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3592 int nread, bufpos; |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3593 |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3594 nread = read (fd, buffer, sizeof buffer); |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3595 if (nread < 0) |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3596 error ("IO error reading %s: %s", |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3597 XSTRING (orig_filename)->data, strerror (errno)); |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3598 else if (nread == 0) |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3599 break; |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3600 |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17823
diff
changeset
|
3601 if (coding.type == coding_type_undecided) |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3602 detect_coding (&coding, buffer, nread); |
|
20224
fb98ec190b6a
(Finsert_file_contents): Use new macros defined in
Kenichi Handa <handa@m17n.org>
parents:
20074
diff
changeset
|
3603 if (CODING_REQUIRE_DECODING (&coding)) |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3604 /* We found that the file should be decoded somehow. |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3605 Let's give up here. */ |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3606 { |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3607 giveup_match_end = 1; |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3608 break; |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3609 } |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3610 |
|
17835
f36ffb6f1208
Name change through the code:
Kenichi Handa <handa@m17n.org>
parents:
17823
diff
changeset
|
3611 if (coding.eol_type == CODING_EOL_UNDECIDED) |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3612 detect_eol (&coding, buffer, nread); |
|
18270
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
3613 if (coding.eol_type != CODING_EOL_UNDECIDED |
|
18973
9f5b8d5eed29
(Finsert_file_contents): Use new macros
Kenichi Handa <handa@m17n.org>
parents:
18861
diff
changeset
|
3614 && coding.eol_type != CODING_EOL_LF) |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3615 /* We found that the format of eol should be decoded. |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3616 Let's give up here. */ |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3617 { |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3618 giveup_match_end = 1; |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3619 break; |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3620 } |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3621 |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3622 bufpos = 0; |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3623 while (bufpos < nread && same_at_start < ZV_BYTE |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3624 && FETCH_BYTE (same_at_start) == buffer[bufpos]) |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3625 same_at_start++, bufpos++; |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3626 /* If we found a discrepancy, stop the scan. |
| 14036 | 3627 Otherwise loop around and scan the next bufferful. */ |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3628 if (bufpos != nread) |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3629 break; |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3630 } |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3631 immediate_quit = 0; |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3632 /* If the file matches the buffer completely, |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3633 there's no need to replace anything. */ |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3634 if (same_at_start - BEGV_BYTE == XINT (end)) |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3635 { |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3636 close (fd); |
|
6036
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
3637 specpdl_ptr--; |
|
7595
9f0893928a4d
(Finsert_file_contents): Declare buffer as unsigned
Richard M. Stallman <rms@gnu.org>
parents:
7551
diff
changeset
|
3638 /* Truncate the buffer to the size of the file. */ |
|
9f0893928a4d
(Finsert_file_contents): Declare buffer as unsigned
Richard M. Stallman <rms@gnu.org>
parents:
7551
diff
changeset
|
3639 del_range_1 (same_at_start, same_at_end, 0); |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3640 goto handled; |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3641 } |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3642 immediate_quit = 1; |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3643 QUIT; |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3644 /* Count how many chars at the end of the file |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3645 match the text at the end of the buffer. But, if we have |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3646 already found that decoding is necessary, don't waste time. */ |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3647 while (!giveup_match_end) |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3648 { |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3649 int total_read, nread, bufpos, curpos, trial; |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3650 |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3651 /* At what file position are we now scanning? */ |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3652 curpos = XINT (end) - (ZV_BYTE - same_at_end); |
|
7695
aba3ffcc8f51
(Finsert_file_contents): Check for beginning of file.
Karl Heuer <kwzh@gnu.org>
parents:
7611
diff
changeset
|
3653 /* If the entire file matches the buffer tail, stop the scan. */ |
|
aba3ffcc8f51
(Finsert_file_contents): Check for beginning of file.
Karl Heuer <kwzh@gnu.org>
parents:
7611
diff
changeset
|
3654 if (curpos == 0) |
|
aba3ffcc8f51
(Finsert_file_contents): Check for beginning of file.
Karl Heuer <kwzh@gnu.org>
parents:
7611
diff
changeset
|
3655 break; |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3656 /* How much can we scan in the next step? */ |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3657 trial = min (curpos, sizeof buffer); |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3658 if (lseek (fd, curpos - trial, 0) < 0) |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3659 report_file_error ("Setting file position", |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3660 Fcons (orig_filename, Qnil)); |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3661 |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3662 total_read = 0; |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3663 while (total_read < trial) |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3664 { |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3665 nread = read (fd, buffer + total_read, trial - total_read); |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3666 if (nread <= 0) |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3667 error ("IO error reading %s: %s", |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3668 XSTRING (orig_filename)->data, strerror (errno)); |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3669 total_read += nread; |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3670 } |
| 14036 | 3671 /* Scan this bufferful from the end, comparing with |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3672 the Emacs buffer. */ |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3673 bufpos = total_read; |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3674 /* Compare with same_at_start to avoid counting some buffer text |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3675 as matching both at the file's beginning and at the end. */ |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3676 while (bufpos > 0 && same_at_end > same_at_start |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3677 && FETCH_BYTE (same_at_end - 1) == buffer[bufpos - 1]) |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3678 same_at_end--, bufpos--; |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3679 |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3680 /* If we found a discrepancy, stop the scan. |
| 14036 | 3681 Otherwise loop around and scan the preceding bufferful. */ |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3682 if (bufpos != 0) |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3683 { |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3684 /* If this discrepancy is because of code conversion, |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3685 we cannot use this method; giveup and try the other. */ |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3686 if (same_at_end > same_at_start |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3687 && FETCH_BYTE (same_at_end - 1) >= 0200 |
|
18679
554594d88cd3
(Finsert_file_contents): Give up match-end only if
Richard M. Stallman <rms@gnu.org>
parents:
18647
diff
changeset
|
3688 && ! NILP (current_buffer->enable_multibyte_characters) |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3689 && (CODING_MAY_REQUIRE_DECODING (&coding))) |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3690 giveup_match_end = 1; |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3691 break; |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3692 } |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3693 } |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3694 immediate_quit = 0; |
|
6328
e97a1cc44be8
(Finsert_file_contents): Don't let same_at_end be less than same_at_start.
Richard M. Stallman <rms@gnu.org>
parents:
6209
diff
changeset
|
3695 |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3696 if (! giveup_match_end) |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3697 { |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3698 int temp; |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3699 |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3700 /* We win! We can handle REPLACE the optimized way. */ |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3701 |
|
22753
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3702 /* Extend the start of non-matching text area to multibyte |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3703 character boundary. */ |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3704 if (! NILP (current_buffer->enable_multibyte_characters)) |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3705 while (same_at_start > BEGV_BYTE |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3706 && ! CHAR_HEAD_P (FETCH_BYTE (same_at_start))) |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3707 same_at_start--; |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3708 |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3709 /* Extend the end of non-matching text area to multibyte |
|
18679
554594d88cd3
(Finsert_file_contents): Give up match-end only if
Richard M. Stallman <rms@gnu.org>
parents:
18647
diff
changeset
|
3710 character boundary. */ |
|
554594d88cd3
(Finsert_file_contents): Give up match-end only if
Richard M. Stallman <rms@gnu.org>
parents:
18647
diff
changeset
|
3711 if (! NILP (current_buffer->enable_multibyte_characters)) |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3712 while (same_at_end < ZV_BYTE |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3713 && ! CHAR_HEAD_P (FETCH_BYTE (same_at_end))) |
|
18679
554594d88cd3
(Finsert_file_contents): Give up match-end only if
Richard M. Stallman <rms@gnu.org>
parents:
18647
diff
changeset
|
3714 same_at_end++; |
|
554594d88cd3
(Finsert_file_contents): Give up match-end only if
Richard M. Stallman <rms@gnu.org>
parents:
18647
diff
changeset
|
3715 |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3716 /* Don't try to reuse the same piece of text twice. */ |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3717 overlap = (same_at_start - BEGV_BYTE |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3718 - (same_at_end + st.st_size - ZV)); |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3719 if (overlap > 0) |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3720 same_at_end += overlap; |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3721 |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3722 /* Arrange to read only the nonmatching middle part of the file. */ |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3723 XSETFASTINT (beg, XINT (beg) + (same_at_start - BEGV_BYTE)); |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3724 XSETFASTINT (end, XINT (end) - (ZV_BYTE - same_at_end)); |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3725 |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3726 del_range_byte (same_at_start, same_at_end, 0); |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3727 /* Insert from the file at the proper position. */ |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3728 temp = BYTE_TO_CHAR (same_at_start); |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3729 SET_PT_BOTH (temp, same_at_start); |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3730 |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3731 /* If display currently starts at beginning of line, |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3732 keep it that way. */ |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3733 if (XBUFFER (XWINDOW (selected_window)->buffer) == current_buffer) |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3734 XWINDOW (selected_window)->start_at_line_beg = Fbolp (); |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3735 |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3736 replace_handled = 1; |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3737 } |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3738 } |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3739 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3740 /* If requested, replace the accessible part of the buffer |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3741 with the file contents. Avoid replacing text at the |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3742 beginning or end of the buffer that matches the file contents; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3743 that preserves markers pointing to the unchanged parts. |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3744 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3745 Here we implement this feature for the case where code conversion |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3746 is needed, in a simple way that needs a lot of memory. |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3747 The preceding if-statement handles the case of no conversion |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3748 in a more optimized way. */ |
|
22492
241ac6fe2983
(Finsert_file_contents): Redo the change for handling
Kenichi Handa <handa@m17n.org>
parents:
22478
diff
changeset
|
3749 if (!NILP (replace) && ! replace_handled && BEGV < ZV) |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3750 { |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3751 int same_at_start = BEGV_BYTE; |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3752 int same_at_end = ZV_BYTE; |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3753 int overlap; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3754 int bufpos; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3755 /* Make sure that the gap is large enough. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3756 int bufsize = 2 * st.st_size; |
|
17820
d7b187832881
(Finsert_file_contents): Use xmalloc. not malloc.
Richard M. Stallman <rms@gnu.org>
parents:
17723
diff
changeset
|
3757 unsigned char *conversion_buffer = (unsigned char *) xmalloc (bufsize); |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3758 int temp; |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3759 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3760 /* First read the whole file, performing code conversion into |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3761 CONVERSION_BUFFER. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3762 |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3763 if (lseek (fd, XINT (beg), 0) < 0) |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3764 { |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3765 free (conversion_buffer); |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3766 report_file_error ("Setting file position", |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3767 Fcons (orig_filename, Qnil)); |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3768 } |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3769 |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3770 total = st.st_size; /* Total bytes in the file. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3771 how_much = 0; /* Bytes read from file so far. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3772 inserted = 0; /* Bytes put into CONVERSION_BUFFER so far. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3773 unprocessed = 0; /* Bytes not processed in previous loop. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3774 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3775 while (how_much < total) |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3776 { |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3777 /* try is reserved in some compilers (Microsoft C) */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3778 int trytry = min (total - how_much, READ_BUF_SIZE - unprocessed); |
|
22311
599c0971ae49
(Finsert_file_contents): Fix char signedness mismatches.
Karl Heuer <kwzh@gnu.org>
parents:
22172
diff
changeset
|
3779 unsigned char *destination = read_buf + unprocessed; |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3780 int this; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3781 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3782 /* Allow quitting out of the actual I/O. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3783 immediate_quit = 1; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3784 QUIT; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3785 this = read (fd, destination, trytry); |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3786 immediate_quit = 0; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3787 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3788 if (this < 0 || this + unprocessed == 0) |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3789 { |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3790 how_much = this; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3791 break; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3792 } |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3793 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3794 how_much += this; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3795 |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3796 if (CODING_MAY_REQUIRE_DECODING (&coding)) |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3797 { |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3798 int require, result; |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3799 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3800 this += unprocessed; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3801 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3802 /* If we are using more space than estimated, |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3803 make CONVERSION_BUFFER bigger. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3804 require = decoding_buffer_size (&coding, this); |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3805 if (inserted + require + 2 * (total - how_much) > bufsize) |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3806 { |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3807 bufsize = inserted + require + 2 * (total - how_much); |
|
17823
2f313f045caa
(Finsert_file_contents): Use xrealloc too.
Richard M. Stallman <rms@gnu.org>
parents:
17820
diff
changeset
|
3808 conversion_buffer = (unsigned char *) xrealloc (conversion_buffer, bufsize); |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3809 } |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3810 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3811 /* Convert this batch with results in CONVERSION_BUFFER. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3812 if (how_much >= total) /* This is the last block. */ |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3813 coding.mode |= CODING_MODE_LAST_BLOCK; |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3814 result = decode_coding (&coding, read_buf, |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3815 conversion_buffer + inserted, |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3816 this, bufsize - inserted); |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3817 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3818 /* Save for next iteration whatever we didn't convert. */ |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3819 unprocessed = this - coding.consumed; |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3820 bcopy (read_buf + coding.consumed, read_buf, unprocessed); |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3821 this = coding.produced; |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3822 } |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3823 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3824 inserted += this; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3825 } |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3826 |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3827 /* At this point, INSERTED is how many characters (i.e. bytes) |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3828 are present in CONVERSION_BUFFER. |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3829 HOW_MUCH should equal TOTAL, |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3830 or should be <= 0 if we couldn't read the file. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3831 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3832 if (how_much < 0) |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3833 { |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3834 free (conversion_buffer); |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3835 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3836 if (how_much == -1) |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3837 error ("IO error reading %s: %s", |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3838 XSTRING (orig_filename)->data, strerror (errno)); |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3839 else if (how_much == -2) |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3840 error ("maximum buffer size exceeded"); |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3841 } |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3842 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3843 /* Compare the beginning of the converted file |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3844 with the buffer text. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3845 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3846 bufpos = 0; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3847 while (bufpos < inserted && same_at_start < same_at_end |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3848 && FETCH_BYTE (same_at_start) == conversion_buffer[bufpos]) |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3849 same_at_start++, bufpos++; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3850 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3851 /* If the file matches the buffer completely, |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3852 there's no need to replace anything. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3853 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3854 if (bufpos == inserted) |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3855 { |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3856 free (conversion_buffer); |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3857 close (fd); |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3858 specpdl_ptr--; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3859 /* Truncate the buffer to the size of the file. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3860 del_range_1 (same_at_start, same_at_end, 0); |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3861 goto handled; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3862 } |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3863 |
|
22753
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3864 /* Extend the start of non-matching text area to multibyte |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3865 character boundary. */ |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3866 if (! NILP (current_buffer->enable_multibyte_characters)) |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3867 while (same_at_start > BEGV_BYTE |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3868 && ! CHAR_HEAD_P (FETCH_BYTE (same_at_start))) |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3869 same_at_start--; |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3870 |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3871 /* Scan this bufferful from the end, comparing with |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3872 the Emacs buffer. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3873 bufpos = inserted; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3874 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3875 /* Compare with same_at_start to avoid counting some buffer text |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3876 as matching both at the file's beginning and at the end. */ |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3877 while (bufpos > 0 && same_at_end > same_at_start |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3878 && FETCH_BYTE (same_at_end - 1) == conversion_buffer[bufpos - 1]) |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3879 same_at_end--, bufpos--; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3880 |
|
22753
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3881 /* Extend the end of non-matching text area to multibyte |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3882 character boundary. */ |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3883 if (! NILP (current_buffer->enable_multibyte_characters)) |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3884 while (same_at_end < ZV_BYTE |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3885 && ! CHAR_HEAD_P (FETCH_BYTE (same_at_end))) |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3886 same_at_end++; |
|
4f555df67270
(Finsert_file_contents): When replacing, in multibyte bfr,
Richard M. Stallman <rms@gnu.org>
parents:
22697
diff
changeset
|
3887 |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3888 /* Don't try to reuse the same piece of text twice. */ |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3889 overlap = same_at_start - BEGV_BYTE - (same_at_end + inserted - ZV_BYTE); |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3890 if (overlap > 0) |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3891 same_at_end += overlap; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3892 |
|
17285
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3893 /* If display currently starts at beginning of line, |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3894 keep it that way. */ |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3895 if (XBUFFER (XWINDOW (selected_window)->buffer) == current_buffer) |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3896 XWINDOW (selected_window)->start_at_line_beg = Fbolp (); |
|
b065ab2a2e22
(Finsert_file_contents): When handling REPLACE,
Richard M. Stallman <rms@gnu.org>
parents:
17273
diff
changeset
|
3897 |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3898 /* Replace the chars that we need to replace, |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3899 and update INSERTED to equal the number of bytes |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3900 we are taking from the file. */ |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3901 inserted -= (Z_BYTE - same_at_end) + (same_at_start - BEG_BYTE); |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3902 del_range_byte (same_at_start, same_at_end, 0); |
|
21949
a2166fb22606
(barf_or_query_if_file_exists): Encode file name.
Richard M. Stallman <rms@gnu.org>
parents:
21917
diff
changeset
|
3903 if (same_at_end != same_at_start) |
|
a2166fb22606
(barf_or_query_if_file_exists): Encode file name.
Richard M. Stallman <rms@gnu.org>
parents:
21917
diff
changeset
|
3904 SET_PT_BOTH (GPT, GPT_BYTE); |
|
a2166fb22606
(barf_or_query_if_file_exists): Encode file name.
Richard M. Stallman <rms@gnu.org>
parents:
21917
diff
changeset
|
3905 else |
|
a2166fb22606
(barf_or_query_if_file_exists): Encode file name.
Richard M. Stallman <rms@gnu.org>
parents:
21917
diff
changeset
|
3906 { |
|
a2166fb22606
(barf_or_query_if_file_exists): Encode file name.
Richard M. Stallman <rms@gnu.org>
parents:
21917
diff
changeset
|
3907 /* Insert from the file at the proper position. */ |
|
a2166fb22606
(barf_or_query_if_file_exists): Encode file name.
Richard M. Stallman <rms@gnu.org>
parents:
21917
diff
changeset
|
3908 temp = BYTE_TO_CHAR (same_at_start); |
|
a2166fb22606
(barf_or_query_if_file_exists): Encode file name.
Richard M. Stallman <rms@gnu.org>
parents:
21917
diff
changeset
|
3909 SET_PT_BOTH (temp, same_at_start); |
|
a2166fb22606
(barf_or_query_if_file_exists): Encode file name.
Richard M. Stallman <rms@gnu.org>
parents:
21917
diff
changeset
|
3910 } |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3911 |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3912 insert_1 (conversion_buffer + same_at_start - BEG_BYTE, inserted, |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
3913 0, 0, 0); |
|
17273
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3914 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3915 free (conversion_buffer); |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3916 close (fd); |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3917 specpdl_ptr--; |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3918 |
|
214a5cc55c56
(Finsert_file_contents): Determine the character coding
Richard M. Stallman <rms@gnu.org>
parents:
17271
diff
changeset
|
3919 goto handled; |
|
5975
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3920 } |
|
c766d816b07e
(Finsert_file_contents): New arg REPLACE.
Richard M. Stallman <rms@gnu.org>
parents:
5908
diff
changeset
|
3921 |
|
17286
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3922 if (! not_regular) |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3923 { |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3924 register Lisp_Object temp; |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3925 |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3926 total = XINT (end) - XINT (beg); |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3927 |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3928 /* Make sure point-max won't overflow after this insertion. */ |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3929 XSETINT (temp, total); |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3930 if (total != XINT (temp)) |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3931 error ("Maximum buffer size exceeded"); |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3932 } |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3933 else |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3934 /* For a special file, all we can do is guess. */ |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3935 total = READ_BUF_SIZE; |
| 230 | 3936 |
|
4395
76b24be40a57
(Finsert_file_contents): Don't call prepare_to_modify_buffer
Richard M. Stallman <rms@gnu.org>
parents:
4270
diff
changeset
|
3937 if (NILP (visit) && total > 0) |
|
18447
b7e01783be08
(Finsert_file_contents): Pass new arg to prepare_to_modify_buffer.
Richard M. Stallman <rms@gnu.org>
parents:
18431
diff
changeset
|
3938 prepare_to_modify_buffer (PT, PT, NULL); |
|
16167
651ee074f8b0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
16155
diff
changeset
|
3939 |
|
651ee074f8b0
Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents:
16155
diff
changeset
|
3940 move_gap (PT); |
|
3787
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3941 if (GAP_SIZE < total) |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3942 make_gap (total - GAP_SIZE); |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3943 |
|
6036
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
3944 if (XINT (beg) != 0 || !NILP (replace)) |
|
3787
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3945 { |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3946 if (lseek (fd, XINT (beg), 0) < 0) |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3947 report_file_error ("Setting file position", |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
3948 Fcons (orig_filename, Qnil)); |
|
3787
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3949 } |
|
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
3950 |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3951 /* In the following loop, HOW_MUCH contains the total bytes read so |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3952 far for a regular file, and not changed for a special file. But, |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3953 before exiting the loop, it is set to a negative value if I/O |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3954 error occurs. */ |
|
6036
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
3955 how_much = 0; |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3956 /* Total bytes inserted. */ |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3957 inserted = 0; |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3958 /* Here, we don't do code conversion in the loop. It is done by |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3959 code_convert_region after all data are read into the buffer. */ |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
3960 while (how_much < total) |
| 230 | 3961 { |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3962 /* try is reserved in some compilers (Microsoft C) */ |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3963 int trytry = min (total - how_much, READ_BUF_SIZE); |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3964 int this; |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3965 |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3966 /* For a special file, GAP_SIZE should be checked every time. */ |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3967 if (not_regular && GAP_SIZE < trytry) |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3968 make_gap (total - GAP_SIZE); |
|
592
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
3969 |
|
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
3970 /* Allow quitting out of the actual I/O. */ |
|
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
3971 immediate_quit = 1; |
|
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
3972 QUIT; |
|
20929
21009c0c7598
(Finsert_file_contents): Read a file contents into the
Kenichi Handa <handa@m17n.org>
parents:
20897
diff
changeset
|
3973 this = read (fd, BYTE_POS_ADDR (PT_BYTE + inserted - 1) + 1, trytry); |
|
592
e65af468dcc2
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
564
diff
changeset
|
3974 immediate_quit = 0; |
| 230 | 3975 |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3976 if (this <= 0) |
| 230 | 3977 { |
| 3978 how_much = this; | |
| 3979 break; | |
| 3980 } | |
| 3981 | |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3982 GAP_SIZE -= this; |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3983 GPT_BYTE += this; |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3984 ZV_BYTE += this; |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3985 Z_BYTE += this; |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3986 GPT += this; |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3987 ZV += this; |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3988 Z += this; |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
3989 |
|
17286
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3990 /* For a regular file, where TOTAL is the real size, |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3991 count HOW_MUCH to compare with it. |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3992 For a special file, where TOTAL is just a buffer size, |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3993 so don't bother counting in HOW_MUCH. |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3994 (INSERTED is where we count the number of characters inserted.) */ |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3995 if (! not_regular) |
|
4ee0f02eff87
(Finsert_file_contents): Handle non-regular files.
Richard M. Stallman <rms@gnu.org>
parents:
17285
diff
changeset
|
3996 how_much += this; |
| 230 | 3997 inserted += this; |
| 3998 } | |
| 3999 | |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4000 if (GAP_SIZE > 0) |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4001 /* Put an anchor to ensure multi-byte form ends at gap. */ |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4002 *GPT_ADDR = 0; |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4003 |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4004 close (fd); |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4005 |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4006 /* Discard the unwind protect for closing the file. */ |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4007 specpdl_ptr--; |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4008 |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4009 if (how_much < 0) |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4010 error ("IO error reading %s: %s", |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4011 XSTRING (orig_filename)->data, strerror (errno)); |
|
19399
8ece1f8d2ff6
(Finsert_file_contents) [DOS_NT]: Set buffer_file_type
Geoff Voelker <voelker@cs.washington.edu>
parents:
19206
diff
changeset
|
4012 |
|
22697
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4013 if (! coding_system_decided) |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4014 { |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4015 /* The coding system is not yet decided. Decide it by an |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4016 optimized method for handling `coding:' tag. */ |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4017 Lisp_Object val; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4018 val = Qnil; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4019 |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4020 if (!NILP (Vcoding_system_for_read)) |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4021 val = Vcoding_system_for_read; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4022 else |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4023 { |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4024 if (inserted > 0 && ! NILP (Vset_auto_coding_function)) |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4025 { |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4026 /* Since we are sure that the current buffer was |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4027 empty before the insertion, we can toggle |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4028 enable-multibyte-characters directly here without |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4029 taking care of marker adjustment and byte |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4030 combining problem. */ |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4031 Lisp_Object prev_multibyte; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4032 int count = specpdl_ptr - specpdl; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4033 |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4034 prev_multibyte = current_buffer->enable_multibyte_characters; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4035 current_buffer->enable_multibyte_characters = Qnil; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4036 record_unwind_protect (set_auto_coding_unwind, |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4037 prev_multibyte); |
|
22811
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4038 val = call2 (Vset_auto_coding_function, |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4039 filename, make_number (inserted)); |
|
22697
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4040 /* Discard the unwind protect for recovering the |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4041 error of Vset_auto_coding_function. */ |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4042 specpdl_ptr--; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4043 current_buffer->enable_multibyte_characters = prev_multibyte; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4044 TEMP_SET_PT_BOTH (BEG, BEG_BYTE); |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4045 } |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4046 |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4047 if (NILP (val)) |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4048 { |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4049 /* If the coding system is not yet decided, check |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4050 file-coding-system-alist. */ |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4051 Lisp_Object args[6], coding_systems; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4052 |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4053 args[0] = Qinsert_file_contents, args[1] = orig_filename; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4054 args[2] = visit, args[3] = beg, args[4] = end, args[5] = Qnil; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4055 coding_systems = Ffind_operation_coding_system (6, args); |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4056 if (CONSP (coding_systems)) |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4057 val = XCONS (coding_systems)->car; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4058 } |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4059 } |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4060 |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4061 /* The following kludgy code is to avoid some compiler bug. |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4062 We can't simply do |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4063 setup_coding_system (val, &coding); |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4064 on some system. */ |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4065 { |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4066 struct coding_system temp_coding; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4067 setup_coding_system (val, &temp_coding); |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4068 bcopy (&temp_coding, &coding, sizeof coding); |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4069 } |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4070 |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4071 if (NILP (Vcoding_system_for_read) |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4072 && NILP (current_buffer->enable_multibyte_characters)) |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4073 /* We must suppress all text conversion except for |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4074 end-of-line conversion. */ |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4075 setup_raw_text_coding_system (&coding); |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4076 } |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4077 |
| 230 | 4078 if (inserted > 0) |
|
1240
7365d006d0a0
(Finsert_file_contents): Do record_insert, then inc MODIFF.
Richard M. Stallman <rms@gnu.org>
parents:
1204
diff
changeset
|
4079 { |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4080 if (CODING_MAY_REQUIRE_DECODING (&coding)) |
|
20929
21009c0c7598
(Finsert_file_contents): Read a file contents into the
Kenichi Handa <handa@m17n.org>
parents:
20897
diff
changeset
|
4081 { |
|
21189
14e52c1a5d68
(Finsert_file_contents): Comment modified. Give
Kenichi Handa <handa@m17n.org>
parents:
21138
diff
changeset
|
4082 /* Here, we don't have to consider byte combining (see the |
|
14e52c1a5d68
(Finsert_file_contents): Comment modified. Give
Kenichi Handa <handa@m17n.org>
parents:
21138
diff
changeset
|
4083 comment below) because code_convert_region takes care of |
|
14e52c1a5d68
(Finsert_file_contents): Comment modified. Give
Kenichi Handa <handa@m17n.org>
parents:
21138
diff
changeset
|
4084 it. */ |
|
20929
21009c0c7598
(Finsert_file_contents): Read a file contents into the
Kenichi Handa <handa@m17n.org>
parents:
20897
diff
changeset
|
4085 code_convert_region (PT, PT_BYTE, PT + inserted, PT_BYTE + inserted, |
|
21009c0c7598
(Finsert_file_contents): Read a file contents into the
Kenichi Handa <handa@m17n.org>
parents:
20897
diff
changeset
|
4086 &coding, 0, 0); |
|
21009c0c7598
(Finsert_file_contents): Read a file contents into the
Kenichi Handa <handa@m17n.org>
parents:
20897
diff
changeset
|
4087 inserted = (NILP (current_buffer->enable_multibyte_characters) |
|
21009c0c7598
(Finsert_file_contents): Read a file contents into the
Kenichi Handa <handa@m17n.org>
parents:
20897
diff
changeset
|
4088 ? coding.produced : coding.produced_char); |
|
21009c0c7598
(Finsert_file_contents): Read a file contents into the
Kenichi Handa <handa@m17n.org>
parents:
20897
diff
changeset
|
4089 } |
|
21138
d10664297ed2
(Finsert_file_contents): Don't do position adjustments
Kenichi Handa <handa@m17n.org>
parents:
21048
diff
changeset
|
4090 else if (!NILP (current_buffer->enable_multibyte_characters)) |
|
d10664297ed2
(Finsert_file_contents): Don't do position adjustments
Kenichi Handa <handa@m17n.org>
parents:
21048
diff
changeset
|
4091 { |
|
d10664297ed2
(Finsert_file_contents): Don't do position adjustments
Kenichi Handa <handa@m17n.org>
parents:
21048
diff
changeset
|
4092 int inserted_byte = inserted; |
|
d10664297ed2
(Finsert_file_contents): Don't do position adjustments
Kenichi Handa <handa@m17n.org>
parents:
21048
diff
changeset
|
4093 |
|
21189
14e52c1a5d68
(Finsert_file_contents): Comment modified. Give
Kenichi Handa <handa@m17n.org>
parents:
21138
diff
changeset
|
4094 /* There's a possibility that we must combine bytes at the |
|
14e52c1a5d68
(Finsert_file_contents): Comment modified. Give
Kenichi Handa <handa@m17n.org>
parents:
21138
diff
changeset
|
4095 head (resp. the tail) of the just inserted text with the |
|
14e52c1a5d68
(Finsert_file_contents): Comment modified. Give
Kenichi Handa <handa@m17n.org>
parents:
21138
diff
changeset
|
4096 bytes before (resp. after) the gap to form a single |
|
21319
4f8b7860819e
(Finsert_file_contents): Call adjust_after_insert when
Kenichi Handa <handa@m17n.org>
parents:
21304
diff
changeset
|
4097 character. */ |
|
4f8b7860819e
(Finsert_file_contents): Call adjust_after_insert when
Kenichi Handa <handa@m17n.org>
parents:
21304
diff
changeset
|
4098 inserted = multibyte_chars_in_text (GPT_ADDR - inserted, inserted); |
|
4f8b7860819e
(Finsert_file_contents): Call adjust_after_insert when
Kenichi Handa <handa@m17n.org>
parents:
21304
diff
changeset
|
4099 adjust_after_insert (PT, PT_BYTE, |
|
4f8b7860819e
(Finsert_file_contents): Call adjust_after_insert when
Kenichi Handa <handa@m17n.org>
parents:
21304
diff
changeset
|
4100 PT + inserted_byte, PT_BYTE + inserted_byte, |
|
4f8b7860819e
(Finsert_file_contents): Call adjust_after_insert when
Kenichi Handa <handa@m17n.org>
parents:
21304
diff
changeset
|
4101 inserted); |
|
21138
d10664297ed2
(Finsert_file_contents): Don't do position adjustments
Kenichi Handa <handa@m17n.org>
parents:
21048
diff
changeset
|
4102 } |
|
21504
0e2b0f6fc9c0
(Finsert_file_contents): Call adjust_after_insert also
Andreas Schwab <schwab@suse.de>
parents:
21423
diff
changeset
|
4103 else |
|
0e2b0f6fc9c0
(Finsert_file_contents): Call adjust_after_insert also
Andreas Schwab <schwab@suse.de>
parents:
21423
diff
changeset
|
4104 adjust_after_insert (PT, PT_BYTE, PT + inserted, PT_BYTE + inserted, |
|
0e2b0f6fc9c0
(Finsert_file_contents): Call adjust_after_insert also
Andreas Schwab <schwab@suse.de>
parents:
21423
diff
changeset
|
4105 inserted); |
|
22697
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4106 } |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4107 |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4108 #ifdef DOS_NT |
|
22697
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4109 /* Use the conversion type to determine buffer-file-type |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4110 (find-buffer-file-type is now used to help determine the |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4111 conversion). */ |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4112 if ((coding.eol_type == CODING_EOL_UNDECIDED |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4113 || coding.eol_type == CODING_EOL_LF) |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4114 && ! CODING_REQUIRE_DECODING (&coding)) |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4115 current_buffer->buffer_file_type = Qt; |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4116 else |
|
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4117 current_buffer->buffer_file_type = Qnil; |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4118 #endif |
| 230 | 4119 |
| 4120 notfound: | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4121 handled: |
| 230 | 4122 |
| 485 | 4123 if (!NILP (visit)) |
| 230 | 4124 { |
|
6177
ac2ef13dca1b
(Finsert_file_contents): If undo_list was t, leave it t.
Richard M. Stallman <rms@gnu.org>
parents:
6036
diff
changeset
|
4125 if (!EQ (current_buffer->undo_list, Qt)) |
|
ac2ef13dca1b
(Finsert_file_contents): If undo_list was t, leave it t.
Richard M. Stallman <rms@gnu.org>
parents:
6036
diff
changeset
|
4126 current_buffer->undo_list = Qnil; |
| 230 | 4127 #ifdef APOLLO |
| 4128 stat (XSTRING (filename)->data, &st); | |
| 4129 #endif | |
|
5390
d9c81d7079f3
(Finsert_file_contents): Don't run after change hook
Richard M. Stallman <rms@gnu.org>
parents:
5351
diff
changeset
|
4130 |
|
5395
e11486a64dab
(Finsert_file_contents): Avoid setting buffer-file-name field if ran a handler.
Richard M. Stallman <rms@gnu.org>
parents:
5390
diff
changeset
|
4131 if (NILP (handler)) |
|
e11486a64dab
(Finsert_file_contents): Avoid setting buffer-file-name field if ran a handler.
Richard M. Stallman <rms@gnu.org>
parents:
5390
diff
changeset
|
4132 { |
|
e11486a64dab
(Finsert_file_contents): Avoid setting buffer-file-name field if ran a handler.
Richard M. Stallman <rms@gnu.org>
parents:
5390
diff
changeset
|
4133 current_buffer->modtime = st.st_mtime; |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4134 current_buffer->filename = orig_filename; |
|
5395
e11486a64dab
(Finsert_file_contents): Avoid setting buffer-file-name field if ran a handler.
Richard M. Stallman <rms@gnu.org>
parents:
5390
diff
changeset
|
4135 } |
|
5390
d9c81d7079f3
(Finsert_file_contents): Don't run after change hook
Richard M. Stallman <rms@gnu.org>
parents:
5351
diff
changeset
|
4136 |
|
10304
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
4137 SAVE_MODIFF = MODIFF; |
| 230 | 4138 current_buffer->auto_save_modified = MODIFF; |
|
9307
44d6fc4b638b
(Finsert_file_contents, Fwrite_region, Fdo_auto_save, Fset_buffer_auto_saved):
Karl Heuer <kwzh@gnu.org>
parents:
9291
diff
changeset
|
4139 XSETFASTINT (current_buffer->save_length, Z - BEG); |
| 230 | 4140 #ifdef CLASH_DETECTION |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4141 if (NILP (handler)) |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4142 { |
|
11658
304577bc9b51
(Finsert_file_contents): Use file_truename for unlocking.
Richard M. Stallman <rms@gnu.org>
parents:
11632
diff
changeset
|
4143 if (!NILP (current_buffer->file_truename)) |
|
304577bc9b51
(Finsert_file_contents): Use file_truename for unlocking.
Richard M. Stallman <rms@gnu.org>
parents:
11632
diff
changeset
|
4144 unlock_file (current_buffer->file_truename); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4145 unlock_file (filename); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4146 } |
| 230 | 4147 #endif /* CLASH_DETECTION */ |
|
9915
ec185bc66071
(Finsert_file_contents): If VISIT, set the buffer components
Richard M. Stallman <rms@gnu.org>
parents:
9872
diff
changeset
|
4148 if (not_regular) |
|
ec185bc66071
(Finsert_file_contents): If VISIT, set the buffer components
Richard M. Stallman <rms@gnu.org>
parents:
9872
diff
changeset
|
4149 Fsignal (Qfile_error, |
|
ec185bc66071
(Finsert_file_contents): If VISIT, set the buffer components
Richard M. Stallman <rms@gnu.org>
parents:
9872
diff
changeset
|
4150 Fcons (build_string ("not a regular file"), |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4151 Fcons (orig_filename, Qnil))); |
|
9915
ec185bc66071
(Finsert_file_contents): If VISIT, set the buffer components
Richard M. Stallman <rms@gnu.org>
parents:
9872
diff
changeset
|
4152 |
| 230 | 4153 /* If visiting nonexistent file, return nil. */ |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4154 if (current_buffer->modtime == -1) |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4155 report_file_error ("Opening input file", Fcons (orig_filename, Qnil)); |
| 230 | 4156 } |
| 4157 | |
|
11053
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4158 /* Decode file format */ |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4159 if (inserted > 0) |
|
11053
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4160 { |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
4161 insval = call3 (Qformat_decode, |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4162 Qnil, make_number (inserted), visit); |
|
11053
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4163 CHECK_NUMBER (insval, 0); |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4164 inserted = XFASTINT (insval); |
|
11053
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4165 } |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4166 |
|
17396
7fbce3c83857
(Finsert_file_contents): Do call signal_after_change
Richard M. Stallman <rms@gnu.org>
parents:
17287
diff
changeset
|
4167 /* Call after-change hooks for the inserted text, aside from the case |
|
7fbce3c83857
(Finsert_file_contents): Do call signal_after_change
Richard M. Stallman <rms@gnu.org>
parents:
17287
diff
changeset
|
4168 of normal visiting (not with REPLACE), which is done in a new buffer |
|
7fbce3c83857
(Finsert_file_contents): Do call signal_after_change
Richard M. Stallman <rms@gnu.org>
parents:
17287
diff
changeset
|
4169 "before" the buffer is changed. */ |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4170 if (inserted > 0 && total > 0 |
|
17396
7fbce3c83857
(Finsert_file_contents): Do call signal_after_change
Richard M. Stallman <rms@gnu.org>
parents:
17287
diff
changeset
|
4171 && (NILP (visit) || !NILP (replace))) |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4172 signal_after_change (PT, 0, inserted); |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4173 |
|
22697
578f11200ed5
(Finsert_file_contents): Cancel previous change. Setup
Kenichi Handa <handa@m17n.org>
parents:
22681
diff
changeset
|
4174 if (set_coding_system) |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4175 Vlast_coding_system_used = coding.symbol; |
|
20432
987ddd5cb6ee
(Finsert_file_contents): Set Vlast_coding_system_used
Kenichi Handa <handa@m17n.org>
parents:
20370
diff
changeset
|
4176 |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4177 if (inserted > 0) |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4178 { |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4179 p = Vafter_insert_file_functions; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4180 while (!NILP (p)) |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4181 { |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4182 insval = call1 (Fcar (p), make_number (inserted)); |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4183 if (!NILP (insval)) |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4184 { |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4185 CHECK_NUMBER (insval, 0); |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4186 inserted = XFASTINT (insval); |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4187 } |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4188 QUIT; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4189 p = Fcdr (p); |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4190 } |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4191 } |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4192 |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4193 /* ??? Retval needs to be dealt with in all cases consistently. */ |
|
6036
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
4194 if (NILP (val)) |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4195 val = Fcons (orig_filename, |
|
6036
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
4196 Fcons (make_number (inserted), |
|
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
4197 Qnil)); |
|
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
4198 |
|
7e9984c9a36e
(Finsert_file_contents): If REPLACE, always do lseek.
Richard M. Stallman <rms@gnu.org>
parents:
5978
diff
changeset
|
4199 RETURN_UNGCPRO (unbind_to (count, val)); |
| 230 | 4200 } |
|
3787
04b741620a50
* fileio.c (Finsert_file_contents): Two new args, BEG and END.
Jim Blandy <jimb@redhat.com>
parents:
3721
diff
changeset
|
4201 |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4202 static Lisp_Object build_annotations P_ ((Lisp_Object, Lisp_Object, |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4203 Lisp_Object)); |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4204 |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4205 /* If build_annotations switched buffers, switch back to BUF. |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4206 Kill the temporary buffer that was selected in the meantime. |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4207 |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4208 Since this kill only the last temporary buffer, some buffers remain |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4209 not killed if build_annotations switched buffers more than once. |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4210 -- K.Handa */ |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4211 |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
4212 static Lisp_Object |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4213 build_annotations_unwind (buf) |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4214 Lisp_Object buf; |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4215 { |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4216 Lisp_Object tembuf; |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4217 |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4218 if (XBUFFER (buf) == current_buffer) |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4219 return Qnil; |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4220 tembuf = Fcurrent_buffer (); |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4221 Fset_buffer (buf); |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4222 Fkill_buffer (tembuf); |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4223 return Qnil; |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4224 } |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4225 |
|
21020
f7ace8487b28
(auto_save_1): Pass new arg to Fwrite_region.
Richard M. Stallman <rms@gnu.org>
parents:
20944
diff
changeset
|
4226 DEFUN ("write-region", Fwrite_region, Swrite_region, 3, 7, |
|
f7ace8487b28
(auto_save_1): Pass new arg to Fwrite_region.
Richard M. Stallman <rms@gnu.org>
parents:
20944
diff
changeset
|
4227 "r\nFWrite region to file: \ni\ni\ni\np", |
| 230 | 4228 "Write current region into specified file.\n\ |
| 4229 When called from a program, takes three arguments:\n\ | |
| 4230 START, END and FILENAME. START and END are buffer positions.\n\ | |
| 4231 Optional fourth argument APPEND if non-nil means\n\ | |
| 4232 append to existing file contents (if any).\n\ | |
| 4233 Optional fifth argument VISIT if t means\n\ | |
| 4234 set the last-save-file-modtime of buffer to this file's modtime\n\ | |
| 4235 and mark buffer not modified.\n\ | |
|
1377
dcec08a3bec4
(Fwrite_region): If VISIT is a file name,
Richard M. Stallman <rms@gnu.org>
parents:
1358
diff
changeset
|
4236 If VISIT is a string, it is a second file name;\n\ |
|
dcec08a3bec4
(Fwrite_region): If VISIT is a file name,
Richard M. Stallman <rms@gnu.org>
parents:
1358
diff
changeset
|
4237 the output goes to FILENAME, but the buffer is marked as visiting VISIT.\n\ |
|
dcec08a3bec4
(Fwrite_region): If VISIT is a file name,
Richard M. Stallman <rms@gnu.org>
parents:
1358
diff
changeset
|
4238 VISIT is also the file name to lock and unlock for clash detection.\n\ |
|
1761
b9ef55b0df4a
(Fwrite_region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
1679
diff
changeset
|
4239 If VISIT is neither t nor nil nor a string,\n\ |
|
b9ef55b0df4a
(Fwrite_region): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
1679
diff
changeset
|
4240 that means do not print the \"Wrote file\" message.\n\ |
|
12853
032f8aae6bbe
(Fwrite_region): New arg lockname.
Richard M. Stallman <rms@gnu.org>
parents:
12642
diff
changeset
|
4241 The optional sixth arg LOCKNAME, if non-nil, specifies the name to\n\ |
|
18210
2338261796d2
(Fwrite_region): Fix previous doc change.
Erik Naggum <erik@naggum.no>
parents:
18185
diff
changeset
|
4242 use for locking and unlocking, overriding FILENAME and VISIT.\n\ |
|
21020
f7ace8487b28
(auto_save_1): Pass new arg to Fwrite_region.
Richard M. Stallman <rms@gnu.org>
parents:
20944
diff
changeset
|
4243 The optional seventh arg CONFIRM, if non-nil, says ask for confirmation\n\ |
|
f7ace8487b28
(auto_save_1): Pass new arg to Fwrite_region.
Richard M. Stallman <rms@gnu.org>
parents:
20944
diff
changeset
|
4244 before overwriting an existing file.\n\ |
| 230 | 4245 Kludgy feature: if START is a string, then that string is written\n\ |
|
22362
e845baca3407
(Finsert_file_contents): Always update
Karl Heuer <kwzh@gnu.org>
parents:
22311
diff
changeset
|
4246 to the file, instead of any buffer contents, and END is ignored.\n\ |
|
e845baca3407
(Finsert_file_contents): Always update
Karl Heuer <kwzh@gnu.org>
parents:
22311
diff
changeset
|
4247 \n\ |
|
e845baca3407
(Finsert_file_contents): Always update
Karl Heuer <kwzh@gnu.org>
parents:
22311
diff
changeset
|
4248 This does code conversion according to the value of\n\ |
|
e845baca3407
(Finsert_file_contents): Always update
Karl Heuer <kwzh@gnu.org>
parents:
22311
diff
changeset
|
4249 `coding-system-for-write', `buffer-file-coding-system', or\n\ |
|
e845baca3407
(Finsert_file_contents): Always update
Karl Heuer <kwzh@gnu.org>
parents:
22311
diff
changeset
|
4250 `file-coding-system-alist', and sets the variable\n\ |
|
e845baca3407
(Finsert_file_contents): Always update
Karl Heuer <kwzh@gnu.org>
parents:
22311
diff
changeset
|
4251 `last-coding-system-used' to the coding system actually used.") |
|
e845baca3407
(Finsert_file_contents): Always update
Karl Heuer <kwzh@gnu.org>
parents:
22311
diff
changeset
|
4252 |
|
21020
f7ace8487b28
(auto_save_1): Pass new arg to Fwrite_region.
Richard M. Stallman <rms@gnu.org>
parents:
20944
diff
changeset
|
4253 (start, end, filename, append, visit, lockname, confirm) |
|
f7ace8487b28
(auto_save_1): Pass new arg to Fwrite_region.
Richard M. Stallman <rms@gnu.org>
parents:
20944
diff
changeset
|
4254 Lisp_Object start, end, filename, append, visit, lockname, confirm; |
| 230 | 4255 { |
| 4256 register int desc; | |
| 4257 int failure; | |
| 4258 int save_errno; | |
| 4259 unsigned char *fn; | |
| 4260 struct stat st; | |
|
4950
145c69e39666
(Fwrite_region): Fix minor bugs in POS arg to awrite.
Richard M. Stallman <rms@gnu.org>
parents:
4879
diff
changeset
|
4261 int tem; |
| 230 | 4262 int count = specpdl_ptr - specpdl; |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4263 int count1; |
| 230 | 4264 #ifdef VMS |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
4265 unsigned char *fname = 0; /* If non-0, original filename (must rename) */ |
| 230 | 4266 #endif /* VMS */ |
| 848 | 4267 Lisp_Object handler; |
|
2407
1c590cd84ab3
(Fexpand_file_name): Default DEFALT at beginning,
Richard M. Stallman <rms@gnu.org>
parents:
2280
diff
changeset
|
4268 Lisp_Object visit_file; |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4269 Lisp_Object annotations; |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4270 Lisp_Object encoded_filename; |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4271 int visiting, quietly; |
|
12853
032f8aae6bbe
(Fwrite_region): New arg lockname.
Richard M. Stallman <rms@gnu.org>
parents:
12642
diff
changeset
|
4272 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4273 struct buffer *given_buffer; |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
4274 #ifdef DOS_NT |
|
18764
2ef1d8539441
(Fwrite_region) [DOS_NT]: Always use binary mode since
Richard M. Stallman <rms@gnu.org>
parents:
18744
diff
changeset
|
4275 int buffer_file_type = O_BINARY; |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
4276 #endif /* DOS_NT */ |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4277 struct coding_system coding; |
| 230 | 4278 |
|
10304
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
4279 if (current_buffer->base_buffer && ! NILP (visit)) |
|
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
4280 error ("Cannot do file visiting in an indirect buffer"); |
|
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
4281 |
|
5410
c96b98efb5b4
(Fwrite_region): Don't change START and END from nil
Richard M. Stallman <rms@gnu.org>
parents:
5395
diff
changeset
|
4282 if (!NILP (start) && !STRINGP (start)) |
| 230 | 4283 validate_region (&start, &end); |
| 4284 | |
|
18185
d84dde1fad16
(Fwrite_region): Cancel the 7th argument CODING_SYSTEM
Kenichi Handa <handa@m17n.org>
parents:
18107
diff
changeset
|
4285 GCPRO4 (start, filename, visit, lockname); |
|
17723
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4286 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4287 /* Decide the coding-system to encode the data with. */ |
|
17723
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4288 { |
|
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4289 Lisp_Object val; |
|
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4290 |
|
18647
72b27986e71d
(Finsert_file_contents): If enable-multibyte-characters
Kenichi Handa <handa@m17n.org>
parents:
18613
diff
changeset
|
4291 if (auto_saving) |
|
17723
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4292 val = Qnil; |
|
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4293 else if (!NILP (Vcoding_system_for_write)) |
|
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4294 val = Vcoding_system_for_write; |
|
22811
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4295 else |
|
19543
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4296 { |
|
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4297 /* If the variable `buffer-file-coding-system' is set locally, |
|
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4298 it means that the file was read with some kind of code |
|
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4299 conversion or the varialbe is explicitely set by users. We |
|
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4300 had better write it out with the same coding system even if |
|
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4301 `enable-multibyte-characters' is nil. |
|
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4302 |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4303 If it is not set locally, we anyway have to convert EOL |
|
19543
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4304 format if the default value of `buffer-file-coding-system' |
|
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4305 tells that it is not Unix-like (LF only) format. */ |
|
22977
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4306 int using_default_coding = 0; |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4307 int force_raw_text = 0; |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4308 |
|
19543
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4309 val = current_buffer->buffer_file_coding_system; |
|
22811
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4310 if (NILP (val) |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4311 || NILP (Flocal_variable_p (Qbuffer_file_coding_system, Qnil))) |
|
19543
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4312 { |
|
22977
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4313 val = Qnil; |
|
22811
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4314 if (NILP (current_buffer->enable_multibyte_characters)) |
|
22977
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4315 force_raw_text = 1; |
|
19543
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4316 } |
|
22977
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4317 |
|
22811
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4318 if (NILP (val)) |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4319 { |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4320 /* Check file-coding-system-alist. */ |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4321 Lisp_Object args[7], coding_systems; |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4322 |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4323 args[0] = Qwrite_region; args[1] = start; args[2] = end; |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4324 args[3] = filename; args[4] = append; args[5] = visit; |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4325 args[6] = lockname; |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4326 coding_systems = Ffind_operation_coding_system (7, args); |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4327 if (CONSP (coding_systems) && !NILP (XCONS (coding_systems)->cdr)) |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4328 val = XCONS (coding_systems)->cdr; |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4329 } |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4330 |
|
22977
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4331 if (NILP (val) |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4332 && !NILP (current_buffer->buffer_file_coding_system)) |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4333 { |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4334 /* If we still have not decided a coding system, use the |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4335 default value of buffer-file-coding-system. */ |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4336 val = current_buffer->buffer_file_coding_system; |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4337 using_default_coding = 1; |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4338 } |
|
22811
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4339 |
|
22977
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4340 if (!force_raw_text |
|
22811
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4341 && !NILP (Ffboundp (Vselect_safe_coding_system_function))) |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4342 /* Confirm that VAL can surely encode the current region. */ |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4343 val = call3 (Vselect_safe_coding_system_function, start, end, val); |
|
22977
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4344 |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4345 setup_coding_system (Fcheck_coding_system (val), &coding); |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4346 if (coding.eol_type == CODING_EOL_UNDECIDED |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4347 && !using_default_coding) |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4348 { |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4349 if (! EQ (default_buffer_file_coding.symbol, |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4350 buffer_defaults.buffer_file_coding_system)) |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4351 setup_coding_system (buffer_defaults.buffer_file_coding_system, |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4352 &default_buffer_file_coding); |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4353 if (default_buffer_file_coding.eol_type != CODING_EOL_UNDECIDED) |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4354 { |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4355 Lisp_Object subsidiaries; |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4356 |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4357 coding.eol_type = default_buffer_file_coding.eol_type; |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4358 subsidiaries = Fget (coding.symbol, Qeol_type); |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4359 if (VECTORP (subsidiaries) |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4360 && XVECTOR (subsidiaries)->size == 3) |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4361 coding.symbol |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4362 = XVECTOR (subsidiaries)->contents[coding.eol_type]; |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4363 } |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4364 } |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4365 |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4366 if (force_raw_text) |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4367 setup_raw_text_coding_system (&coding); |
|
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4368 goto done_setup_coding; |
|
17723
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4369 } |
|
22977
8682bf30d667
(Fwrite_region): Reflect the eol conversion
Kenichi Handa <handa@m17n.org>
parents:
22811
diff
changeset
|
4370 |
|
22811
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
4371 setup_coding_system (Fcheck_coding_system (val), &coding); |
|
19543
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4372 |
|
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
4373 done_setup_coding: |
|
17723
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4374 if (!STRINGP (start) && !NILP (current_buffer->selective_display)) |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4375 coding.mode |= CODING_MODE_SELECTIVE_DISPLAY; |
|
17723
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4376 } |
|
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4377 |
|
20432
987ddd5cb6ee
(Finsert_file_contents): Set Vlast_coding_system_used
Kenichi Handa <handa@m17n.org>
parents:
20370
diff
changeset
|
4378 Vlast_coding_system_used = coding.symbol; |
|
987ddd5cb6ee
(Finsert_file_contents): Set Vlast_coding_system_used
Kenichi Handa <handa@m17n.org>
parents:
20370
diff
changeset
|
4379 |
|
2407
1c590cd84ab3
(Fexpand_file_name): Default DEFALT at beginning,
Richard M. Stallman <rms@gnu.org>
parents:
2280
diff
changeset
|
4380 filename = Fexpand_file_name (filename, Qnil); |
|
21020
f7ace8487b28
(auto_save_1): Pass new arg to Fwrite_region.
Richard M. Stallman <rms@gnu.org>
parents:
20944
diff
changeset
|
4381 |
|
f7ace8487b28
(auto_save_1): Pass new arg to Fwrite_region.
Richard M. Stallman <rms@gnu.org>
parents:
20944
diff
changeset
|
4382 if (! NILP (confirm)) |
|
21304
1c2b68b607c8
(barf_or_query_if_file_exists): New arg QUICK. All calls changed.
Richard M. Stallman <rms@gnu.org>
parents:
21244
diff
changeset
|
4383 barf_or_query_if_file_exists (filename, "overwrite", 1, 0, 1); |
|
21020
f7ace8487b28
(auto_save_1): Pass new arg to Fwrite_region.
Richard M. Stallman <rms@gnu.org>
parents:
20944
diff
changeset
|
4384 |
|
5410
c96b98efb5b4
(Fwrite_region): Don't change START and END from nil
Richard M. Stallman <rms@gnu.org>
parents:
5395
diff
changeset
|
4385 if (STRINGP (visit)) |
|
2435
b72453ad92ae
(Fwrite_region): Don't fail to set visit_file.
Richard M. Stallman <rms@gnu.org>
parents:
2407
diff
changeset
|
4386 visit_file = Fexpand_file_name (visit, Qnil); |
|
2407
1c590cd84ab3
(Fexpand_file_name): Default DEFALT at beginning,
Richard M. Stallman <rms@gnu.org>
parents:
2280
diff
changeset
|
4387 else |
|
1c590cd84ab3
(Fexpand_file_name): Default DEFALT at beginning,
Richard M. Stallman <rms@gnu.org>
parents:
2280
diff
changeset
|
4388 visit_file = filename; |
|
8602
99f6ae4160f5
(Fmake_symbolic_link, Ffile_accessible_directory_p, Finsert_file_contents,
Karl Heuer <kwzh@gnu.org>
parents:
8597
diff
changeset
|
4389 UNGCPRO; |
|
2407
1c590cd84ab3
(Fexpand_file_name): Default DEFALT at beginning,
Richard M. Stallman <rms@gnu.org>
parents:
2280
diff
changeset
|
4390 |
|
5410
c96b98efb5b4
(Fwrite_region): Don't change START and END from nil
Richard M. Stallman <rms@gnu.org>
parents:
5395
diff
changeset
|
4391 visiting = (EQ (visit, Qt) || STRINGP (visit)); |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4392 quietly = !NILP (visit); |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4393 |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4394 annotations = Qnil; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4395 |
|
12853
032f8aae6bbe
(Fwrite_region): New arg lockname.
Richard M. Stallman <rms@gnu.org>
parents:
12642
diff
changeset
|
4396 if (NILP (lockname)) |
|
032f8aae6bbe
(Fwrite_region): New arg lockname.
Richard M. Stallman <rms@gnu.org>
parents:
12642
diff
changeset
|
4397 lockname = visit_file; |
|
032f8aae6bbe
(Fwrite_region): New arg lockname.
Richard M. Stallman <rms@gnu.org>
parents:
12642
diff
changeset
|
4398 |
|
032f8aae6bbe
(Fwrite_region): New arg lockname.
Richard M. Stallman <rms@gnu.org>
parents:
12642
diff
changeset
|
4399 GCPRO5 (start, filename, annotations, visit_file, lockname); |
| 230 | 4400 |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4401 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4402 call the corresponding file handler. */ |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
4403 handler = Ffind_file_name_handler (filename, Qwrite_region); |
|
5758
23821c197271
(Fwrite_region): If FILENAME has no handler, see if VISIT has one.
Richard M. Stallman <rms@gnu.org>
parents:
5647
diff
changeset
|
4404 /* If FILENAME has no handler, see if VISIT has one. */ |
|
9131
2190d1e7a69f
(Ffind_file_name_handler, Fcopy_file, Frename_file, Fadd_name_to_file,
Karl Heuer <kwzh@gnu.org>
parents:
9078
diff
changeset
|
4405 if (NILP (handler) && STRINGP (visit)) |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
4406 handler = Ffind_file_name_handler (visit, Qwrite_region); |
| 848 | 4407 |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4408 if (!NILP (handler)) |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4409 { |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4410 Lisp_Object val; |
|
3705
309c27256ceb
(Fcopy_file): Pass all the args to the handler.
Richard M. Stallman <rms@gnu.org>
parents:
3598
diff
changeset
|
4411 val = call6 (handler, Qwrite_region, start, end, |
|
309c27256ceb
(Fcopy_file): Pass all the args to the handler.
Richard M. Stallman <rms@gnu.org>
parents:
3598
diff
changeset
|
4412 filename, append, visit); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4413 |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4414 if (visiting) |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4415 { |
|
10304
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
4416 SAVE_MODIFF = MODIFF; |
|
9307
44d6fc4b638b
(Finsert_file_contents, Fwrite_region, Fdo_auto_save, Fset_buffer_auto_saved):
Karl Heuer <kwzh@gnu.org>
parents:
9291
diff
changeset
|
4417 XSETFASTINT (current_buffer->save_length, Z - BEG); |
|
1377
dcec08a3bec4
(Fwrite_region): If VISIT is a file name,
Richard M. Stallman <rms@gnu.org>
parents:
1358
diff
changeset
|
4418 current_buffer->filename = visit_file; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4419 } |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
4420 UNGCPRO; |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4421 return val; |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4422 } |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4423 |
|
5410
c96b98efb5b4
(Fwrite_region): Don't change START and END from nil
Richard M. Stallman <rms@gnu.org>
parents:
5395
diff
changeset
|
4424 /* Special kludge to simplify auto-saving. */ |
|
c96b98efb5b4
(Fwrite_region): Don't change START and END from nil
Richard M. Stallman <rms@gnu.org>
parents:
5395
diff
changeset
|
4425 if (NILP (start)) |
|
c96b98efb5b4
(Fwrite_region): Don't change START and END from nil
Richard M. Stallman <rms@gnu.org>
parents:
5395
diff
changeset
|
4426 { |
|
9307
44d6fc4b638b
(Finsert_file_contents, Fwrite_region, Fdo_auto_save, Fset_buffer_auto_saved):
Karl Heuer <kwzh@gnu.org>
parents:
9291
diff
changeset
|
4427 XSETFASTINT (start, BEG); |
|
44d6fc4b638b
(Finsert_file_contents, Fwrite_region, Fdo_auto_save, Fset_buffer_auto_saved):
Karl Heuer <kwzh@gnu.org>
parents:
9291
diff
changeset
|
4428 XSETFASTINT (end, Z); |
|
5410
c96b98efb5b4
(Fwrite_region): Don't change START and END from nil
Richard M. Stallman <rms@gnu.org>
parents:
5395
diff
changeset
|
4429 } |
|
c96b98efb5b4
(Fwrite_region): Don't change START and END from nil
Richard M. Stallman <rms@gnu.org>
parents:
5395
diff
changeset
|
4430 |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4431 record_unwind_protect (build_annotations_unwind, Fcurrent_buffer ()); |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4432 count1 = specpdl_ptr - specpdl; |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4433 |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4434 given_buffer = current_buffer; |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4435 annotations = build_annotations (start, end, coding.pre_write_conversion); |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4436 if (current_buffer != given_buffer) |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4437 { |
|
18107
7e13abad5cca
(Fwrite_region, build_annotations):
Richard M. Stallman <rms@gnu.org>
parents:
17959
diff
changeset
|
4438 XSETFASTINT (start, BEGV); |
|
7e13abad5cca
(Fwrite_region, build_annotations):
Richard M. Stallman <rms@gnu.org>
parents:
17959
diff
changeset
|
4439 XSETFASTINT (end, ZV); |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4440 } |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4441 |
| 230 | 4442 #ifdef CLASH_DETECTION |
| 4443 if (!auto_saving) | |
|
16317
763b3b143ed6
(Vuser_login_name): Declared extern.
Richard M. Stallman <rms@gnu.org>
parents:
16226
diff
changeset
|
4444 { |
|
19206
c21764412813
(Fwrite_region): Turn off the feature of checking
Richard M. Stallman <rms@gnu.org>
parents:
19067
diff
changeset
|
4445 #if 0 /* This causes trouble for GNUS. */ |
|
16317
763b3b143ed6
(Vuser_login_name): Declared extern.
Richard M. Stallman <rms@gnu.org>
parents:
16226
diff
changeset
|
4446 /* If we've locked this file for some other buffer, |
|
763b3b143ed6
(Vuser_login_name): Declared extern.
Richard M. Stallman <rms@gnu.org>
parents:
16226
diff
changeset
|
4447 query before proceeding. */ |
|
763b3b143ed6
(Vuser_login_name): Declared extern.
Richard M. Stallman <rms@gnu.org>
parents:
16226
diff
changeset
|
4448 if (!visiting && EQ (Ffile_locked_p (lockname), Qt)) |
|
18744
1718bdf566fd
(Fwrite_region): Fix call2 argument.
Richard M. Stallman <rms@gnu.org>
parents:
18679
diff
changeset
|
4449 call2 (intern ("ask-user-about-lock"), filename, Vuser_login_name); |
|
19206
c21764412813
(Fwrite_region): Turn off the feature of checking
Richard M. Stallman <rms@gnu.org>
parents:
19067
diff
changeset
|
4450 #endif |
|
16317
763b3b143ed6
(Vuser_login_name): Declared extern.
Richard M. Stallman <rms@gnu.org>
parents:
16226
diff
changeset
|
4451 |
|
763b3b143ed6
(Vuser_login_name): Declared extern.
Richard M. Stallman <rms@gnu.org>
parents:
16226
diff
changeset
|
4452 lock_file (lockname); |
|
763b3b143ed6
(Vuser_login_name): Declared extern.
Richard M. Stallman <rms@gnu.org>
parents:
16226
diff
changeset
|
4453 } |
| 230 | 4454 #endif /* CLASH_DETECTION */ |
| 4455 | |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4456 encoded_filename = ENCODE_FILE (filename); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4457 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4458 fn = XSTRING (encoded_filename)->data; |
| 230 | 4459 desc = -1; |
| 485 | 4460 if (!NILP (append)) |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
4461 #ifdef DOS_NT |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
4462 desc = open (fn, O_WRONLY | buffer_file_type); |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
4463 #else /* not DOS_NT */ |
| 230 | 4464 desc = open (fn, O_WRONLY); |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
4465 #endif /* not DOS_NT */ |
| 230 | 4466 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4467 if (desc < 0 && (NILP (append) || errno == ENOENT)) |
| 230 | 4468 #ifdef VMS |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
4469 if (auto_saving) /* Overwrite any previous version of autosave file */ |
| 230 | 4470 { |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
4471 vms_truncate (fn); /* if fn exists, truncate to zero length */ |
| 230 | 4472 desc = open (fn, O_RDWR); |
| 4473 if (desc < 0) | |
|
5410
c96b98efb5b4
(Fwrite_region): Don't change START and END from nil
Richard M. Stallman <rms@gnu.org>
parents:
5395
diff
changeset
|
4474 desc = creat_copy_attrs (STRINGP (current_buffer->filename) |
| 536 | 4475 ? XSTRING (current_buffer->filename)->data : 0, |
| 4476 fn); | |
| 230 | 4477 } |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
4478 else /* Write to temporary name and rename if no errors */ |
| 230 | 4479 { |
| 4480 Lisp_Object temp_name; | |
| 4481 temp_name = Ffile_name_directory (filename); | |
| 4482 | |
| 485 | 4483 if (!NILP (temp_name)) |
| 230 | 4484 { |
| 4485 temp_name = Fmake_temp_name (concat2 (temp_name, | |
| 4486 build_string ("$$SAVE$$"))); | |
| 4487 fname = XSTRING (filename)->data; | |
| 4488 fn = XSTRING (temp_name)->data; | |
| 4489 desc = creat_copy_attrs (fname, fn); | |
| 4490 if (desc < 0) | |
| 4491 { | |
| 4492 /* If we can't open the temporary file, try creating a new | |
| 4493 version of the original file. VMS "creat" creates a | |
| 4494 new version rather than truncating an existing file. */ | |
| 4495 fn = fname; | |
| 4496 fname = 0; | |
| 4497 desc = creat (fn, 0666); | |
| 4498 #if 0 /* This can clobber an existing file and fail to replace it, | |
| 4499 if the user runs out of space. */ | |
| 4500 if (desc < 0) | |
| 4501 { | |
| 4502 /* We can't make a new version; | |
| 4503 try to truncate and rewrite existing version if any. */ | |
| 4504 vms_truncate (fn); | |
| 4505 desc = open (fn, O_RDWR); | |
| 4506 } | |
| 4507 #endif | |
| 4508 } | |
| 4509 } | |
| 4510 else | |
| 4511 desc = creat (fn, 0666); | |
| 4512 } | |
| 4513 #else /* not VMS */ | |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
4514 #ifdef DOS_NT |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
4515 desc = open (fn, |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
4516 O_WRONLY | O_TRUNC | O_CREAT | buffer_file_type, |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
4517 S_IREAD | S_IWRITE); |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
4518 #else /* not DOS_NT */ |
| 230 | 4519 desc = creat (fn, auto_saving ? auto_save_mode_bits : 0666); |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
4520 #endif /* not DOS_NT */ |
| 230 | 4521 #endif /* not VMS */ |
| 4522 | |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
4523 UNGCPRO; |
|
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
4524 |
| 230 | 4525 if (desc < 0) |
| 4526 { | |
| 4527 #ifdef CLASH_DETECTION | |
| 4528 save_errno = errno; | |
|
12853
032f8aae6bbe
(Fwrite_region): New arg lockname.
Richard M. Stallman <rms@gnu.org>
parents:
12642
diff
changeset
|
4529 if (!auto_saving) unlock_file (lockname); |
| 230 | 4530 errno = save_errno; |
| 4531 #endif /* CLASH_DETECTION */ | |
| 4532 report_file_error ("Opening output file", Fcons (filename, Qnil)); | |
| 4533 } | |
| 4534 | |
| 4535 record_unwind_protect (close_file_unwind, make_number (desc)); | |
| 4536 | |
|
22681
127d903d615a
(Ffile_regular_p) [WINDOWSNT]: Bind
Richard M. Stallman <rms@gnu.org>
parents:
22668
diff
changeset
|
4537 if (!NILP (append) && !NILP (Ffile_regular_p (filename))) |
| 230 | 4538 if (lseek (desc, 0, 2) < 0) |
| 4539 { | |
| 4540 #ifdef CLASH_DETECTION | |
|
12853
032f8aae6bbe
(Fwrite_region): New arg lockname.
Richard M. Stallman <rms@gnu.org>
parents:
12642
diff
changeset
|
4541 if (!auto_saving) unlock_file (lockname); |
| 230 | 4542 #endif /* CLASH_DETECTION */ |
| 4543 report_file_error ("Lseek error", Fcons (filename, Qnil)); | |
| 4544 } | |
| 4545 | |
| 4546 #ifdef VMS | |
| 4547 /* | |
| 4548 * Kludge Warning: The VMS C RTL likes to insert carriage returns | |
| 4549 * if we do writes that don't end with a carriage return. Furthermore | |
| 4550 * it cannot handle writes of more then 16K. The modified | |
| 4551 * version of "sys_write" in SYSDEP.C (see comment there) copes with | |
| 4552 * this EXCEPT for the last record (iff it doesn't end with a carriage | |
| 4553 * return). This implies that if your buffer doesn't end with a carriage | |
| 4554 * return, you get one free... tough. However it also means that if | |
| 4555 * we make two calls to sys_write (a la the following code) you can | |
| 4556 * get one at the gap as well. The easiest way to fix this (honest) | |
| 4557 * is to move the gap to the next newline (or the end of the buffer). | |
| 4558 * Thus this change. | |
| 4559 * | |
| 4560 * Yech! | |
| 4561 */ | |
| 4562 if (GPT > BEG && GPT_ADDR[-1] != '\n') | |
| 4563 move_gap (find_next_newline (GPT, 1)); | |
|
17723
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4564 #else |
|
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4565 /* Whether VMS or not, we must move the gap to the next of newline |
|
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4566 when we must put designation sequences at beginning of line. */ |
|
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4567 if (INTEGERP (start) |
|
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4568 && coding.type == coding_type_iso2022 |
|
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4569 && coding.flags & CODING_FLAG_ISO_DESIGNATE_AT_BOL |
|
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4570 && GPT > BEG && GPT_ADDR[-1] != '\n') |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4571 { |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4572 int opoint = PT, opoint_byte = PT_BYTE; |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4573 scan_newline (PT, PT_BYTE, ZV, ZV_BYTE, 1, 0); |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4574 move_gap_both (PT, PT_BYTE); |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4575 SET_PT_BOTH (opoint, opoint_byte); |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4576 } |
| 230 | 4577 #endif |
| 4578 | |
| 4579 failure = 0; | |
| 4580 immediate_quit = 1; | |
| 4581 | |
|
5410
c96b98efb5b4
(Fwrite_region): Don't change START and END from nil
Richard M. Stallman <rms@gnu.org>
parents:
5395
diff
changeset
|
4582 if (STRINGP (start)) |
| 230 | 4583 { |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4584 failure = 0 > a_write (desc, XSTRING (start)->data, |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
4585 STRING_BYTES (XSTRING (start)), 0, &annotations, |
|
20944
b00fa3b6e332
(Fwrite_region): When writing a string, give byte size
Kenichi Handa <handa@m17n.org>
parents:
20929
diff
changeset
|
4586 &coding); |
| 230 | 4587 save_errno = errno; |
| 4588 } | |
| 4589 else if (XINT (start) != XINT (end)) | |
| 4590 { | |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4591 register int end1 = CHAR_TO_BYTE (XINT (end)); |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4592 |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4593 tem = CHAR_TO_BYTE (XINT (start)); |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4594 |
| 230 | 4595 if (XINT (start) < GPT) |
| 4596 { | |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4597 failure = 0 > a_write (desc, BYTE_POS_ADDR (tem), |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4598 min (GPT_BYTE, end1) - tem, tem, &annotations, |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4599 &coding); |
| 230 | 4600 save_errno = errno; |
| 4601 } | |
| 4602 | |
| 4603 if (XINT (end) > GPT && !failure) | |
| 4604 { | |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4605 tem = max (tem, GPT_BYTE); |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4606 failure = 0 > a_write (desc, BYTE_POS_ADDR (tem), end1 - tem, |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4607 tem, &annotations, &coding); |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4608 save_errno = errno; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4609 } |
|
13451
3a69848f7892
(Fwrite_region): Move the code that writes annotations for empty files.
Richard M. Stallman <rms@gnu.org>
parents:
13221
diff
changeset
|
4610 } |
|
3a69848f7892
(Fwrite_region): Move the code that writes annotations for empty files.
Richard M. Stallman <rms@gnu.org>
parents:
13221
diff
changeset
|
4611 else |
|
3a69848f7892
(Fwrite_region): Move the code that writes annotations for empty files.
Richard M. Stallman <rms@gnu.org>
parents:
13221
diff
changeset
|
4612 { |
|
3a69848f7892
(Fwrite_region): Move the code that writes annotations for empty files.
Richard M. Stallman <rms@gnu.org>
parents:
13221
diff
changeset
|
4613 /* If file was empty, still need to write the annotations */ |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4614 coding.mode |= CODING_MODE_LAST_BLOCK; |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4615 failure = 0 > a_write (desc, "", 0, XINT (start), &annotations, &coding); |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4616 save_errno = errno; |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4617 } |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4618 |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4619 if (CODING_REQUIRE_FLUSHING (&coding) |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4620 && !(coding.mode & CODING_MODE_LAST_BLOCK) |
|
20651
0de9f45a1db6
(Finsert_file_contents): When not decoding,
Richard M. Stallman <rms@gnu.org>
parents:
20621
diff
changeset
|
4621 && ! failure) |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4622 { |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4623 /* We have to flush out a data. */ |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4624 coding.mode |= CODING_MODE_LAST_BLOCK; |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4625 failure = 0 > e_write (desc, "", 0, &coding); |
|
13451
3a69848f7892
(Fwrite_region): Move the code that writes annotations for empty files.
Richard M. Stallman <rms@gnu.org>
parents:
13221
diff
changeset
|
4626 save_errno = errno; |
| 230 | 4627 } |
| 4628 | |
| 4629 immediate_quit = 0; | |
| 4630 | |
|
2280
bd56d208ed22
* fileio.c (HAVE_FSYNC): Define, if appropriate.
Jim Blandy <jimb@redhat.com>
parents:
2257
diff
changeset
|
4631 #ifdef HAVE_FSYNC |
| 230 | 4632 /* Note fsync appears to change the modtime on BSD4.2 (both vax and sun). |
| 4633 Disk full in NFS may be reported here. */ | |
|
3415
c37d05ce7e52
(Fwrite_region): Don't fsync if autosaving.
Richard M. Stallman <rms@gnu.org>
parents:
3410
diff
changeset
|
4634 /* mib says that closing the file will try to write as fast as NFS can do |
|
c37d05ce7e52
(Fwrite_region): Don't fsync if autosaving.
Richard M. Stallman <rms@gnu.org>
parents:
3410
diff
changeset
|
4635 it, and that means the fsync here is not crucial for autosave files. */ |
|
c37d05ce7e52
(Fwrite_region): Don't fsync if autosaving.
Richard M. Stallman <rms@gnu.org>
parents:
3410
diff
changeset
|
4636 if (!auto_saving && fsync (desc) < 0) |
|
12540
1a96888d82ed
(Fwrite_region): If fsync fails with EINTR, don't
Karl Heuer <kwzh@gnu.org>
parents:
12369
diff
changeset
|
4637 { |
|
1a96888d82ed
(Fwrite_region): If fsync fails with EINTR, don't
Karl Heuer <kwzh@gnu.org>
parents:
12369
diff
changeset
|
4638 /* If fsync fails with EINTR, don't treat that as serious. */ |
|
1a96888d82ed
(Fwrite_region): If fsync fails with EINTR, don't
Karl Heuer <kwzh@gnu.org>
parents:
12369
diff
changeset
|
4639 if (errno != EINTR) |
|
1a96888d82ed
(Fwrite_region): If fsync fails with EINTR, don't
Karl Heuer <kwzh@gnu.org>
parents:
12369
diff
changeset
|
4640 failure = 1, save_errno = errno; |
|
1a96888d82ed
(Fwrite_region): If fsync fails with EINTR, don't
Karl Heuer <kwzh@gnu.org>
parents:
12369
diff
changeset
|
4641 } |
| 230 | 4642 #endif |
| 4643 | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
4644 /* Spurious "file has changed on disk" warnings have been |
| 230 | 4645 observed on Suns as well. |
| 4646 It seems that `close' can change the modtime, under nfs. | |
| 4647 | |
| 4648 (This has supposedly been fixed in Sunos 4, | |
| 4649 but who knows about all the other machines with NFS?) */ | |
| 4650 #if 0 | |
| 4651 | |
| 4652 /* On VMS and APOLLO, must do the stat after the close | |
| 4653 since closing changes the modtime. */ | |
| 4654 #ifndef VMS | |
| 4655 #ifndef APOLLO | |
| 4656 /* Recall that #if defined does not work on VMS. */ | |
| 4657 #define FOO | |
| 4658 fstat (desc, &st); | |
| 4659 #endif | |
| 4660 #endif | |
| 4661 #endif | |
| 4662 | |
| 4663 /* NFS can report a write failure now. */ | |
| 4664 if (close (desc) < 0) | |
| 4665 failure = 1, save_errno = errno; | |
| 4666 | |
| 4667 #ifdef VMS | |
| 4668 /* If we wrote to a temporary name and had no errors, rename to real name. */ | |
| 4669 if (fname) | |
| 4670 { | |
| 4671 if (!failure) | |
| 4672 failure = (rename (fn, fname) != 0), save_errno = errno; | |
| 4673 fn = fname; | |
| 4674 } | |
| 4675 #endif /* VMS */ | |
| 4676 | |
| 4677 #ifndef FOO | |
| 4678 stat (fn, &st); | |
| 4679 #endif | |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4680 /* Discard the unwind protect for close_file_unwind. */ |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4681 specpdl_ptr = specpdl + count1; |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4682 /* Restore the original current buffer. */ |
|
8662
627a2ed242c0
(Ffile_accessible_directory_p): No need for gcpro.
Richard M. Stallman <rms@gnu.org>
parents:
8603
diff
changeset
|
4683 visit_file = unbind_to (count, visit_file); |
| 230 | 4684 |
| 4685 #ifdef CLASH_DETECTION | |
| 4686 if (!auto_saving) | |
|
12853
032f8aae6bbe
(Fwrite_region): New arg lockname.
Richard M. Stallman <rms@gnu.org>
parents:
12642
diff
changeset
|
4687 unlock_file (lockname); |
| 230 | 4688 #endif /* CLASH_DETECTION */ |
| 4689 | |
| 4690 /* Do this before reporting IO error | |
| 4691 to avoid a "file has changed on disk" warning on | |
| 4692 next attempt to save. */ | |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4693 if (visiting) |
| 230 | 4694 current_buffer->modtime = st.st_mtime; |
| 4695 | |
| 4696 if (failure) | |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4697 error ("IO error writing %s: %s", XSTRING (filename)->data, |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4698 strerror (save_errno)); |
| 230 | 4699 |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4700 if (visiting) |
| 230 | 4701 { |
|
10304
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
4702 SAVE_MODIFF = MODIFF; |
|
9307
44d6fc4b638b
(Finsert_file_contents, Fwrite_region, Fdo_auto_save, Fset_buffer_auto_saved):
Karl Heuer <kwzh@gnu.org>
parents:
9291
diff
changeset
|
4703 XSETFASTINT (current_buffer->save_length, Z - BEG); |
|
1377
dcec08a3bec4
(Fwrite_region): If VISIT is a file name,
Richard M. Stallman <rms@gnu.org>
parents:
1358
diff
changeset
|
4704 current_buffer->filename = visit_file; |
|
7551
69f20f10799a
(Fwrite_region): Set update_mode_lines.
Richard M. Stallman <rms@gnu.org>
parents:
7549
diff
changeset
|
4705 update_mode_lines++; |
| 230 | 4706 } |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4707 else if (quietly) |
| 230 | 4708 return Qnil; |
| 4709 | |
| 4710 if (!auto_saving) | |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
4711 message_with_string ("Wrote %s", visit_file, 1); |
| 230 | 4712 |
| 4713 return Qnil; | |
| 4714 } | |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4715 |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4716 Lisp_Object merge (); |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4717 |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4718 DEFUN ("car-less-than-car", Fcar_less_than_car, Scar_less_than_car, 2, 2, 0, |
|
4853
3ec2205d12b5
(Fcar_less_than_car): Fix typo in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
4841
diff
changeset
|
4719 "Return t if (car A) is numerically less than (car B).") |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4720 (a, b) |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4721 Lisp_Object a, b; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4722 { |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4723 return Flss (Fcar (a), Fcar (b)); |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4724 } |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4725 |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4726 /* Build the complete list of annotations appropriate for writing out |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4727 the text between START and END, by calling all the functions in |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4728 write-region-annotate-functions and merging the lists they return. |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4729 If one of these functions switches to a different buffer, we assume |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4730 that buffer contains altered text. Therefore, the caller must |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4731 make sure to restore the current buffer in all cases, |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4732 as save-excursion would do. */ |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4733 |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4734 static Lisp_Object |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4735 build_annotations (start, end, pre_write_conversion) |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4736 Lisp_Object start, end, pre_write_conversion; |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4737 { |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4738 Lisp_Object annotations; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4739 Lisp_Object p, res; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4740 struct gcpro gcpro1, gcpro2; |
|
16044
63b85944e37b
(build_annotations): Remember original buffer that the
Richard M. Stallman <rms@gnu.org>
parents:
15738
diff
changeset
|
4741 Lisp_Object original_buffer; |
|
63b85944e37b
(build_annotations): Remember original buffer that the
Richard M. Stallman <rms@gnu.org>
parents:
15738
diff
changeset
|
4742 |
|
63b85944e37b
(build_annotations): Remember original buffer that the
Richard M. Stallman <rms@gnu.org>
parents:
15738
diff
changeset
|
4743 XSETBUFFER (original_buffer, current_buffer); |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4744 |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4745 annotations = Qnil; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4746 p = Vwrite_region_annotate_functions; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4747 GCPRO2 (annotations, p); |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4748 while (!NILP (p)) |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4749 { |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4750 struct buffer *given_buffer = current_buffer; |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4751 Vwrite_region_annotations_so_far = annotations; |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4752 res = call2 (Fcar (p), start, end); |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4753 /* If the function makes a different buffer current, |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4754 assume that means this buffer contains altered text to be output. |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4755 Reset START and END from the buffer bounds |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4756 and discard all previous annotations because they should have |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4757 been dealt with by this function. */ |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4758 if (current_buffer != given_buffer) |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4759 { |
|
18107
7e13abad5cca
(Fwrite_region, build_annotations):
Richard M. Stallman <rms@gnu.org>
parents:
17959
diff
changeset
|
4760 XSETFASTINT (start, BEGV); |
|
7e13abad5cca
(Fwrite_region, build_annotations):
Richard M. Stallman <rms@gnu.org>
parents:
17959
diff
changeset
|
4761 XSETFASTINT (end, ZV); |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4762 annotations = Qnil; |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
4763 } |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4764 Flength (res); /* Check basic validity of return value */ |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4765 annotations = merge (annotations, res, Qcar_less_than_car); |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4766 p = Fcdr (p); |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4767 } |
|
11053
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4768 |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4769 /* Now do the same for annotation functions implied by the file-format */ |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4770 if (auto_saving && (!EQ (Vauto_save_file_format, Qt))) |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4771 p = Vauto_save_file_format; |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4772 else |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4773 p = current_buffer->file_format; |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4774 while (!NILP (p)) |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4775 { |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4776 struct buffer *given_buffer = current_buffer; |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4777 Vwrite_region_annotations_so_far = annotations; |
|
16044
63b85944e37b
(build_annotations): Remember original buffer that the
Richard M. Stallman <rms@gnu.org>
parents:
15738
diff
changeset
|
4778 res = call4 (Qformat_annotate_function, Fcar (p), start, end, |
|
63b85944e37b
(build_annotations): Remember original buffer that the
Richard M. Stallman <rms@gnu.org>
parents:
15738
diff
changeset
|
4779 original_buffer); |
|
11053
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4780 if (current_buffer != given_buffer) |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4781 { |
|
18107
7e13abad5cca
(Fwrite_region, build_annotations):
Richard M. Stallman <rms@gnu.org>
parents:
17959
diff
changeset
|
4782 XSETFASTINT (start, BEGV); |
|
7e13abad5cca
(Fwrite_region, build_annotations):
Richard M. Stallman <rms@gnu.org>
parents:
17959
diff
changeset
|
4783 XSETFASTINT (end, ZV); |
|
11053
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4784 annotations = Qnil; |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4785 } |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4786 Flength (res); |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4787 annotations = merge (annotations, res, Qcar_less_than_car); |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4788 p = Fcdr (p); |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
4789 } |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4790 |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4791 /* At last, do the same for the function PRE_WRITE_CONVERSION |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4792 implied by the current coding-system. */ |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4793 if (!NILP (pre_write_conversion)) |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4794 { |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4795 struct buffer *given_buffer = current_buffer; |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4796 Vwrite_region_annotations_so_far = annotations; |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4797 res = call2 (pre_write_conversion, start, end); |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4798 Flength (res); |
|
17723
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4799 annotations = (current_buffer != given_buffer |
|
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4800 ? res |
|
f67a321c8fb6
(Fwrite_region): Add 7th optional arg
Kenichi Handa <handa@m17n.org>
parents:
17718
diff
changeset
|
4801 : merge (annotations, res, Qcar_less_than_car)); |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4802 } |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4803 |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4804 UNGCPRO; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4805 return annotations; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4806 } |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4807 |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4808 /* Write to descriptor DESC the NBYTES bytes starting at ADDR, |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4809 assuming they start at byte position BYTEPOS in the buffer. |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4810 Intersperse with them the annotations from *ANNOT |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4811 which fall within the range of byte positions BYTEPOS to BYTEPOS + NBYTES, |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4812 each at its appropriate position. |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4813 |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4814 We modify *ANNOT by discarding elements as we use them up. |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4815 |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4816 The return value is negative in case of system call failure. */ |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4817 |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4818 static int |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4819 a_write (desc, addr, nbytes, bytepos, annot, coding) |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4820 int desc; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4821 register char *addr; |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4822 register int nbytes; |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4823 int bytepos; |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4824 Lisp_Object *annot; |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4825 struct coding_system *coding; |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4826 { |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4827 Lisp_Object tem; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4828 int nextpos; |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4829 int lastpos = bytepos + nbytes; |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4830 |
|
8079
3f543986a45a
(a_write): Loop while *ANNOT is listp, not consp. Previous code omitted
Roland McGrath <roland@gnu.org>
parents:
8068
diff
changeset
|
4831 while (NILP (*annot) || CONSP (*annot)) |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4832 { |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4833 tem = Fcar_safe (Fcar (*annot)); |
|
20944
b00fa3b6e332
(Fwrite_region): When writing a string, give byte size
Kenichi Handa <handa@m17n.org>
parents:
20929
diff
changeset
|
4834 nextpos = bytepos - 1; |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4835 if (INTEGERP (tem)) |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4836 nextpos = CHAR_TO_BYTE (XFASTINT (tem)); |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4837 |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4838 /* If there are no more annotations in this range, |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4839 output the rest of the range all at once. */ |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4840 if (! (nextpos >= bytepos && nextpos <= lastpos)) |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4841 return e_write (desc, addr, lastpos - bytepos, coding); |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4842 |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4843 /* Output buffer text up to the next annotation's position. */ |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4844 if (nextpos > bytepos) |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4845 { |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4846 if (0 > e_write (desc, addr, nextpos - bytepos, coding)) |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4847 return -1; |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4848 addr += nextpos - bytepos; |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4849 bytepos = nextpos; |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4850 } |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4851 /* Output the annotation. */ |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4852 tem = Fcdr (Fcar (*annot)); |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4853 if (STRINGP (tem)) |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4854 { |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
4855 if (0 > e_write (desc, XSTRING (tem)->data, STRING_BYTES (XSTRING (tem)), |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4856 coding)) |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4857 return -1; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4858 } |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4859 *annot = Fcdr (*annot); |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4860 } |
| 21514 | 4861 return 0; |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4862 } |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
4863 |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4864 #ifndef WRITE_BUF_SIZE |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4865 #define WRITE_BUF_SIZE (16 * 1024) |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4866 #endif |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4867 |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4868 /* Write NBYTES bytes starting at ADDR into descriptor DESC, |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4869 encoding them with coding system CODING. */ |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4870 |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4871 static int |
|
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4872 e_write (desc, addr, nbytes, coding) |
| 230 | 4873 int desc; |
| 4874 register char *addr; | |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4875 register int nbytes; |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4876 struct coding_system *coding; |
| 230 | 4877 { |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4878 char buf[WRITE_BUF_SIZE]; |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4879 |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4880 /* We used to have a code for handling selective display here. But, |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4881 now it is handled within encode_coding. */ |
|
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4882 while (1) |
| 230 | 4883 { |
|
22441
dd560c810254
(set_auto_coding_unwind): New function.
Kenichi Handa <handa@m17n.org>
parents:
22362
diff
changeset
|
4884 int result; |
|
dd560c810254
(set_auto_coding_unwind): New function.
Kenichi Handa <handa@m17n.org>
parents:
22362
diff
changeset
|
4885 |
|
dd560c810254
(set_auto_coding_unwind): New function.
Kenichi Handa <handa@m17n.org>
parents:
22362
diff
changeset
|
4886 result = encode_coding (coding, addr, buf, nbytes, WRITE_BUF_SIZE); |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4887 nbytes -= coding->consumed, addr += coding->consumed; |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4888 if (coding->produced > 0) |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4889 { |
|
20713
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4890 coding->produced -= write (desc, buf, coding->produced); |
|
bab57112b50e
(Finsert_file_contents): Even if
Kenichi Handa <handa@m17n.org>
parents:
20707
diff
changeset
|
4891 if (coding->produced) return -1; |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4892 } |
|
22441
dd560c810254
(set_auto_coding_unwind): New function.
Kenichi Handa <handa@m17n.org>
parents:
22362
diff
changeset
|
4893 if (result == CODING_FINISH_INSUFFICIENT_SRC) |
|
dd560c810254
(set_auto_coding_unwind): New function.
Kenichi Handa <handa@m17n.org>
parents:
22362
diff
changeset
|
4894 { |
|
dd560c810254
(set_auto_coding_unwind): New function.
Kenichi Handa <handa@m17n.org>
parents:
22362
diff
changeset
|
4895 /* The source text ends by an incomplete multibyte form. |
|
dd560c810254
(set_auto_coding_unwind): New function.
Kenichi Handa <handa@m17n.org>
parents:
22362
diff
changeset
|
4896 There's no way other than write it out as is. */ |
|
dd560c810254
(set_auto_coding_unwind): New function.
Kenichi Handa <handa@m17n.org>
parents:
22362
diff
changeset
|
4897 nbytes -= write (desc, addr, nbytes); |
|
dd560c810254
(set_auto_coding_unwind): New function.
Kenichi Handa <handa@m17n.org>
parents:
22362
diff
changeset
|
4898 if (nbytes) return -1; |
|
dd560c810254
(set_auto_coding_unwind): New function.
Kenichi Handa <handa@m17n.org>
parents:
22362
diff
changeset
|
4899 } |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4900 if (nbytes <= 0) |
|
17062
a9f1f08212ec
Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents:
16696
diff
changeset
|
4901 break; |
| 230 | 4902 } |
| 4903 return 0; | |
| 4904 } | |
|
20533
60b9e88f8743
(Finsert_file_contents): Update call to CHAR_HEAD_P.
Richard M. Stallman <rms@gnu.org>
parents:
20432
diff
changeset
|
4905 |
| 230 | 4906 DEFUN ("verify-visited-file-modtime", Fverify_visited_file_modtime, |
| 4907 Sverify_visited_file_modtime, 1, 1, 0, | |
| 4908 "Return t if last mod time of BUF's visited file matches what BUF records.\n\ | |
| 4909 This means that the file has not been changed since it was visited or saved.") | |
| 4910 (buf) | |
| 4911 Lisp_Object buf; | |
| 4912 { | |
| 4913 struct buffer *b; | |
| 4914 struct stat st; | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4915 Lisp_Object handler; |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4916 Lisp_Object filename; |
| 230 | 4917 |
| 4918 CHECK_BUFFER (buf, 0); | |
| 4919 b = XBUFFER (buf); | |
| 4920 | |
|
9131
2190d1e7a69f
(Ffind_file_name_handler, Fcopy_file, Frename_file, Fadd_name_to_file,
Karl Heuer <kwzh@gnu.org>
parents:
9078
diff
changeset
|
4921 if (!STRINGP (b->filename)) return Qt; |
| 230 | 4922 if (b->modtime == 0) return Qt; |
| 4923 | |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4924 /* If the file name has special constructs in it, |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4925 call the corresponding file handler. */ |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
4926 handler = Ffind_file_name_handler (b->filename, |
|
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
4927 Qverify_visited_file_modtime); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4928 if (!NILP (handler)) |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
4929 return call2 (handler, Qverify_visited_file_modtime, buf); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
4930 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4931 filename = ENCODE_FILE (b->filename); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4932 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4933 if (stat (XSTRING (filename)->data, &st) < 0) |
| 230 | 4934 { |
| 4935 /* If the file doesn't exist now and didn't exist before, | |
| 4936 we say that it isn't modified, provided the error is a tame one. */ | |
| 4937 if (errno == ENOENT || errno == EACCES || errno == ENOTDIR) | |
| 4938 st.st_mtime = -1; | |
| 4939 else | |
| 4940 st.st_mtime = 0; | |
| 4941 } | |
| 4942 if (st.st_mtime == b->modtime | |
| 4943 /* If both are positive, accept them if they are off by one second. */ | |
| 4944 || (st.st_mtime > 0 && b->modtime > 0 | |
| 4945 && (st.st_mtime == b->modtime + 1 | |
| 4946 || st.st_mtime == b->modtime - 1))) | |
| 4947 return Qt; | |
| 4948 return Qnil; | |
| 4949 } | |
| 4950 | |
| 4951 DEFUN ("clear-visited-file-modtime", Fclear_visited_file_modtime, | |
| 4952 Sclear_visited_file_modtime, 0, 0, 0, | |
| 4953 "Clear out records of last mod time of visited file.\n\ | |
| 4954 Next attempt to save will certainly not complain of a discrepancy.") | |
| 4955 () | |
| 4956 { | |
| 4957 current_buffer->modtime = 0; | |
| 4958 return Qnil; | |
| 4959 } | |
| 4960 | |
|
2257
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4961 DEFUN ("visited-file-modtime", Fvisited_file_modtime, |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4962 Svisited_file_modtime, 0, 0, 0, |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4963 "Return the current buffer's recorded visited file modification time.\n\ |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4964 The value is a list of the form (HIGH . LOW), like the time values\n\ |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4965 that `file-attributes' returns.") |
| 230 | 4966 () |
| 4967 { | |
|
11878
86257fdd585c
(Fvisited_file_modtime): Cast arg to long_to_cons.
Karl Heuer <kwzh@gnu.org>
parents:
11667
diff
changeset
|
4968 return long_to_cons ((unsigned long) current_buffer->modtime); |
|
2257
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4969 } |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4970 |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4971 DEFUN ("set-visited-file-modtime", Fset_visited_file_modtime, |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4972 Sset_visited_file_modtime, 0, 1, 0, |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4973 "Update buffer's recorded modification time from the visited file's time.\n\ |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4974 Useful if the buffer was not read from the file normally\n\ |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4975 or if the file itself has been changed for some known benign reason.\n\ |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4976 An argument specifies the modification time value to use\n\ |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4977 \(instead of that of the visited file), in the form of a list\n\ |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4978 \(HIGH . LOW) or (HIGH LOW).") |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4979 (time_list) |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4980 Lisp_Object time_list; |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4981 { |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4982 if (!NILP (time_list)) |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4983 current_buffer->modtime = cons_to_long (time_list); |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4984 else |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4985 { |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4986 register Lisp_Object filename; |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4987 struct stat st; |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4988 Lisp_Object handler; |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4989 |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4990 filename = Fexpand_file_name (current_buffer->filename, Qnil); |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4991 |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4992 /* If the file name has special constructs in it, |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4993 call the corresponding file handler. */ |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
4994 handler = Ffind_file_name_handler (filename, Qset_visited_file_modtime); |
|
2257
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
4995 if (!NILP (handler)) |
|
3721
4550c56785d8
(Fset_visited_file_modtime): Don't give the handler
Richard M. Stallman <rms@gnu.org>
parents:
3705
diff
changeset
|
4996 /* The handler can find the file name the same way we did. */ |
|
3829
4130587b6ffc
* fileio.c (Fset_visited_file_modtime): We're only passing two
Jim Blandy <jimb@redhat.com>
parents:
3787
diff
changeset
|
4997 return call2 (handler, Qset_visited_file_modtime, Qnil); |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4998 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
4999 filename = ENCODE_FILE (filename); |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
5000 |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
5001 if (stat (XSTRING (filename)->data, &st) >= 0) |
|
2257
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
5002 current_buffer->modtime = st.st_mtime; |
|
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
5003 } |
| 230 | 5004 |
| 5005 return Qnil; | |
| 5006 } | |
| 5007 | |
| 5008 Lisp_Object | |
| 5009 auto_save_error () | |
| 5010 { | |
| 5011 ring_bell (); | |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
5012 message_with_string ("Autosaving...error for %s", current_buffer->name, 1); |
| 806 | 5013 Fsleep_for (make_number (1), Qnil); |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
5014 message_with_string ("Autosaving...error for %s", current_buffer->name, 0); |
| 806 | 5015 Fsleep_for (make_number (1), Qnil); |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
5016 message_with_string ("Autosaving...error for %s", current_buffer->name, 0); |
| 806 | 5017 Fsleep_for (make_number (1), Qnil); |
| 230 | 5018 return Qnil; |
| 5019 } | |
| 5020 | |
| 5021 Lisp_Object | |
| 5022 auto_save_1 () | |
| 5023 { | |
| 5024 unsigned char *fn; | |
| 5025 struct stat st; | |
| 5026 | |
| 5027 /* Get visited file's mode to become the auto save file's mode. */ | |
| 5028 if (stat (XSTRING (current_buffer->filename)->data, &st) >= 0) | |
| 5029 /* But make sure we can overwrite it later! */ | |
| 5030 auto_save_mode_bits = st.st_mode | 0600; | |
| 5031 else | |
| 5032 auto_save_mode_bits = 0666; | |
| 5033 | |
| 5034 return | |
| 5035 Fwrite_region (Qnil, Qnil, | |
| 5036 current_buffer->auto_save_file_name, | |
|
21020
f7ace8487b28
(auto_save_1): Pass new arg to Fwrite_region.
Richard M. Stallman <rms@gnu.org>
parents:
20944
diff
changeset
|
5037 Qnil, Qlambda, Qnil, Qnil); |
| 230 | 5038 } |
| 5039 | |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5040 static Lisp_Object |
|
18270
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5041 do_auto_save_unwind (stream) /* used as unwind-protect function */ |
|
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5042 Lisp_Object stream; |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5043 { |
|
12642
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
5044 auto_saving = 0; |
|
18270
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5045 if (!NILP (stream)) |
|
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5046 fclose ((FILE *) (XFASTINT (XCONS (stream)->car) << 16 |
|
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5047 | XFASTINT (XCONS (stream)->cdr))); |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5048 return Qnil; |
|
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5049 } |
|
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5050 |
|
18861
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5051 static Lisp_Object |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5052 do_auto_save_unwind_1 (value) /* used as unwind-protect function */ |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5053 Lisp_Object value; |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5054 { |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5055 minibuffer_auto_raise = XINT (value); |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5056 return Qnil; |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5057 } |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5058 |
| 230 | 5059 DEFUN ("do-auto-save", Fdo_auto_save, Sdo_auto_save, 0, 2, "", |
| 5060 "Auto-save all buffers that need it.\n\ | |
| 5061 This is all buffers that have auto-saving enabled\n\ | |
| 5062 and are changed since last auto-saved.\n\ | |
| 5063 Auto-saving writes the buffer into a file\n\ | |
| 5064 so that your editing is not lost if the system crashes.\n\ | |
|
6209
2a8a76b9a2fe
(Fdo_auto_save): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6194
diff
changeset
|
5065 This file is not the file you visited; that changes only when you save.\n\ |
|
2a8a76b9a2fe
(Fdo_auto_save): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
6194
diff
changeset
|
5066 Normally we run the normal hook `auto-save-hook' before saving.\n\n\ |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
5067 A non-nil NO-MESSAGE argument means do not print any message if successful.\n\ |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
5068 A non-nil CURRENT-ONLY argument means save only current buffer.") |
|
1775
f9ac4c0d8b72
* fileio.c (Fdo_auto_save): Add CURRENT_ONLY argument, as
Jim Blandy <jimb@redhat.com>
parents:
1763
diff
changeset
|
5069 (no_message, current_only) |
|
f9ac4c0d8b72
* fileio.c (Fdo_auto_save): Add CURRENT_ONLY argument, as
Jim Blandy <jimb@redhat.com>
parents:
1763
diff
changeset
|
5070 Lisp_Object no_message, current_only; |
| 230 | 5071 { |
| 5072 struct buffer *old = current_buffer, *b; | |
| 5073 Lisp_Object tail, buf; | |
| 5074 int auto_saved = 0; | |
| 5075 char *omessage = echo_area_glyphs; | |
|
5875
6bfcd23bfa84
(Fdo_auto_save): Save echo_area_glyphs_length.
Karl Heuer <kwzh@gnu.org>
parents:
5758
diff
changeset
|
5076 int omessage_length = echo_area_glyphs_length; |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
5077 int oldmultibyte = message_enable_multibyte; |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5078 int do_handled_files; |
|
4270
3ce8e11f338b
(Fdo_auto_save): Temporarily clear Vquit_flag.
Richard M. Stallman <rms@gnu.org>
parents:
3963
diff
changeset
|
5079 Lisp_Object oquit; |
|
18270
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5080 FILE *stream; |
|
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5081 Lisp_Object lispstream; |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5082 int count = specpdl_ptr - specpdl; |
|
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5083 int *ptr; |
|
18861
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5084 int orig_minibuffer_auto_raise = minibuffer_auto_raise; |
|
4270
3ce8e11f338b
(Fdo_auto_save): Temporarily clear Vquit_flag.
Richard M. Stallman <rms@gnu.org>
parents:
3963
diff
changeset
|
5085 |
|
3ce8e11f338b
(Fdo_auto_save): Temporarily clear Vquit_flag.
Richard M. Stallman <rms@gnu.org>
parents:
3963
diff
changeset
|
5086 /* Ordinarily don't quit within this function, |
|
3ce8e11f338b
(Fdo_auto_save): Temporarily clear Vquit_flag.
Richard M. Stallman <rms@gnu.org>
parents:
3963
diff
changeset
|
5087 but don't make it impossible to quit (in case we get hung in I/O). */ |
|
3ce8e11f338b
(Fdo_auto_save): Temporarily clear Vquit_flag.
Richard M. Stallman <rms@gnu.org>
parents:
3963
diff
changeset
|
5088 oquit = Vquit_flag; |
|
3ce8e11f338b
(Fdo_auto_save): Temporarily clear Vquit_flag.
Richard M. Stallman <rms@gnu.org>
parents:
3963
diff
changeset
|
5089 Vquit_flag = Qnil; |
| 230 | 5090 |
| 5091 /* No GCPRO needed, because (when it matters) all Lisp_Object variables | |
| 5092 point to non-strings reached from Vbuffer_alist. */ | |
| 5093 | |
| 5094 if (minibuf_level) | |
|
1775
f9ac4c0d8b72
* fileio.c (Fdo_auto_save): Add CURRENT_ONLY argument, as
Jim Blandy <jimb@redhat.com>
parents:
1763
diff
changeset
|
5095 no_message = Qt; |
| 230 | 5096 |
| 485 | 5097 if (!NILP (Vrun_hooks)) |
| 230 | 5098 call1 (Vrun_hooks, intern ("auto-save-hook")); |
| 5099 | |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5100 if (STRINGP (Vauto_save_list_file_name)) |
|
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5101 { |
|
11632
ddbe0702ea95
(Fdo_auto_save): Record visited file name
Richard M. Stallman <rms@gnu.org>
parents:
11599
diff
changeset
|
5102 Lisp_Object listfile; |
|
ddbe0702ea95
(Fdo_auto_save): Record visited file name
Richard M. Stallman <rms@gnu.org>
parents:
11599
diff
changeset
|
5103 listfile = Fexpand_file_name (Vauto_save_list_file_name, Qnil); |
|
18270
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5104 stream = fopen (XSTRING (listfile)->data, "w"); |
|
19401
2ada2106a39c
(Fdo_auto_save): If open fails, make lispstream nil.
Richard M. Stallman <rms@gnu.org>
parents:
19399
diff
changeset
|
5105 if (stream != NULL) |
|
2ada2106a39c
(Fdo_auto_save): If open fails, make lispstream nil.
Richard M. Stallman <rms@gnu.org>
parents:
19399
diff
changeset
|
5106 { |
|
2ada2106a39c
(Fdo_auto_save): If open fails, make lispstream nil.
Richard M. Stallman <rms@gnu.org>
parents:
19399
diff
changeset
|
5107 /* Arrange to close that file whether or not we get an error. |
|
2ada2106a39c
(Fdo_auto_save): If open fails, make lispstream nil.
Richard M. Stallman <rms@gnu.org>
parents:
19399
diff
changeset
|
5108 Also reset auto_saving to 0. */ |
|
2ada2106a39c
(Fdo_auto_save): If open fails, make lispstream nil.
Richard M. Stallman <rms@gnu.org>
parents:
19399
diff
changeset
|
5109 lispstream = Fcons (Qnil, Qnil); |
|
2ada2106a39c
(Fdo_auto_save): If open fails, make lispstream nil.
Richard M. Stallman <rms@gnu.org>
parents:
19399
diff
changeset
|
5110 XSETFASTINT (XCONS (lispstream)->car, (EMACS_UINT)stream >> 16); |
|
2ada2106a39c
(Fdo_auto_save): If open fails, make lispstream nil.
Richard M. Stallman <rms@gnu.org>
parents:
19399
diff
changeset
|
5111 XSETFASTINT (XCONS (lispstream)->cdr, (EMACS_UINT)stream & 0xffff); |
|
2ada2106a39c
(Fdo_auto_save): If open fails, make lispstream nil.
Richard M. Stallman <rms@gnu.org>
parents:
19399
diff
changeset
|
5112 } |
|
2ada2106a39c
(Fdo_auto_save): If open fails, make lispstream nil.
Richard M. Stallman <rms@gnu.org>
parents:
19399
diff
changeset
|
5113 else |
|
2ada2106a39c
(Fdo_auto_save): If open fails, make lispstream nil.
Richard M. Stallman <rms@gnu.org>
parents:
19399
diff
changeset
|
5114 lispstream = Qnil; |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5115 } |
|
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5116 else |
|
18270
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5117 { |
|
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5118 stream = NULL; |
|
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5119 lispstream = Qnil; |
|
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5120 } |
|
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5121 |
|
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5122 record_unwind_protect (do_auto_save_unwind, lispstream); |
|
18861
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5123 record_unwind_protect (do_auto_save_unwind_1, |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5124 make_number (minibuffer_auto_raise)); |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5125 minibuffer_auto_raise = 0; |
|
12642
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
5126 auto_saving = 1; |
|
cdfbcff1f22a
(do_auto_save_unwind): Set auto_saving to 0.
Richard M. Stallman <rms@gnu.org>
parents:
12540
diff
changeset
|
5127 |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5128 /* First, save all files which don't have handlers. If Emacs is |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5129 crashing, the handlers may tweak what is causing Emacs to crash |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5130 in the first place, and it would be a shame if Emacs failed to |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5131 autosave perfectly ordinary files because it couldn't handle some |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5132 ange-ftp'd file. */ |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5133 for (do_handled_files = 0; do_handled_files < 2; do_handled_files++) |
|
9962
72bee09fc541
(Fdo_auto_save): Use the new type-test macros.
Karl Heuer <kwzh@gnu.org>
parents:
9955
diff
changeset
|
5134 for (tail = Vbuffer_alist; GC_CONSP (tail); tail = XCONS (tail)->cdr) |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5135 { |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5136 buf = XCONS (XCONS (tail)->car)->cdr; |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5137 b = XBUFFER (buf); |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
5138 |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5139 /* Record all the buffers that have auto save mode |
|
11632
ddbe0702ea95
(Fdo_auto_save): Record visited file name
Richard M. Stallman <rms@gnu.org>
parents:
11599
diff
changeset
|
5140 in the special file that lists them. For each of these buffers, |
|
ddbe0702ea95
(Fdo_auto_save): Record visited file name
Richard M. Stallman <rms@gnu.org>
parents:
11599
diff
changeset
|
5141 Record visited name (if any) and auto save name. */ |
|
9131
2190d1e7a69f
(Ffind_file_name_handler, Fcopy_file, Frename_file, Fadd_name_to_file,
Karl Heuer <kwzh@gnu.org>
parents:
9078
diff
changeset
|
5142 if (STRINGP (b->auto_save_file_name) |
|
18270
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5143 && stream != NULL && do_handled_files == 0) |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5144 { |
|
11632
ddbe0702ea95
(Fdo_auto_save): Record visited file name
Richard M. Stallman <rms@gnu.org>
parents:
11599
diff
changeset
|
5145 if (!NILP (b->filename)) |
|
ddbe0702ea95
(Fdo_auto_save): Record visited file name
Richard M. Stallman <rms@gnu.org>
parents:
11599
diff
changeset
|
5146 { |
|
18270
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5147 fwrite (XSTRING (b->filename)->data, 1, |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
5148 STRING_BYTES (XSTRING (b->filename)), stream); |
|
11632
ddbe0702ea95
(Fdo_auto_save): Record visited file name
Richard M. Stallman <rms@gnu.org>
parents:
11599
diff
changeset
|
5149 } |
|
18270
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5150 putc ('\n', stream); |
|
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5151 fwrite (XSTRING (b->auto_save_file_name)->data, 1, |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
5152 STRING_BYTES (XSTRING (b->auto_save_file_name)), stream); |
|
18270
fd2ccbdc5660
(Fdo_auto_save): Use stdio to write the save-list file.
Richard M. Stallman <rms@gnu.org>
parents:
18210
diff
changeset
|
5153 putc ('\n', stream); |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5154 } |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5155 |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5156 if (!NILP (current_only) |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5157 && b != current_buffer) |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5158 continue; |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5159 |
|
10304
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
5160 /* Don't auto-save indirect buffers. |
|
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
5161 The base buffer takes care of it. */ |
|
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
5162 if (b->base_buffer) |
|
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
5163 continue; |
|
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
5164 |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5165 /* Check for auto save enabled |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5166 and file changed since last auto save |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5167 and file changed since last real save. */ |
|
9131
2190d1e7a69f
(Ffind_file_name_handler, Fcopy_file, Frename_file, Fadd_name_to_file,
Karl Heuer <kwzh@gnu.org>
parents:
9078
diff
changeset
|
5168 if (STRINGP (b->auto_save_file_name) |
|
10304
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
5169 && BUF_SAVE_MODIFF (b) < BUF_MODIFF (b) |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5170 && b->auto_save_modified < BUF_MODIFF (b) |
|
6678
e29adbacde1d
(Fdo_auto_save): Don't turn off auto save mode.
Richard M. Stallman <rms@gnu.org>
parents:
6498
diff
changeset
|
5171 /* -1 means we've turned off autosaving for a while--see below. */ |
|
e29adbacde1d
(Fdo_auto_save): Don't turn off auto save mode.
Richard M. Stallman <rms@gnu.org>
parents:
6498
diff
changeset
|
5172 && XINT (b->save_length) >= 0 |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5173 && (do_handled_files |
|
7029
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
5174 || NILP (Ffind_file_name_handler (b->auto_save_file_name, |
|
f67c02c50e2a
(Ffind_file_name_handler): New argument OPERATION. All callers changed.
Karl Heuer <kwzh@gnu.org>
parents:
6898
diff
changeset
|
5175 Qwrite_region)))) |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5176 { |
|
5553
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5177 EMACS_TIME before_time, after_time; |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5178 |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5179 EMACS_GET_TIME (before_time); |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5180 |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5181 /* If we had a failure, don't try again for 20 minutes. */ |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5182 if (b->auto_save_failure_time >= 0 |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5183 && EMACS_SECS (before_time) - b->auto_save_failure_time < 1200) |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5184 continue; |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5185 |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5186 if ((XFASTINT (b->save_length) * 10 |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5187 > (BUF_Z (b) - BUF_BEG (b)) * 13) |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5188 /* A short file is likely to change a large fraction; |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5189 spare the user annoying messages. */ |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5190 && XFASTINT (b->save_length) > 5000 |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5191 /* These messages are frequent and annoying for `*mail*'. */ |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5192 && !EQ (b->filename, Qnil) |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5193 && NILP (no_message)) |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5194 { |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5195 /* It has shrunk too much; turn off auto-saving here. */ |
|
18861
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5196 minibuffer_auto_raise = orig_minibuffer_auto_raise; |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
5197 message_with_string ("Buffer %s has shrunk a lot; auto save turned off there", |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
5198 b->name, 1); |
|
18861
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5199 minibuffer_auto_raise = 0; |
|
6678
e29adbacde1d
(Fdo_auto_save): Don't turn off auto save mode.
Richard M. Stallman <rms@gnu.org>
parents:
6498
diff
changeset
|
5200 /* Turn off auto-saving until there's a real save, |
|
e29adbacde1d
(Fdo_auto_save): Don't turn off auto save mode.
Richard M. Stallman <rms@gnu.org>
parents:
6498
diff
changeset
|
5201 and prevent any more warnings. */ |
|
9266
811ad893828b
(Fdefault_file_modes, Finsert_file_contents, Fdo_auto_save): Use new accessor
Karl Heuer <kwzh@gnu.org>
parents:
9241
diff
changeset
|
5202 XSETINT (b->save_length, -1); |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5203 Fsleep_for (make_number (1), Qnil); |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5204 continue; |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5205 } |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5206 set_buffer_internal (b); |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5207 if (!auto_saved && NILP (no_message)) |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5208 message1 ("Auto-saving..."); |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5209 internal_condition_case (auto_save_1, Qt, auto_save_error); |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5210 auto_saved++; |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5211 b->auto_save_modified = BUF_MODIFF (b); |
|
9307
44d6fc4b638b
(Finsert_file_contents, Fwrite_region, Fdo_auto_save, Fset_buffer_auto_saved):
Karl Heuer <kwzh@gnu.org>
parents:
9291
diff
changeset
|
5212 XSETFASTINT (current_buffer->save_length, Z - BEG); |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5213 set_buffer_internal (old); |
|
5553
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5214 |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5215 EMACS_GET_TIME (after_time); |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5216 |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5217 /* If auto-save took more than 60 seconds, |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5218 assume it was an NFS failure that got a timeout. */ |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5219 if (EMACS_SECS (after_time) - EMACS_SECS (before_time) > 60) |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5220 b->auto_save_failure_time = EMACS_SECS (after_time); |
|
1869
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5221 } |
|
30eb06b22ae4
* fileio.c (Fdo_auto_save): If NO_MESSAGE is non-nil, don't tell
Jim Blandy <jimb@redhat.com>
parents:
1775
diff
changeset
|
5222 } |
| 230 | 5223 |
|
1059
430923239064
(Fdo_auto_save): Always call record_auto_save.
Richard M. Stallman <rms@gnu.org>
parents:
1044
diff
changeset
|
5224 /* Prevent another auto save till enough input events come in. */ |
|
430923239064
(Fdo_auto_save): Always call record_auto_save.
Richard M. Stallman <rms@gnu.org>
parents:
1044
diff
changeset
|
5225 record_auto_save (); |
| 230 | 5226 |
|
1775
f9ac4c0d8b72
* fileio.c (Fdo_auto_save): Add CURRENT_ONLY argument, as
Jim Blandy <jimb@redhat.com>
parents:
1763
diff
changeset
|
5227 if (auto_saved && NILP (no_message)) |
|
5875
6bfcd23bfa84
(Fdo_auto_save): Save echo_area_glyphs_length.
Karl Heuer <kwzh@gnu.org>
parents:
5758
diff
changeset
|
5228 { |
|
6bfcd23bfa84
(Fdo_auto_save): Save echo_area_glyphs_length.
Karl Heuer <kwzh@gnu.org>
parents:
5758
diff
changeset
|
5229 if (omessage) |
|
14616
051d6225ca90
(Fdo_auto_save): Pause before restoring old message.
Karl Heuer <kwzh@gnu.org>
parents:
14571
diff
changeset
|
5230 { |
|
17959
7b3eb9189759
(Fdo_auto_save): Pass new arg to sit_for.
Richard M. Stallman <rms@gnu.org>
parents:
17835
diff
changeset
|
5231 sit_for (1, 0, 0, 0, 0); |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
5232 message2 (omessage, omessage_length, oldmultibyte); |
|
14616
051d6225ca90
(Fdo_auto_save): Pause before restoring old message.
Karl Heuer <kwzh@gnu.org>
parents:
14571
diff
changeset
|
5233 } |
|
5875
6bfcd23bfa84
(Fdo_auto_save): Save echo_area_glyphs_length.
Karl Heuer <kwzh@gnu.org>
parents:
5758
diff
changeset
|
5234 else |
|
6bfcd23bfa84
(Fdo_auto_save): Save echo_area_glyphs_length.
Karl Heuer <kwzh@gnu.org>
parents:
5758
diff
changeset
|
5235 message1 ("Auto-saving...done"); |
|
6bfcd23bfa84
(Fdo_auto_save): Save echo_area_glyphs_length.
Karl Heuer <kwzh@gnu.org>
parents:
5758
diff
changeset
|
5236 } |
| 230 | 5237 |
|
4270
3ce8e11f338b
(Fdo_auto_save): Temporarily clear Vquit_flag.
Richard M. Stallman <rms@gnu.org>
parents:
3963
diff
changeset
|
5238 Vquit_flag = oquit; |
|
3ce8e11f338b
(Fdo_auto_save): Temporarily clear Vquit_flag.
Richard M. Stallman <rms@gnu.org>
parents:
3963
diff
changeset
|
5239 |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5240 unbind_to (count, Qnil); |
| 230 | 5241 return Qnil; |
| 5242 } | |
| 5243 | |
| 5244 DEFUN ("set-buffer-auto-saved", Fset_buffer_auto_saved, | |
| 5245 Sset_buffer_auto_saved, 0, 0, 0, | |
| 5246 "Mark current buffer as auto-saved with its current text.\n\ | |
| 5247 No auto-save file will be written until the buffer changes again.") | |
| 5248 () | |
| 5249 { | |
| 5250 current_buffer->auto_save_modified = MODIFF; | |
|
9307
44d6fc4b638b
(Finsert_file_contents, Fwrite_region, Fdo_auto_save, Fset_buffer_auto_saved):
Karl Heuer <kwzh@gnu.org>
parents:
9291
diff
changeset
|
5251 XSETFASTINT (current_buffer->save_length, Z - BEG); |
|
5553
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5252 current_buffer->auto_save_failure_time = -1; |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5253 return Qnil; |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5254 } |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5255 |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5256 DEFUN ("clear-buffer-auto-save-failure", Fclear_buffer_auto_save_failure, |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5257 Sclear_buffer_auto_save_failure, 0, 0, 0, |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5258 "Clear any record of a recent auto-save failure in the current buffer.") |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5259 () |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5260 { |
|
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5261 current_buffer->auto_save_failure_time = -1; |
| 230 | 5262 return Qnil; |
| 5263 } | |
| 5264 | |
| 5265 DEFUN ("recent-auto-save-p", Frecent_auto_save_p, Srecent_auto_save_p, | |
| 5266 0, 0, 0, | |
| 5267 "Return t if buffer has been auto-saved since last read in or saved.") | |
| 5268 () | |
| 5269 { | |
|
10304
ce5ab980a14f
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
10084
diff
changeset
|
5270 return (SAVE_MODIFF < current_buffer->auto_save_modified) ? Qt : Qnil; |
| 230 | 5271 } |
| 5272 | |
| 5273 /* Reading and completing file names */ | |
| 5274 extern Lisp_Object Ffile_name_completion (), Ffile_name_all_completions (); | |
| 5275 | |
|
5647
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5276 /* In the string VAL, change each $ to $$ and return the result. */ |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5277 |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5278 static Lisp_Object |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5279 double_dollars (val) |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5280 Lisp_Object val; |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5281 { |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5282 register unsigned char *old, *new; |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5283 register int n; |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5284 int osize, count; |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5285 |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
5286 osize = STRING_BYTES (XSTRING (val)); |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
5287 |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
5288 /* Count the number of $ characters. */ |
|
5647
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5289 for (n = osize, count = 0, old = XSTRING (val)->data; n > 0; n--) |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5290 if (*old++ == '$') count++; |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5291 if (count > 0) |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5292 { |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5293 old = XSTRING (val)->data; |
|
20621
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
5294 val = make_uninit_multibyte_string (XSTRING (val)->size + count, |
|
ee017970042d
(Fdo_auto_save): Save and restore multibyteness of minibuffer.
Richard M. Stallman <rms@gnu.org>
parents:
20560
diff
changeset
|
5295 osize + count); |
|
5647
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5296 new = XSTRING (val)->data; |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5297 for (n = osize; n > 0; n--) |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5298 if (*old != '$') |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5299 *new++ = *old++; |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5300 else |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5301 { |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5302 *new++ = '$'; |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5303 *new++ = '$'; |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5304 old++; |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5305 } |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5306 } |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5307 return val; |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5308 } |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5309 |
| 230 | 5310 DEFUN ("read-file-name-internal", Fread_file_name_internal, Sread_file_name_internal, |
| 5311 3, 3, 0, | |
| 5312 "Internal subroutine for read-file-name. Do not call this.") | |
| 5313 (string, dir, action) | |
| 5314 Lisp_Object string, dir, action; | |
| 5315 /* action is nil for complete, t for return list of completions, | |
| 5316 lambda for verify final value */ | |
| 5317 { | |
| 5318 Lisp_Object name, specdir, realdir, val, orig_string; | |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5319 int changed; |
|
9955
dfb5d7e86733
(Fread_file_name_internal): Protect orig_string.
Richard M. Stallman <rms@gnu.org>
parents:
9921
diff
changeset
|
5320 struct gcpro gcpro1, gcpro2, gcpro3, gcpro4, gcpro5; |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5321 |
|
16651
e7449d679e72
(Fread_file_name_internal): Verify STRING is a string.
Richard M. Stallman <rms@gnu.org>
parents:
16534
diff
changeset
|
5322 CHECK_STRING (string, 0); |
|
e7449d679e72
(Fread_file_name_internal): Verify STRING is a string.
Richard M. Stallman <rms@gnu.org>
parents:
16534
diff
changeset
|
5323 |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5324 realdir = dir; |
|
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5325 name = string; |
|
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5326 orig_string = Qnil; |
|
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5327 specdir = Qnil; |
|
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5328 changed = 0; |
|
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5329 /* No need to protect ACTION--we only compare it with t and nil. */ |
|
9955
dfb5d7e86733
(Fread_file_name_internal): Protect orig_string.
Richard M. Stallman <rms@gnu.org>
parents:
9921
diff
changeset
|
5330 GCPRO5 (string, realdir, name, specdir, orig_string); |
| 230 | 5331 |
| 5332 if (XSTRING (string)->size == 0) | |
| 5333 { | |
| 5334 if (EQ (action, Qlambda)) | |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5335 { |
|
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5336 UNGCPRO; |
|
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5337 return Qnil; |
|
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5338 } |
| 230 | 5339 } |
| 5340 else | |
| 5341 { | |
| 5342 orig_string = string; | |
| 5343 string = Fsubstitute_in_file_name (string); | |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5344 changed = NILP (Fstring_equal (string, orig_string)); |
| 230 | 5345 name = Ffile_name_nondirectory (string); |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5346 val = Ffile_name_directory (string); |
|
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5347 if (! NILP (val)) |
|
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5348 realdir = Fexpand_file_name (val, realdir); |
| 230 | 5349 } |
| 5350 | |
| 485 | 5351 if (NILP (action)) |
| 230 | 5352 { |
| 5353 specdir = Ffile_name_directory (string); | |
| 5354 val = Ffile_name_completion (name, realdir); | |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5355 UNGCPRO; |
|
9131
2190d1e7a69f
(Ffind_file_name_handler, Fcopy_file, Frename_file, Fadd_name_to_file,
Karl Heuer <kwzh@gnu.org>
parents:
9078
diff
changeset
|
5356 if (!STRINGP (val)) |
| 230 | 5357 { |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5358 if (changed) |
|
8454
b09c4b7a4729
(Fread_file_name_internal): Call double_dollars when `changed' is set.
Richard M. Stallman <rms@gnu.org>
parents:
8317
diff
changeset
|
5359 return double_dollars (string); |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5360 return val; |
| 230 | 5361 } |
| 5362 | |
| 485 | 5363 if (!NILP (specdir)) |
| 230 | 5364 val = concat2 (specdir, val); |
| 5365 #ifndef VMS | |
|
5647
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5366 return double_dollars (val); |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5367 #else /* not VMS */ |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5368 return val; |
|
5647
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5369 #endif /* not VMS */ |
| 230 | 5370 } |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5371 UNGCPRO; |
| 230 | 5372 |
| 5373 if (EQ (action, Qt)) | |
| 5374 return Ffile_name_all_completions (name, realdir); | |
| 5375 /* Only other case actually used is ACTION = lambda */ | |
| 5376 #ifdef VMS | |
| 5377 /* Supposedly this helps commands such as `cd' that read directory names, | |
| 5378 but can someone explain how it helps them? -- RMS */ | |
| 5379 if (XSTRING (name)->size == 0) | |
| 5380 return Qt; | |
| 5381 #endif /* VMS */ | |
| 5382 return Ffile_exists_p (string); | |
| 5383 } | |
| 5384 | |
| 5385 DEFUN ("read-file-name", Fread_file_name, Sread_file_name, 1, 5, 0, | |
| 5386 "Read file name, prompting with PROMPT and completing in directory DIR.\n\ | |
| 5387 Value is not expanded---you must call `expand-file-name' yourself.\n\ | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
5388 Default name to DEFAULT-FILENAME if user enters a null string.\n\ |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
5389 (If DEFAULT-FILENAME is omitted, the visited file name is used,\n\ |
|
9078
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
5390 except that if INITIAL is specified, that combined with DIR is used.)\n\ |
| 230 | 5391 Fourth arg MUSTMATCH non-nil means require existing file's name.\n\ |
| 5392 Non-nil and non-t means also require confirmation after completion.\n\ | |
| 5393 Fifth arg INITIAL specifies text to start with.\n\ | |
| 5394 DIR defaults to current buffer's directory default.") | |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
5395 (prompt, dir, default_filename, mustmatch, initial) |
|
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
5396 Lisp_Object prompt, dir, default_filename, mustmatch, initial; |
| 230 | 5397 { |
| 866 | 5398 Lisp_Object val, insdef, insdef1, tem; |
| 230 | 5399 struct gcpro gcpro1, gcpro2; |
| 5400 register char *homedir; | |
|
20897
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5401 int replace_in_history = 0; |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5402 int add_to_history = 0; |
| 230 | 5403 int count; |
| 5404 | |
| 485 | 5405 if (NILP (dir)) |
| 230 | 5406 dir = current_buffer->directory; |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
5407 if (NILP (default_filename)) |
|
9078
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
5408 { |
|
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
5409 if (! NILP (initial)) |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
5410 default_filename = Fexpand_file_name (initial, dir); |
|
9078
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
5411 else |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
5412 default_filename = current_buffer->filename; |
|
9078
283534a85f5a
(Ffile_writable_p): Use stat to test for existence.
Richard M. Stallman <rms@gnu.org>
parents:
8885
diff
changeset
|
5413 } |
| 230 | 5414 |
| 5415 /* If dir starts with user's homedir, change that to ~. */ | |
| 5416 homedir = (char *) egetenv ("HOME"); | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
5417 #ifdef DOS_NT |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
5418 homedir = strcpy (alloca (strlen (homedir) + 1), homedir); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
5419 CORRECT_DIR_SEPS (homedir); |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
5420 #endif |
| 230 | 5421 if (homedir != 0 |
|
9131
2190d1e7a69f
(Ffind_file_name_handler, Fcopy_file, Frename_file, Fadd_name_to_file,
Karl Heuer <kwzh@gnu.org>
parents:
9078
diff
changeset
|
5422 && STRINGP (dir) |
| 230 | 5423 && !strncmp (homedir, XSTRING (dir)->data, strlen (homedir)) |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
5424 && IS_DIRECTORY_SEP (XSTRING (dir)->data[strlen (homedir)])) |
| 230 | 5425 { |
| 5426 dir = make_string (XSTRING (dir)->data + strlen (homedir) - 1, | |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21189
diff
changeset
|
5427 STRING_BYTES (XSTRING (dir)) - strlen (homedir) + 1); |
| 230 | 5428 XSTRING (dir)->data[0] = '~'; |
| 5429 } | |
| 5430 | |
|
16651
e7449d679e72
(Fread_file_name_internal): Verify STRING is a string.
Richard M. Stallman <rms@gnu.org>
parents:
16534
diff
changeset
|
5431 if (insert_default_directory && STRINGP (dir)) |
| 230 | 5432 { |
| 5433 insdef = dir; | |
| 485 | 5434 if (!NILP (initial)) |
| 230 | 5435 { |
|
863
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5436 Lisp_Object args[2], pos; |
| 230 | 5437 |
| 5438 args[0] = insdef; | |
| 5439 args[1] = initial; | |
| 5440 insdef = Fconcat (2, args); | |
|
6181
dd271c6b4e56
(Fread_file_name): Do the right thing when insert-default-directory is nil.
Karl Heuer <kwzh@gnu.org>
parents:
6177
diff
changeset
|
5441 pos = make_number (XSTRING (double_dollars (dir))->size); |
|
5647
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5442 insdef1 = Fcons (double_dollars (insdef), pos); |
| 230 | 5443 } |
|
5647
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5444 else |
|
7bd40f51b9e9
(double_dollars): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5616
diff
changeset
|
5445 insdef1 = double_dollars (insdef); |
| 230 | 5446 } |
|
16651
e7449d679e72
(Fread_file_name_internal): Verify STRING is a string.
Richard M. Stallman <rms@gnu.org>
parents:
16534
diff
changeset
|
5447 else if (STRINGP (initial)) |
|
6181
dd271c6b4e56
(Fread_file_name): Do the right thing when insert-default-directory is nil.
Karl Heuer <kwzh@gnu.org>
parents:
6177
diff
changeset
|
5448 { |
|
dd271c6b4e56
(Fread_file_name): Do the right thing when insert-default-directory is nil.
Karl Heuer <kwzh@gnu.org>
parents:
6177
diff
changeset
|
5449 insdef = initial; |
|
18744
1718bdf566fd
(Fwrite_region): Fix call2 argument.
Richard M. Stallman <rms@gnu.org>
parents:
18679
diff
changeset
|
5450 insdef1 = Fcons (double_dollars (insdef), make_number (0)); |
|
6181
dd271c6b4e56
(Fread_file_name): Do the right thing when insert-default-directory is nil.
Karl Heuer <kwzh@gnu.org>
parents:
6177
diff
changeset
|
5451 } |
| 230 | 5452 else |
| 866 | 5453 insdef = Qnil, insdef1 = Qnil; |
| 230 | 5454 |
|
22658
9f320d762e2f
(Faccess_file): Check type of second argument STRING.
Richard M. Stallman <rms@gnu.org>
parents:
22613
diff
changeset
|
5455 count = specpdl_ptr - specpdl; |
| 230 | 5456 #ifdef VMS |
| 5457 specbind (intern ("completion-ignore-case"), Qt); | |
| 5458 #endif | |
| 5459 | |
|
22658
9f320d762e2f
(Faccess_file): Check type of second argument STRING.
Richard M. Stallman <rms@gnu.org>
parents:
22613
diff
changeset
|
5460 specbind (intern ("minibuffer-completing-file-name"), Qt); |
|
9f320d762e2f
(Faccess_file): Check type of second argument STRING.
Richard M. Stallman <rms@gnu.org>
parents:
22613
diff
changeset
|
5461 |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
5462 GCPRO2 (insdef, default_filename); |
| 230 | 5463 val = Fcompleting_read (prompt, intern ("read-file-name-internal"), |
| 866 | 5464 dir, mustmatch, insdef1, |
|
19543
e4cc94034827
(Fwrite_region): Convert EOL format even if
Kenichi Handa <handa@m17n.org>
parents:
19468
diff
changeset
|
5465 Qfile_name_history, default_filename, Qnil); |
|
20897
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5466 |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5467 tem = Fsymbol_value (Qfile_name_history); |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5468 if (CONSP (tem) && EQ (XCONS (tem)->car, val)) |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5469 replace_in_history = 1; |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5470 |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5471 /* If Fcompleting_read returned the inserted default string itself |
|
18861
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5472 (rather than a new string with the same contents), |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5473 it has to mean that the user typed RET with the minibuffer empty. |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5474 In that case, we really want to return "" |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5475 so that commands such as set-visited-file-name can distinguish. */ |
|
ed1871a409c8
(Finsert_file_contents) [DOS_NT]: Use the coding
Richard M. Stallman <rms@gnu.org>
parents:
18764
diff
changeset
|
5476 if (EQ (val, default_filename)) |
|
20897
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5477 { |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5478 /* In this case, Fcompleting_read has not added an element |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5479 to the history. Maybe we should. */ |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5480 if (! replace_in_history) |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5481 add_to_history = 1; |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5482 |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5483 val = build_string (""); |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5484 } |
| 230 | 5485 |
| 5486 unbind_to (count, Qnil); | |
| 5487 UNGCPRO; | |
| 485 | 5488 if (NILP (val)) |
| 230 | 5489 error ("No file name specified"); |
|
20897
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5490 |
| 230 | 5491 tem = Fstring_equal (val, insdef); |
|
20897
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5492 |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
5493 if (!NILP (tem) && !NILP (default_filename)) |
|
20897
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5494 val = default_filename; |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5495 else if (XSTRING (val)->size == 0 && NILP (insdef)) |
|
5245
4a9b93b0eac3
(Fmake_symbolic_link): Do expand FILENAME if starts with ~.
Richard M. Stallman <rms@gnu.org>
parents:
5129
diff
changeset
|
5496 { |
|
14074
f15db8536fdd
(Ffile_name_directory, Ffile_name_nondirectory, Ffile_name_as_directory,
Erik Naggum <erik@naggum.no>
parents:
14036
diff
changeset
|
5497 if (!NILP (default_filename)) |
|
20897
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5498 val = default_filename; |
|
5245
4a9b93b0eac3
(Fmake_symbolic_link): Do expand FILENAME if starts with ~.
Richard M. Stallman <rms@gnu.org>
parents:
5129
diff
changeset
|
5499 else |
|
4a9b93b0eac3
(Fmake_symbolic_link): Do expand FILENAME if starts with ~.
Richard M. Stallman <rms@gnu.org>
parents:
5129
diff
changeset
|
5500 error ("No default file name"); |
|
4a9b93b0eac3
(Fmake_symbolic_link): Do expand FILENAME if starts with ~.
Richard M. Stallman <rms@gnu.org>
parents:
5129
diff
changeset
|
5501 } |
|
20897
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5502 val = Fsubstitute_in_file_name (val); |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5503 |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5504 if (replace_in_history) |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5505 /* Replace what Fcompleting_read added to the history |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5506 with what we will actually return. */ |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5507 XCONS (Fsymbol_value (Qfile_name_history))->car = val; |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5508 else if (add_to_history) |
| 230 | 5509 { |
|
20897
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5510 /* Add the value to the history--but not if it matches |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5511 the last value already there. */ |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5512 tem = Fsymbol_value (Qfile_name_history); |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5513 if (! CONSP (tem) || NILP (Fequal (XCONS (tem)->car, val))) |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5514 Fset (Qfile_name_history, |
|
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5515 Fcons (val, tem)); |
| 230 | 5516 } |
|
20897
77deec174f57
(Fread_file_name): Alter the history
Richard M. Stallman <rms@gnu.org>
parents:
20790
diff
changeset
|
5517 return val; |
| 230 | 5518 } |
| 5519 | |
| 21514 | 5520 void |
| 230 | 5521 syms_of_fileio () |
| 5522 { | |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
5523 Qexpand_file_name = intern ("expand-file-name"); |
|
10719
40ae63b409f4
(Fexpand_file_name): Look for a handler for defalt.
Richard M. Stallman <rms@gnu.org>
parents:
10499
diff
changeset
|
5524 Qsubstitute_in_file_name = intern ("substitute-in-file-name"); |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
5525 Qdirectory_file_name = intern ("directory-file-name"); |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
5526 Qfile_name_directory = intern ("file-name-directory"); |
|
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
5527 Qfile_name_nondirectory = intern ("file-name-nondirectory"); |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5528 Qunhandled_file_name_directory = intern ("unhandled-file-name-directory"); |
|
1105
80ad8d0704ba
(Ffile_name_directory, Ffile_name_nondirectory):
Richard M. Stallman <rms@gnu.org>
parents:
1071
diff
changeset
|
5529 Qfile_name_as_directory = intern ("file-name-as-directory"); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5530 Qcopy_file = intern ("copy-file"); |
|
8227
0e6b7eeedc3b
(Fmake_directory_internal): Use Qmake_directory_internal.
Richard M. Stallman <rms@gnu.org>
parents:
8185
diff
changeset
|
5531 Qmake_directory_internal = intern ("make-directory-internal"); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5532 Qdelete_directory = intern ("delete-directory"); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5533 Qdelete_file = intern ("delete-file"); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5534 Qrename_file = intern ("rename-file"); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5535 Qadd_name_to_file = intern ("add-name-to-file"); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5536 Qmake_symbolic_link = intern ("make-symbolic-link"); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5537 Qfile_exists_p = intern ("file-exists-p"); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5538 Qfile_executable_p = intern ("file-executable-p"); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5539 Qfile_readable_p = intern ("file-readable-p"); |
|
16155
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
5540 Qfile_writable_p = intern ("file-writable-p"); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5541 Qfile_symlink_p = intern ("file-symlink-p"); |
|
16155
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
5542 Qaccess_file = intern ("access-file"); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5543 Qfile_directory_p = intern ("file-directory-p"); |
|
11599
51bc10be0dc7
(Ffile_regular_p): Use Qfile_regular_p.
Richard M. Stallman <rms@gnu.org>
parents:
11426
diff
changeset
|
5544 Qfile_regular_p = intern ("file-regular-p"); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5545 Qfile_accessible_directory_p = intern ("file-accessible-directory-p"); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5546 Qfile_modes = intern ("file-modes"); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5547 Qset_file_modes = intern ("set-file-modes"); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5548 Qfile_newer_than_file_p = intern ("file-newer-than-file-p"); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5549 Qinsert_file_contents = intern ("insert-file-contents"); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5550 Qwrite_region = intern ("write-region"); |
|
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5551 Qverify_visited_file_modtime = intern ("verify-visited-file-modtime"); |
|
3560
95021dcb923b
(syms_of_fileio): Set up Qset_visited_file_modtime.
Richard M. Stallman <rms@gnu.org>
parents:
3415
diff
changeset
|
5552 Qset_visited_file_modtime = intern ("set-visited-file-modtime"); |
|
843
8f6ea998ad0a
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
806
diff
changeset
|
5553 |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5554 staticpro (&Qexpand_file_name); |
|
10719
40ae63b409f4
(Fexpand_file_name): Look for a handler for defalt.
Richard M. Stallman <rms@gnu.org>
parents:
10499
diff
changeset
|
5555 staticpro (&Qsubstitute_in_file_name); |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5556 staticpro (&Qdirectory_file_name); |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5557 staticpro (&Qfile_name_directory); |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5558 staticpro (&Qfile_name_nondirectory); |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5559 staticpro (&Qunhandled_file_name_directory); |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5560 staticpro (&Qfile_name_as_directory); |
|
863
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5561 staticpro (&Qcopy_file); |
|
8243
bf7b3b969ab5
(syms_of_fileio): Finish previous change.
Richard M. Stallman <rms@gnu.org>
parents:
8227
diff
changeset
|
5562 staticpro (&Qmake_directory_internal); |
|
863
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5563 staticpro (&Qdelete_directory); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5564 staticpro (&Qdelete_file); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5565 staticpro (&Qrename_file); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5566 staticpro (&Qadd_name_to_file); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5567 staticpro (&Qmake_symbolic_link); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5568 staticpro (&Qfile_exists_p); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5569 staticpro (&Qfile_executable_p); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5570 staticpro (&Qfile_readable_p); |
|
16155
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
5571 staticpro (&Qfile_writable_p); |
|
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
5572 staticpro (&Qaccess_file); |
|
863
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5573 staticpro (&Qfile_symlink_p); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5574 staticpro (&Qfile_directory_p); |
|
11599
51bc10be0dc7
(Ffile_regular_p): Use Qfile_regular_p.
Richard M. Stallman <rms@gnu.org>
parents:
11426
diff
changeset
|
5575 staticpro (&Qfile_regular_p); |
|
863
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5576 staticpro (&Qfile_accessible_directory_p); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5577 staticpro (&Qfile_modes); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5578 staticpro (&Qset_file_modes); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5579 staticpro (&Qfile_newer_than_file_p); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5580 staticpro (&Qinsert_file_contents); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5581 staticpro (&Qwrite_region); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5582 staticpro (&Qverify_visited_file_modtime); |
|
16226
a70ec9baba1a
(syms_of_fileio): staticpro Qset_visited_file_modtime.
Erik Naggum <erik@naggum.no>
parents:
16167
diff
changeset
|
5583 staticpro (&Qset_visited_file_modtime); |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5584 |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5585 Qfile_name_history = intern ("file-name-history"); |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5586 Fset (Qfile_name_history, Qnil); |
|
863
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5587 staticpro (&Qfile_name_history); |
|
427299469901
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
853
diff
changeset
|
5588 |
| 230 | 5589 Qfile_error = intern ("file-error"); |
| 5590 staticpro (&Qfile_error); | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
5591 Qfile_already_exists = intern ("file-already-exists"); |
| 230 | 5592 staticpro (&Qfile_already_exists); |
|
17271
e34a30952e14
(Fcopy_file): Use Qfile_date_error if can't set file date.
Richard M. Stallman <rms@gnu.org>
parents:
17114
diff
changeset
|
5593 Qfile_date_error = intern ("file-date-error"); |
|
e34a30952e14
(Fcopy_file): Use Qfile_date_error if can't set file date.
Richard M. Stallman <rms@gnu.org>
parents:
17114
diff
changeset
|
5594 staticpro (&Qfile_date_error); |
| 230 | 5595 |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
5596 #ifdef DOS_NT |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
5597 Qfind_buffer_file_type = intern ("find-buffer-file-type"); |
|
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
5598 staticpro (&Qfind_buffer_file_type); |
|
9789
a1e6724db219
Change explicit uses of the Unix directory separator
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
5599 #endif /* DOS_NT */ |
|
5494
1ea2b4351945
[MSDOS]: #include "msdos.h" and <sys/param.h> needed for
Richard M. Stallman <rms@gnu.org>
parents:
5410
diff
changeset
|
5600 |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
5601 DEFVAR_LISP ("file-name-coding-system", &Vfile_name_coding_system, |
|
21048
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
5602 "*Coding system for encoding file names.\n\ |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
5603 If it is nil, default-file-name-coding-system (which see) is used."); |
|
19861
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
5604 Vfile_name_coding_system = Qnil; |
|
163421a61771
(ENCODE_FILE): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
19754
diff
changeset
|
5605 |
|
21048
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
5606 DEFVAR_LISP ("default-file-name-coding-system", |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
5607 &Vdefault_file_name_coding_system, |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
5608 "Default coding system for encoding file names.\n\ |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
5609 This variable is used only when file-name-coding-system is nil.\n\ |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
5610 \n\ |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
5611 This variable is set/changed by the command set-language-environment.\n\ |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
5612 User should not set this variable manually,\n\ |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
5613 instead use file-name-coding-system to get a constant encoding\n\ |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
5614 of file names regardless of the current language environment."); |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
5615 Vdefault_file_name_coding_system = Qnil; |
|
4d1d3581eeb4
(ENCODE_FILE): This macro is moved to coding.h.
Kenichi Handa <handa@m17n.org>
parents:
21030
diff
changeset
|
5616 |
|
11053
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
5617 DEFVAR_LISP ("auto-save-file-format", &Vauto_save_file_format, |
|
11090
290c241031e9
(syms_of_fileio): Fix missing \n\.
Karl Heuer <kwzh@gnu.org>
parents:
11053
diff
changeset
|
5618 "*Format in which to write auto-save files.\n\ |
|
11053
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
5619 Should be a list of symbols naming formats that are defined in `format-alist'.\n\ |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
5620 If it is t, which is the default, auto-save files are written in the\n\ |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
5621 same format as a regular save would use."); |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
5622 Vauto_save_file_format = Qt; |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
5623 |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
5624 Qformat_decode = intern ("format-decode"); |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
5625 staticpro (&Qformat_decode); |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
5626 Qformat_annotate_function = intern ("format-annotate-function"); |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
5627 staticpro (&Qformat_annotate_function); |
|
f14a518fcb33
(Finsert_file_contents): Call format-decode.
Boris Goldowsky <boris@gnu.org>
parents:
10734
diff
changeset
|
5628 |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
5629 Qcar_less_than_car = intern ("car-less-than-car"); |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
5630 staticpro (&Qcar_less_than_car); |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
5631 |
| 230 | 5632 Fput (Qfile_error, Qerror_conditions, |
| 5633 Fcons (Qfile_error, Fcons (Qerror, Qnil))); | |
| 5634 Fput (Qfile_error, Qerror_message, | |
| 5635 build_string ("File error")); | |
| 5636 | |
| 5637 Fput (Qfile_already_exists, Qerror_conditions, | |
| 5638 Fcons (Qfile_already_exists, | |
| 5639 Fcons (Qfile_error, Fcons (Qerror, Qnil)))); | |
| 5640 Fput (Qfile_already_exists, Qerror_message, | |
| 5641 build_string ("File already exists")); | |
| 5642 | |
|
17271
e34a30952e14
(Fcopy_file): Use Qfile_date_error if can't set file date.
Richard M. Stallman <rms@gnu.org>
parents:
17114
diff
changeset
|
5643 Fput (Qfile_date_error, Qerror_conditions, |
|
e34a30952e14
(Fcopy_file): Use Qfile_date_error if can't set file date.
Richard M. Stallman <rms@gnu.org>
parents:
17114
diff
changeset
|
5644 Fcons (Qfile_date_error, |
|
e34a30952e14
(Fcopy_file): Use Qfile_date_error if can't set file date.
Richard M. Stallman <rms@gnu.org>
parents:
17114
diff
changeset
|
5645 Fcons (Qfile_error, Fcons (Qerror, Qnil)))); |
|
e34a30952e14
(Fcopy_file): Use Qfile_date_error if can't set file date.
Richard M. Stallman <rms@gnu.org>
parents:
17114
diff
changeset
|
5646 Fput (Qfile_date_error, Qerror_message, |
|
e34a30952e14
(Fcopy_file): Use Qfile_date_error if can't set file date.
Richard M. Stallman <rms@gnu.org>
parents:
17114
diff
changeset
|
5647 build_string ("Cannot set file date")); |
|
e34a30952e14
(Fcopy_file): Use Qfile_date_error if can't set file date.
Richard M. Stallman <rms@gnu.org>
parents:
17114
diff
changeset
|
5648 |
| 230 | 5649 DEFVAR_BOOL ("insert-default-directory", &insert_default_directory, |
| 5650 "*Non-nil means when reading a filename start with default dir in minibuffer."); | |
| 5651 insert_default_directory = 1; | |
| 5652 | |
| 5653 DEFVAR_BOOL ("vms-stmlf-recfm", &vms_stmlf_recfm, | |
| 5654 "*Non-nil means write new files with record format `stmlf'.\n\ | |
| 5655 nil means use format `var'. This variable is meaningful only on VMS."); | |
| 5656 vms_stmlf_recfm = 0; | |
| 5657 | |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
5658 DEFVAR_LISP ("directory-sep-char", &Vdirectory_sep_char, |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
5659 "Directory separator character for built-in functions that return file names.\n\ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
5660 The value should be either ?/ or ?\\ (any other value is treated as ?\\).\n\ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
5661 This variable affects the built-in functions only on Windows,\n\ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
5662 on other platforms, it is initialized so that Lisp code can find out\n\ |
|
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
5663 what the normal separator is."); |
|
18613
614b916ff5bf
Fix bugs with inappropriate mixing of Lisp_Object with int.
Richard M. Stallman <rms@gnu.org>
parents:
18538
diff
changeset
|
5664 XSETFASTINT (Vdirectory_sep_char, '/'); |
|
15097
32c26cb9e078
(Fexpand_file_name, Ffile_name_absolute_p): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents:
15072
diff
changeset
|
5665 |
|
850
0bc61321ba50
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
848
diff
changeset
|
5666 DEFVAR_LISP ("file-name-handler-alist", &Vfile_name_handler_alist, |
|
0bc61321ba50
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
848
diff
changeset
|
5667 "*Alist of elements (REGEXP . HANDLER) for file names handled specially.\n\ |
|
0bc61321ba50
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
848
diff
changeset
|
5668 If a file name matches REGEXP, then all I/O on that file is done by calling\n\ |
|
0bc61321ba50
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
848
diff
changeset
|
5669 HANDLER.\n\ |
|
0bc61321ba50
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
848
diff
changeset
|
5670 \n\ |
|
0bc61321ba50
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
848
diff
changeset
|
5671 The first argument given to HANDLER is the name of the I/O primitive\n\ |
|
0bc61321ba50
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
848
diff
changeset
|
5672 to be handled; the remaining arguments are the arguments that were\n\ |
|
0bc61321ba50
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
848
diff
changeset
|
5673 passed to that primitive. For example, if you do\n\ |
|
0bc61321ba50
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
848
diff
changeset
|
5674 (file-exists-p FILENAME)\n\ |
|
0bc61321ba50
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
848
diff
changeset
|
5675 and FILENAME is handled by HANDLER, then HANDLER is called like this:\n\ |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5676 (funcall HANDLER 'file-exists-p FILENAME)\n\ |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5677 The function `find-file-name-handler' checks this list for a handler\n\ |
|
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5678 for its argument."); |
|
1178
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5679 Vfile_name_handler_alist = Qnil; |
|
fb4ec23ef80f
Don't include sys/dir.h.
Richard M. Stallman <rms@gnu.org>
parents:
1105
diff
changeset
|
5680 |
|
19641
d7f2d75a09d3
(Vset_auto_coding_function): Name changed from
Kenichi Handa <handa@m17n.org>
parents:
19572
diff
changeset
|
5681 DEFVAR_LISP ("set-auto-coding-function", |
|
d7f2d75a09d3
(Vset_auto_coding_function): Name changed from
Kenichi Handa <handa@m17n.org>
parents:
19572
diff
changeset
|
5682 &Vset_auto_coding_function, |
|
19464
1a9f6be64530
(syms_of_fileio): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
19448
diff
changeset
|
5683 "If non-nil, a function to call to decide a coding system of file.\n\ |
|
22811
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
5684 Two arguments are passed to this function: the file name\n\ |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
5685 and the length of a file contents following the point.\n\ |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
5686 This function should return a coding system to decode the file contents.\n\ |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
5687 It should check the file name against `auto-coding-alist'.\n\ |
|
6e11bb792d4f
(Finsert_file_contents): Call Vset_auto_coding_function
Kenichi Handa <handa@m17n.org>
parents:
22753
diff
changeset
|
5688 If no coding system is decided, it should check a coding system\n\ |
|
19464
1a9f6be64530
(syms_of_fileio): Fix previous change.
Kenichi Handa <handa@m17n.org>
parents:
19448
diff
changeset
|
5689 specified in the heading lines with the format:\n\ |
|
19641
d7f2d75a09d3
(Vset_auto_coding_function): Name changed from
Kenichi Handa <handa@m17n.org>
parents:
19572
diff
changeset
|
5690 -*- ... coding: CODING-SYSTEM; ... -*-\n\ |
|
d7f2d75a09d3
(Vset_auto_coding_function): Name changed from
Kenichi Handa <handa@m17n.org>
parents:
19572
diff
changeset
|
5691 or local variable spec of the tailing lines with `coding:' tag."); |
|
d7f2d75a09d3
(Vset_auto_coding_function): Name changed from
Kenichi Handa <handa@m17n.org>
parents:
19572
diff
changeset
|
5692 Vset_auto_coding_function = Qnil; |
|
19448
950a178e8783
(Vauto_file_coding_system_function): New variable.
Kenichi Handa <handa@m17n.org>
parents:
19437
diff
changeset
|
5693 |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
5694 DEFVAR_LISP ("after-insert-file-functions", &Vafter_insert_file_functions, |
|
4989
9fe45f58189f
(syms_of_fileio): Fix missing \n\'s.
Richard M. Stallman <rms@gnu.org>
parents:
4950
diff
changeset
|
5695 "A list of functions to be called at the end of `insert-file-contents'.\n\ |
|
9fe45f58189f
(syms_of_fileio): Fix missing \n\'s.
Richard M. Stallman <rms@gnu.org>
parents:
4950
diff
changeset
|
5696 Each is passed one argument, the number of bytes inserted. It should return\n\ |
|
9fe45f58189f
(syms_of_fileio): Fix missing \n\'s.
Richard M. Stallman <rms@gnu.org>
parents:
4950
diff
changeset
|
5697 the new byte count, and leave point the same. If `insert-file-contents' is\n\ |
|
9fe45f58189f
(syms_of_fileio): Fix missing \n\'s.
Richard M. Stallman <rms@gnu.org>
parents:
4950
diff
changeset
|
5698 intercepted by a handler from `file-name-handler-alist', that handler is\n\ |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
5699 responsible for calling the after-insert-file-functions if appropriate."); |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
5700 Vafter_insert_file_functions = Qnil; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
5701 |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
5702 DEFVAR_LISP ("write-region-annotate-functions", &Vwrite_region_annotate_functions, |
|
4989
9fe45f58189f
(syms_of_fileio): Fix missing \n\'s.
Richard M. Stallman <rms@gnu.org>
parents:
4950
diff
changeset
|
5703 "A list of functions to be called at the start of `write-region'.\n\ |
|
15072
ff25c6944c3d
(syms_of_fileio): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
14973
diff
changeset
|
5704 Each is passed two arguments, START and END as for `write-region'.\n\ |
|
ff25c6944c3d
(syms_of_fileio): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
14973
diff
changeset
|
5705 These are usually two numbers but not always; see the documentation\n\ |
|
ff25c6944c3d
(syms_of_fileio): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
14973
diff
changeset
|
5706 for `write-region'. The function should return a list of pairs\n\ |
|
ff25c6944c3d
(syms_of_fileio): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
14973
diff
changeset
|
5707 of the form (POSITION . STRING), consisting of strings to be effectively\n\ |
|
4989
9fe45f58189f
(syms_of_fileio): Fix missing \n\'s.
Richard M. Stallman <rms@gnu.org>
parents:
4950
diff
changeset
|
5708 inserted at the specified positions of the file being written (1 means to\n\ |
|
9fe45f58189f
(syms_of_fileio): Fix missing \n\'s.
Richard M. Stallman <rms@gnu.org>
parents:
4950
diff
changeset
|
5709 insert before the first byte written). The POSITIONs must be sorted into\n\ |
|
9fe45f58189f
(syms_of_fileio): Fix missing \n\'s.
Richard M. Stallman <rms@gnu.org>
parents:
4950
diff
changeset
|
5710 increasing order. If there are several functions in the list, the several\n\ |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
5711 lists are merged destructively."); |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
5712 Vwrite_region_annotate_functions = Qnil; |
|
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
5713 |
|
8317
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
5714 DEFVAR_LISP ("write-region-annotations-so-far", |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
5715 &Vwrite_region_annotations_so_far, |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
5716 "When an annotation function is called, this holds the previous annotations.\n\ |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
5717 These are the annotations made by other annotation functions\n\ |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
5718 that were already called. See also `write-region-annotate-functions'."); |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
5719 Vwrite_region_annotations_so_far = Qnil; |
|
c59be9428778
(Fwrite_region): Do unwind the new unwind protect.
Richard M. Stallman <rms@gnu.org>
parents:
8243
diff
changeset
|
5720 |
|
6678
e29adbacde1d
(Fdo_auto_save): Don't turn off auto save mode.
Richard M. Stallman <rms@gnu.org>
parents:
6498
diff
changeset
|
5721 DEFVAR_LISP ("inhibit-file-name-handlers", &Vinhibit_file_name_handlers, |
|
7549
ccb8b7f8dce7
(syms_of_fileio): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents:
7526
diff
changeset
|
5722 "A list of file name handlers that temporarily should not be used.\n\ |
|
7182
f0ecad45bb35
(inhibit-file-name-handers): Correct documentation.
Richard M. Stallman <rms@gnu.org>
parents:
7130
diff
changeset
|
5723 This applies only to the operation `inhibit-file-name-operation'."); |
|
6678
e29adbacde1d
(Fdo_auto_save): Don't turn off auto save mode.
Richard M. Stallman <rms@gnu.org>
parents:
6498
diff
changeset
|
5724 Vinhibit_file_name_handlers = Qnil; |
|
e29adbacde1d
(Fdo_auto_save): Don't turn off auto save mode.
Richard M. Stallman <rms@gnu.org>
parents:
6498
diff
changeset
|
5725 |
|
7041
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
5726 DEFVAR_LISP ("inhibit-file-name-operation", &Vinhibit_file_name_operation, |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
5727 "The operation for which `inhibit-file-name-handlers' is applicable."); |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
5728 Vinhibit_file_name_operation = Qnil; |
|
7b8c405c910a
(syms_of_fileio): New Lisp var inhibit-file-name-operation.
Richard M. Stallman <rms@gnu.org>
parents:
7029
diff
changeset
|
5729 |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5730 DEFVAR_LISP ("auto-save-list-file-name", &Vauto_save_list_file_name, |
| 13769 | 5731 "File name in which we write a list of all auto save file names.\n\ |
| 5732 This variable is initialized automatically from `auto-save-list-file-prefix'\n\ | |
| 5733 shortly after Emacs reads your `.emacs' file, if you have not yet given it\n\ | |
| 5734 a non-nil value."); | |
|
7445
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5735 Vauto_save_list_file_name = Qnil; |
|
c9942f71e2e9
(Finsert_file_contents) [MSDOS]: Ignore the replace feature.
Richard M. Stallman <rms@gnu.org>
parents:
7182
diff
changeset
|
5736 |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5737 defsubr (&Sfind_file_name_handler); |
| 230 | 5738 defsubr (&Sfile_name_directory); |
| 5739 defsubr (&Sfile_name_nondirectory); | |
|
1679
cd48b2c1a7a4
Give subprocess creation a way to find a valid current directory
Jim Blandy <jimb@redhat.com>
parents:
1589
diff
changeset
|
5740 defsubr (&Sunhandled_file_name_directory); |
| 230 | 5741 defsubr (&Sfile_name_as_directory); |
| 5742 defsubr (&Sdirectory_file_name); | |
| 5743 defsubr (&Smake_temp_name); | |
| 5744 defsubr (&Sexpand_file_name); | |
| 5745 defsubr (&Ssubstitute_in_file_name); | |
| 5746 defsubr (&Scopy_file); | |
|
1533
b86ef0432100
(Fmake_directory_internal): Renamed from Fmake_directory.
Richard M. Stallman <rms@gnu.org>
parents:
1377
diff
changeset
|
5747 defsubr (&Smake_directory_internal); |
|
686
bd3068742807
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
648
diff
changeset
|
5748 defsubr (&Sdelete_directory); |
| 230 | 5749 defsubr (&Sdelete_file); |
| 5750 defsubr (&Srename_file); | |
| 5751 defsubr (&Sadd_name_to_file); | |
| 5752 #ifdef S_IFLNK | |
| 5753 defsubr (&Smake_symbolic_link); | |
| 5754 #endif /* S_IFLNK */ | |
| 5755 #ifdef VMS | |
| 5756 defsubr (&Sdefine_logical_name); | |
| 5757 #endif /* VMS */ | |
| 5758 #ifdef HPUX_NET | |
| 5759 defsubr (&Ssysnetunam); | |
| 5760 #endif /* HPUX_NET */ | |
| 5761 defsubr (&Sfile_name_absolute_p); | |
| 5762 defsubr (&Sfile_exists_p); | |
| 5763 defsubr (&Sfile_executable_p); | |
| 5764 defsubr (&Sfile_readable_p); | |
| 5765 defsubr (&Sfile_writable_p); | |
|
16155
ddc7e0142964
(Faccess_file): New function.
Richard M. Stallman <rms@gnu.org>
parents:
16044
diff
changeset
|
5766 defsubr (&Saccess_file); |
| 230 | 5767 defsubr (&Sfile_symlink_p); |
| 5768 defsubr (&Sfile_directory_p); | |
| 536 | 5769 defsubr (&Sfile_accessible_directory_p); |
|
9346
fec27dfc0684
(Ffile_regular_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
9307
diff
changeset
|
5770 defsubr (&Sfile_regular_p); |
| 230 | 5771 defsubr (&Sfile_modes); |
| 5772 defsubr (&Sset_file_modes); | |
|
1763
65e858c07a8b
(Fset_default_file_modes, Fdefault_file_modes): Renamed from .._mode.
Richard M. Stallman <rms@gnu.org>
parents:
1762
diff
changeset
|
5773 defsubr (&Sset_default_file_modes); |
|
65e858c07a8b
(Fset_default_file_modes, Fdefault_file_modes): Renamed from .._mode.
Richard M. Stallman <rms@gnu.org>
parents:
1762
diff
changeset
|
5774 defsubr (&Sdefault_file_modes); |
| 230 | 5775 defsubr (&Sfile_newer_than_file_p); |
| 5776 defsubr (&Sinsert_file_contents); | |
| 5777 defsubr (&Swrite_region); | |
|
4841
8800a7377ceb
(Vafter_insert_file_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
4696
diff
changeset
|
5778 defsubr (&Scar_less_than_car); |
| 230 | 5779 defsubr (&Sverify_visited_file_modtime); |
| 5780 defsubr (&Sclear_visited_file_modtime); | |
|
2257
668491072928
(Fvisited_file_modtime): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2236
diff
changeset
|
5781 defsubr (&Svisited_file_modtime); |
| 230 | 5782 defsubr (&Sset_visited_file_modtime); |
| 5783 defsubr (&Sdo_auto_save); | |
| 5784 defsubr (&Sset_buffer_auto_saved); | |
|
5553
22a65d8c0b9a
(Fdo_auto_save): If auto save times out, don't try again for 20 minutes.
Richard M. Stallman <rms@gnu.org>
parents:
5529
diff
changeset
|
5785 defsubr (&Sclear_buffer_auto_save_failure); |
| 230 | 5786 defsubr (&Srecent_auto_save_p); |
| 5787 | |
| 5788 defsubr (&Sread_file_name_internal); | |
| 5789 defsubr (&Sread_file_name); | |
|
689
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
5790 |
|
1204
567860ca77e0
* fileio.c (syms_of_fileio): Don't try to defsubr Sunix_sync
Jim Blandy <jimb@redhat.com>
parents:
1178
diff
changeset
|
5791 #ifdef unix |
|
689
45401d45581d
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
686
diff
changeset
|
5792 defsubr (&Sunix_sync); |
|
1204
567860ca77e0
* fileio.c (syms_of_fileio): Don't try to defsubr Sunix_sync
Jim Blandy <jimb@redhat.com>
parents:
1178
diff
changeset
|
5793 #endif |
| 230 | 5794 } |
