update for HEAD-2003091401
[reactos.git] / lib / kernel32 / file / lfile.c
1 /* $Id$
2  *
3  * COPYRIGHT:       See COPYING in the top level directory
4  * PROJECT:         ReactOS system libraries
5  * FILE:            lib/kernel32/file/lfile.c
6  * PURPOSE:         Find functions
7  * PROGRAMMER:      Ariadne ( ariadne@xs4all.nl)
8  * UPDATE HISTORY:
9  *                  Created 01/11/98
10  */
11
12 #include <k32.h>
13
14
15 /*
16  * @implemented
17  */
18 long
19 STDCALL
20 _hread(
21         HFILE   hFile,
22         LPVOID  lpBuffer,
23         long    lBytes
24         )
25 {
26         DWORD   NumberOfBytesRead;
27         
28         if (ReadFile(
29                 (HANDLE) hFile,
30                 (LPVOID) lpBuffer,
31                 (DWORD) lBytes,
32                 & NumberOfBytesRead,
33                 NULL
34                 ) == FALSE)
35         {
36                 return -1;
37         }
38         return NumberOfBytesRead;
39 }
40
41
42 /*
43 //19990828.EA: aliased in DEF
44 UINT
45 STDCALL
46 _lread (
47         HFILE   fd,
48         LPVOID  buffer,
49         UINT    count
50         )
51 {
52         return _hread(
53                  fd,
54                  buffer,
55                  count
56                  );
57 }
58 */
59
60
61 /*
62  * @implemented
63  */
64 long
65 STDCALL
66 _hwrite (
67         HFILE   hFile,
68         LPCSTR  lpBuffer,
69         long    lBytes
70         )
71 {
72         DWORD   NumberOfBytesWritten;
73         
74         if (lBytes == 0)
75         {
76                 if ( SetEndOfFile((HANDLE) hFile ) == FALSE )
77                 {
78                         return -1;
79                 }
80                 return 0;
81         }
82         if ( WriteFile(
83                 (HANDLE) hFile,
84                 (LPVOID) lpBuffer,
85                 (DWORD) lBytes,
86                 & NumberOfBytesWritten,
87                 NULL
88                 ) == FALSE )
89         {
90                 return -1;
91         }
92         return NumberOfBytesWritten;
93 }
94
95
96 /*
97 //19990828.EA: aliased in DEF
98
99 UINT
100 STDCALL
101 _lwrite(
102         HFILE   hFile,
103         LPCSTR  lpBuffer,
104         UINT    uBytes
105         )
106 {
107         return _hwrite(hFile,lpBuffer,uBytes);
108 }
109 */
110
111
112 /*
113  * @implemented
114  */
115 HFILE
116 STDCALL
117 _lopen (
118         LPCSTR  lpPathName,
119         int     iReadWrite
120         )
121 {
122         DWORD dwAccessMask = 0;
123         DWORD dwShareMode = 0;
124         
125         if ( (iReadWrite & OF_READWRITE ) == OF_READWRITE )
126                 dwAccessMask = GENERIC_READ | GENERIC_WRITE;
127         else if ( (iReadWrite & OF_READ ) == OF_READ )
128                 dwAccessMask = GENERIC_READ;
129         else if ( (iReadWrite & OF_WRITE ) == OF_WRITE )
130                 dwAccessMask = GENERIC_WRITE;
131
132         if ((iReadWrite & OF_SHARE_COMPAT) == OF_SHARE_COMPAT )
133                 dwShareMode = FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE;
134         else if ((iReadWrite & OF_SHARE_DENY_NONE) == OF_SHARE_DENY_NONE)
135                 dwShareMode = FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE;
136         else if ((iReadWrite & OF_SHARE_DENY_READ) == OF_SHARE_DENY_READ)
137                 dwShareMode = FILE_SHARE_WRITE | FILE_SHARE_DELETE;
138         else if ((iReadWrite & OF_SHARE_DENY_WRITE) == OF_SHARE_DENY_WRITE )
139                 dwShareMode = FILE_SHARE_READ | FILE_SHARE_DELETE;
140         else if ((iReadWrite & OF_SHARE_EXCLUSIVE) == OF_SHARE_EXCLUSIVE)
141                 dwShareMode = 0;
142
143         SetLastError (ERROR_SUCCESS);
144         return (HFILE) CreateFileA(
145                         lpPathName,
146                         dwAccessMask,
147                         dwShareMode,
148                         NULL,
149                         OPEN_EXISTING,
150                         FILE_ATTRIBUTE_NORMAL,
151                         NULL);
152 }
153
154
155 /*
156  * @implemented
157  */
158 HFILE
159 STDCALL
160 _lcreat (
161         LPCSTR  lpPathName,
162         int     iAttribute
163         )
164 {
165
166         DWORD FileAttributes = 0;
167         
168         if (  iAttribute == 0 )
169                 FileAttributes |= FILE_ATTRIBUTE_NORMAL;
170         else if (  iAttribute == 1 )
171                 FileAttributes |= FILE_ATTRIBUTE_READONLY;
172         else if (  iAttribute == 2 )
173                 FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
174         else if (  iAttribute == 4 )
175                 FileAttributes |= FILE_ATTRIBUTE_SYSTEM;
176
177         return (HFILE) CreateFileA(
178                         lpPathName,
179                         GENERIC_ALL,
180                         (FILE_SHARE_READ | FILE_SHARE_WRITE),
181                         NULL,
182                         CREATE_ALWAYS,
183                         iAttribute,
184                         NULL);
185 }
186
187
188 /*
189  * @implemented
190  */
191 int
192 STDCALL
193 _lclose (
194         HFILE   hFile
195         )
196 {
197         if (CloseHandle ((HANDLE)hFile))
198         {
199                 return 0;
200         }
201         return -1;
202 }
203
204
205 /*
206  * @implemented
207  */
208 LONG
209 STDCALL
210 _llseek(
211         HFILE   hFile,
212         LONG    lOffset,
213         int     iOrigin
214         )
215 {
216         return SetFilePointer (
217                         (HANDLE) hFile,
218                         lOffset,
219                         NULL,
220                         (DWORD) iOrigin);
221 }
222
223 /* EOF */