changeset 194:5f7701639303

updated for version 7.0058
author vimboss
date Tue, 08 Mar 2005 22:34:32 +0000
parents eee3fa1b0197
children 49748afd794b
files src/fileio.c
diffstat 1 files changed, 11 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -3317,7 +3317,7 @@ buf_write(buf, fname, sfname, start, end
 		    /* Open with O_EXCL to avoid the file being created while
 		     * we were sleeping (symlink hacker attack?) */
 		    bfd = mch_open((char *)backup,
-				       O_WRONLY|O_CREAT|O_EXTRA|O_EXCL, 0666);
+				O_WRONLY|O_CREAT|O_EXTRA|O_EXCL, perm & 0777);
 		    if (bfd < 0)
 		    {
 			vim_free(backup);
@@ -3701,7 +3701,7 @@ buf_write(buf, fname, sfname, start, end
     while ((fd = mch_open((char *)wfname, O_WRONLY | O_EXTRA | (append
 			? (forceit ? (O_APPEND | O_CREAT) : O_APPEND)
 			: (O_CREAT | O_TRUNC))
-			, 0666)) < 0)
+			, perm & 0777)) < 0)
     {
 	/*
 	 * A forced write will try to create a new file if the old one is
@@ -4108,7 +4108,8 @@ restore_backup:
 		if ((fd = mch_open((char *)backup, O_RDONLY | O_EXTRA, 0)) >= 0)
 		{
 		    if ((write_info.bw_fd = mch_open((char *)fname,
-			  O_WRONLY | O_CREAT | O_TRUNC | O_EXTRA, 0666)) >= 0)
+				    O_WRONLY | O_CREAT | O_TRUNC | O_EXTRA,
+							   perm & 0777)) >= 0)
 		    {
 			/* copy the file. */
 			write_info.bw_buf = smallbuf;
@@ -4268,7 +4269,7 @@ restore_backup:
 
 	    if (org == NULL
 		    || (empty_fd = mch_open(org, O_CREAT | O_EXTRA | O_EXCL,
-								   0666)) < 0)
+							    perm & 0777)) < 0)
 	      EMSG(_("E206: patchmode: can't touch empty original file"));
 	    else
 	      close(empty_fd);
@@ -5673,6 +5674,7 @@ vim_rename(from, to)
     BPTR	flock;
 #endif
     struct stat	st;
+    long	perm;
 
     /*
      * When the names are identical, there is nothing to do.
@@ -5723,10 +5725,13 @@ vim_rename(from, to)
     /*
      * Rename() failed, try copying the file.
      */
+    perm = mch_getperm(from);
     fd_in = mch_open((char *)from, O_RDONLY|O_EXTRA, 0);
     if (fd_in == -1)
 	return -1;
-    fd_out = mch_open((char *)to, O_CREAT|O_EXCL|O_WRONLY|O_EXTRA, 0666);
+
+    /* Create the new file with same permissions as the original. */
+    fd_out = mch_open((char *)to, O_CREAT|O_EXCL|O_WRONLY|O_EXTRA, (int)perm);
     if (fd_out == -1)
     {
 	close(fd_in);
@@ -5757,6 +5762,7 @@ vim_rename(from, to)
 	errmsg = _("E210: Error reading \"%s\"");
 	to = from;
     }
+    mch_setperm(to, perm);
     if (errmsg != NULL)
     {
 	EMSG2(errmsg, to);