]> git.pld-linux.org Git - packages/vim.git/blame - 7.1.017
- updated to 7.1.285
[packages/vim.git] / 7.1.017
CommitLineData
ad28a8ff
AG
1To: vim-dev@vim.org
2Subject: patch 7.1.017
3Fcc: outbox
4From: Bram Moolenaar <Bram@moolenaar.net>
5Mime-Version: 1.0
6Content-Type: text/plain; charset=ISO-8859-1
7Content-Transfer-Encoding: 8bit
8------------
9
10Patch 7.1.017
11Problem: ":confirm w" does give a prompt when 'readonly' is set, but not
12 when the file permissions are read-only. (Michael Schaap)
13Solution: Provide a dialog in both situations. (Chris Lubinski)
14Files: src/ex_cmds.c, src/fileio.c, src/proto/fileio.pro
15
16
17*** ../vim-7.1.016/src/ex_cmds.c Tue Jun 19 11:54:23 2007
18--- src/ex_cmds.c Tue Jun 19 22:37:25 2007
19***************
20*** 2912,2933 ****
21 }
22
23 /*
24! * Check if a buffer is read-only. Ask for overruling in a dialog.
25! * Return TRUE and give an error message when the buffer is readonly.
26 */
27 static int
28 check_readonly(forceit, buf)
29 int *forceit;
30 buf_T *buf;
31 {
32! if (!*forceit && buf->b_p_ro)
33 {
34 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
35 if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
36 {
37 char_u buff[IOSIZE];
38
39! dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
40 buf->b_fname);
41
42 if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) == VIM_YES)
43--- 2912,2946 ----
44 }
45
46 /*
47! * Check if a buffer is read-only (either 'readonly' option is set or file is
48! * read-only). Ask for overruling in a dialog. Return TRUE and give an error
49! * message when the buffer is readonly.
50 */
51 static int
52 check_readonly(forceit, buf)
53 int *forceit;
54 buf_T *buf;
55 {
56! struct stat st;
57!
58! /* Handle a file being readonly when the 'readonly' option is set or when
59! * the file exists and permissions are read-only.
60! * We will send 0777 to check_file_readonly(), as the "perm" variable is
61! * important for device checks but not here. */
62! if (!*forceit && (buf->b_p_ro
63! || (mch_stat((char *)buf->b_ffname, &st) >= 0
64! && check_file_readonly(buf->b_ffname, 0777))))
65 {
66 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
67 if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
68 {
69 char_u buff[IOSIZE];
70
71! if (buf->b_p_ro)
72! dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
73! buf->b_fname);
74! else
75! dialog_msg(buff, _("File permissions of \"%s\" are read-only.\nIt may still be possible to write it.\nDo you wish to try?"),
76 buf->b_fname);
77
78 if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) == VIM_YES)
79***************
80*** 2941,2949 ****
81--- 2954,2967 ----
82 }
83 else
84 #endif
85+ if (buf->b_p_ro)
86 EMSG(_(e_readonly));
87+ else
88+ EMSG2(_("E505: \"%s\" is read-only (add ! to override)"),
89+ buf->b_fname);
90 return TRUE;
91 }
92+
93 return FALSE;
94 }
95
96*** ../vim-7.1.016/src/fileio.c Thu May 10 19:32:17 2007
97--- src/fileio.c Thu Jun 28 21:54:18 2007
98***************
99*** 424,430 ****
100 */
101 if (!p_odev && mch_nodetype(fname) == NODE_WRITABLE)
102 {
103! filemess(curbuf, fname, (char_u *)_("is a device (disabled with 'opendevice' option"), 0);
104 msg_end();
105 msg_scroll = msg_save;
106 return FAIL;
107--- 424,430 ----
108 */
109 if (!p_odev && mch_nodetype(fname) == NODE_WRITABLE)
110 {
111! filemess(curbuf, fname, (char_u *)_("is a device (disabled with 'opendevice' option)"), 0);
112 msg_end();
113 msg_scroll = msg_save;
114 return FAIL;
115***************
116*** 2734,2739 ****
117--- 2734,2765 ----
118 #endif
119
120 /*
121+ * Return TRUE if a file appears to be read-only from the file permissions.
122+ */
123+ int
124+ check_file_readonly(fname, perm)
125+ char_u *fname; /* full path to file */
126+ int perm; /* known permissions on file */
127+ {
128+ #ifndef USE_MCH_ACCESS
129+ int fd = 0;
130+ #endif
131+
132+ return (
133+ #ifdef USE_MCH_ACCESS
134+ # ifdef UNIX
135+ (perm & 0222) == 0 ||
136+ # endif
137+ mch_access((char *)fname, W_OK)
138+ #else
139+ (fd = mch_open((char *)fname, O_RDWR | O_EXTRA, 0)) < 0
140+ ? TRUE : (close(fd), FALSE)
141+ #endif
142+ );
143+ }
144+
145+
146+ /*
147 * buf_write() - write to file "fname" lines "start" through "end"
148 *
149 * We do our own buffering here because fwrite() is so slow.
150***************
151*** 3219,3235 ****
152 * Check if the file is really writable (when renaming the file to
153 * make a backup we won't discover it later).
154 */
155! file_readonly = (
156! # ifdef USE_MCH_ACCESS
157! # ifdef UNIX
158! (perm & 0222) == 0 ||
159! # endif
160! mch_access((char *)fname, W_OK)
161! # else
162! (fd = mch_open((char *)fname, O_RDWR | O_EXTRA, 0)) < 0
163! ? TRUE : (close(fd), FALSE)
164! # endif
165! );
166 if (!forceit && file_readonly)
167 {
168 if (vim_strchr(p_cpo, CPO_FWRITE) != NULL)
169--- 3245,3252 ----
170 * Check if the file is really writable (when renaming the file to
171 * make a backup we won't discover it later).
172 */
173! file_readonly = check_file_readonly(fname, (int)perm);
174!
175 if (!forceit && file_readonly)
176 {
177 if (vim_strchr(p_cpo, CPO_FWRITE) != NULL)
178*** ../vim-7.1.016/src/proto/fileio.pro Sat May 5 19:59:00 2007
179--- src/proto/fileio.pro Thu Jun 28 21:09:59 2007
180***************
181*** 2,7 ****
182--- 2,8 ----
183 void filemess __ARGS((buf_T *buf, char_u *name, char_u *s, int attr));
184 int readfile __ARGS((char_u *fname, char_u *sfname, linenr_T from, linenr_T lines_to_skip, linenr_T lines_to_read, exarg_T *eap, int flags));
185 int prep_exarg __ARGS((exarg_T *eap, buf_T *buf));
186+ int check_file_readonly __ARGS((char_u *fname, int perm));
187 int buf_write __ARGS((buf_T *buf, char_u *fname, char_u *sfname, linenr_T start, linenr_T end, exarg_T *eap, int append, int forceit, int reset_changed, int filtering));
188 void msg_add_fname __ARGS((buf_T *buf, char_u *fname));
189 void msg_add_lines __ARGS((int insert_space, long lnum, long nchars));
190*** ../vim-7.1.016/src/version.c Thu Jun 28 21:23:52 2007
191--- src/version.c Thu Jun 28 21:49:29 2007
192***************
193*** 668,669 ****
194--- 668,671 ----
195 { /* Add new patch number below this line */
196+ /**/
197+ 17,
198 /**/
199
200--
201CUSTOMER: Well, can you hang around a couple of minutes? He won't be
202 long.
203MORTICIAN: Naaah, I got to go on to Robinson's -- they've lost nine today.
204CUSTOMER: Well, when is your next round?
205MORTICIAN: Thursday.
206DEAD PERSON: I think I'll go for a walk.
207 The Quest for the Holy Grail (Monty Python)
208
209 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
210/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
211\\\ download, build and distribute -- http://www.A-A-P.org ///
212 \\\ help me help AIDS victims -- http://ICCF-Holland.org ///
This page took 0.042277 seconds and 4 git commands to generate.