branch update for HEAD-2003021201
[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 long
16 STDCALL
17 _hread(
18         HFILE   hFile,
19         LPVOID  lpBuffer,
20         long    lBytes
21         )
22 {
23         DWORD   NumberOfBytesRead;
24         
25         if (ReadFile(
26                 (HANDLE) hFile,
27                 (LPVOID) lpBuffer,
28                 (DWORD) lBytes,
29                 & NumberOfBytesRead,
30                 NULL
31                 ) == FALSE)
32         {
33                 return -1;
34         }
35         return NumberOfBytesRead;
36 }
37
38
39 /*
40 //19990828.EA: aliased in DEF
41 UINT
42 STDCALL
43 _lread (
44         HFILE   fd,
45         LPVOID  buffer,
46         UINT    count
47         )
48 {
49         return _hread(
50                  fd,
51                  buffer,
52                  count
53                  );
54 }
55 */
56
57
58 long
59 STDCALL
60 _hwrite (
61         HFILE   hFile,
62         LPCSTR  lpBuffer,
63         long    lBytes
64         )
65 {
66         DWORD   NumberOfBytesWritten;
67         
68         if (lBytes == 0)
69         {
70                 if ( SetEndOfFile((HANDLE) hFile ) == FALSE )
71                 {
72                         return -1;
73                 }
74                 return 0;
75         }
76         if ( WriteFile(
77                 (HANDLE) hFile,
78                 (LPVOID) lpBuffer,
79                 (DWORD) lBytes,
80                 & NumberOfBytesWritten,
81                 NULL
82                 ) == FALSE )
83         {
84                 return -1;
85         }
86         return NumberOfBytesWritten;
87 }
88
89
90 /*
91 //19990828.EA: aliased in DEF
92
93 UINT
94 STDCALL
95 _lwrite(
96         HFILE   hFile,
97         LPCSTR  lpBuffer,
98         UINT    uBytes
99         )
100 {
101         return _hwrite(hFile,lpBuffer,uBytes);
102 }
103 */
104
105
106 HFILE
107 STDCALL
108 _lopen (
109         LPCSTR  lpPathName,
110         int     iReadWrite
111         )
112 {
113         DWORD dwAccessMask = 0;
114         DWORD dwShareMode = 0;
115         
116         if ( (iReadWrite & OF_READWRITE ) == OF_READWRITE )
117                 dwAccessMask = GENERIC_READ | GENERIC_WRITE;
118         else if ( (iReadWrite & OF_READ ) == OF_READ )
119                 dwAccessMask = GENERIC_READ;
120         else if ( (iReadWrite & OF_WRITE ) == OF_WRITE )
121                 dwAccessMask = GENERIC_WRITE;
122
123         if ((iReadWrite & OF_SHARE_COMPAT) == OF_SHARE_COMPAT )
124                 dwShareMode = FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE;
125         else if ((iReadWrite & OF_SHARE_DENY_NONE) == OF_SHARE_DENY_NONE)
126                 dwShareMode = FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE;
127         else if ((iReadWrite & OF_SHARE_DENY_READ) == OF_SHARE_DENY_READ)
128                 dwShareMode = FILE_SHARE_WRITE | FILE_SHARE_DELETE;
129         else if ((iReadWrite & OF_SHARE_DENY_WRITE) == OF_SHARE_DENY_WRITE )
130                 dwShareMode = FILE_SHARE_READ | FILE_SHARE_DELETE;
131         else if ((iReadWrite & OF_SHARE_EXCLUSIVE) == OF_SHARE_EXCLUSIVE)
132                 dwShareMode = 0;
133
134         SetLastError (ERROR_SUCCESS);
135         return (HFILE) CreateFileA(
136                         lpPathName,
137                         dwAccessMask,
138                         dwShareMode,
139                         NULL,
140                         OPEN_EXISTING,
141                         FILE_ATTRIBUTE_NORMAL,
142                         NULL);
143 }
144
145
146 HFILE
147 STDCALL
148 _lcreat (
149         LPCSTR  lpPathName,
150         int     iAttribute
151         )
152 {
153
154         DWORD FileAttributes = 0;
155         
156         if (  iAttribute == 0 )
157                 FileAttributes |= FILE_ATTRIBUTE_NORMAL;
158         else if (  iAttribute == 1 )
159                 FileAttributes |= FILE_ATTRIBUTE_READONLY;
160         else if (  iAttribute == 2 )
161                 FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
162         else if (  iAttribute == 4 )
163                 FileAttributes |= FILE_ATTRIBUTE_SYSTEM;
164
165         return (HFILE) CreateFileA(
166                         lpPathName,
167                         GENERIC_ALL,
168                         (FILE_SHARE_READ | FILE_SHARE_WRITE),
169                         NULL,
170                         CREATE_ALWAYS,
171                         iAttribute,
172                         NULL);
173 }
174
175
176 int
177 STDCALL
178 _lclose (
179         HFILE   hFile
180         )
181 {
182         if (CloseHandle ((HANDLE)hFile))
183         {
184                 return 0;
185         }
186         return -1;
187 }
188
189
190 LONG
191 STDCALL
192 _llseek(
193         HFILE   hFile,
194         LONG    lOffset,
195         int     iOrigin
196         )
197 {
198         return SetFilePointer (
199                         (HANDLE) hFile,
200                         lOffset,
201                         NULL,
202                         (DWORD) iOrigin);
203 }
204
205 /* EOF */