71f90b29f713b26e30480c797a249d987de74aa0
[reactos.git] / reactos / lib / kernel32 / file / lfile.c
1 /* $Id: lfile.c,v 1.8 2003/01/15 21:24:34 chorns Exp $
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 */