summaryrefslogtreecommitdiff
path: root/lang/cli/files/patch-pal::unix::file::file.c
blob: d962c7ad5113e082a082a851462772350666fdd8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
$FreeBSD$

--- pal/unix/file/file.c.orig	Fri Mar 22 03:48:20 2002
+++ pal/unix/file/file.c	Wed Apr 10 11:52:45 2002
@@ -37,6 +37,9 @@
 #include <sys/stat.h>
 #include <errno.h>
 
+#define chmod( path, mode )	chmod( ( path ), ( mode ) & ~GetUmask() )
+#define fchmod( fd, mode )	fchmod( ( fd ), ( mode ) & ~GetUmask() )
+#define lchmod( path, mode )	lchmod( ( path ), ( mode ) & ~GetUmask() )
 
 SET_DEFAULT_DEBUG_CHANNEL(FILE);
 
@@ -44,6 +47,8 @@
 static int FILECloseStdHandle( HOBJSTRUCT *handle_data);
 static int FILEDuplicateHandle( HANDLE handle, HOBJSTRUCT *handle_data);
 
+static mode_t GetUmask( void );
+
 static file *FILENewFileData( void );
 
 static BOOL FILEAddNewLockedRgn(SHMFILELOCKS* fileLocks,
@@ -2342,6 +2347,17 @@
     HMGRUnlockHandle(handle,&file_data->handle_data);
 }
 
+static mode_t GetUmask( void )
+{
+    mode_t mask;
+
+    /* XXX: Probably need to block signals to avoid race here */
+    mask = umask( 0 );
+    umask( mask );
+    /* XXX: Unblock here */
+
+    return mask;
+}
 
 /*++
 Function: