8932834d49645ee4f30223381d8e7975b9822c27
[reactos.git] / reactos / lib / msvcrt / io / chmod.c
1 #include <windows.h>
2 #include <msvcrt/io.h>
3
4 #define mode_t int
5
6
7 int _chmod(const char *filename, mode_t mode)
8 {
9 DWORD FileAttributes = 0;
10
11 FileAttributes = GetFileAttributesA(filename);
12 if ( FileAttributes == -1 )
13 return -1;
14
15 if ( mode == 0 )
16 return -1;
17
18 if ((mode & _S_IREAD) == _S_IREAD && (mode & _S_IWRITE) != _S_IWRITE)
19 FileAttributes &= FILE_ATTRIBUTE_READONLY;
20 else if (((mode & _S_IREAD) != _S_IREAD) && ((mode & _S_IWRITE) == _S_IWRITE))
21 FileAttributes &= FILE_ATTRIBUTE_NORMAL;
22 else
23 FileAttributes &= FILE_ATTRIBUTE_NORMAL;
24
25 if (SetFileAttributesA(filename, FileAttributes) == FALSE)
26 return -1;
27
28 return 1;
29 }
30
31 int _wchmod(const wchar_t *filename, mode_t mode)
32 {
33 DWORD FileAttributes = 0;
34
35 FileAttributes = GetFileAttributesW(filename);
36 if ( FileAttributes == -1 )
37 return -1;
38
39 if ( mode == 0 )
40 return -1;
41
42 if ((mode & _S_IREAD) == _S_IREAD && (mode & _S_IWRITE) != _S_IWRITE)
43 FileAttributes &= FILE_ATTRIBUTE_READONLY;
44 else if (((mode & _S_IREAD) != _S_IREAD) && ((mode & _S_IWRITE) == _S_IWRITE))
45 FileAttributes &= FILE_ATTRIBUTE_NORMAL;
46 else
47 FileAttributes &= FILE_ATTRIBUTE_NORMAL;
48
49 if (SetFileAttributesW(filename, FileAttributes) == FALSE)
50 return -1;
51
52 return 1;
53 }