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