sync with trunk head (34904)
[reactos.git] / reactos / dll / win32 / 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 #include <wine/debug.h>
14
15 WINE_DEFAULT_DEBUG_CHANNEL(kernel32file);
16
17 /*
18 * @implemented
19 */
20 long
21 STDCALL
22 _hread(
23 HFILE hFile,
24 LPVOID lpBuffer,
25 long lBytes
26 )
27 {
28 DWORD NumberOfBytesRead;
29
30 if ( !ReadFile(
31 (HANDLE)(ULONG_PTR) hFile,
32 (LPVOID) lpBuffer,
33 (DWORD) lBytes,
34 & NumberOfBytesRead,
35 NULL) )
36 {
37 return HFILE_ERROR;
38 }
39 return NumberOfBytesRead;
40 }
41
42
43 /*
44 * @implemented
45 */
46 long
47 STDCALL
48 _hwrite (
49 HFILE hFile,
50 LPCSTR lpBuffer,
51 long lBytes
52 )
53 {
54 DWORD NumberOfBytesWritten;
55
56 if (lBytes == 0)
57 {
58 if ( !SetEndOfFile((HANDLE) hFile ) )
59 {
60 return HFILE_ERROR;
61 }
62 return 0;
63 }
64 if ( !WriteFile(
65 (HANDLE) hFile,
66 (LPVOID) lpBuffer,
67 (DWORD) lBytes,
68 & NumberOfBytesWritten,
69 NULL) )
70 {
71 return HFILE_ERROR;
72 }
73 return NumberOfBytesWritten;
74 }
75
76
77 /*
78 * @implemented
79 */
80 HFILE
81 STDCALL
82 _lopen (
83 LPCSTR lpPathName,
84 int iReadWrite
85 )
86 {
87 DWORD dwAccessMask = 0;
88 DWORD dwShareMode = 0;
89
90 if ( (iReadWrite & OF_READWRITE ) == OF_READWRITE )
91 dwAccessMask = GENERIC_READ | GENERIC_WRITE;
92 else if ( (iReadWrite & OF_READ ) == OF_READ )
93 dwAccessMask = GENERIC_READ;
94 else if ( (iReadWrite & OF_WRITE ) == OF_WRITE )
95 dwAccessMask = GENERIC_WRITE;
96
97 if ((iReadWrite & OF_SHARE_DENY_READ) == OF_SHARE_DENY_READ)
98 dwShareMode = FILE_SHARE_WRITE;
99 else if ((iReadWrite & OF_SHARE_DENY_WRITE) == OF_SHARE_DENY_WRITE )
100 dwShareMode = FILE_SHARE_READ;
101 else if ((iReadWrite & OF_SHARE_EXCLUSIVE) == OF_SHARE_EXCLUSIVE)
102 dwShareMode = 0;
103 else
104 /* OF_SHARE_DENY_NONE, OF_SHARE_COMPAT and everything else */
105 dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
106
107 return (HFILE) CreateFileA(
108 lpPathName,
109 dwAccessMask,
110 dwShareMode,
111 NULL,
112 OPEN_EXISTING,
113 FILE_ATTRIBUTE_NORMAL,
114 NULL);
115 }
116
117
118 /*
119 * @implemented
120 */
121 HFILE
122 STDCALL
123 _lcreat (
124 LPCSTR lpPathName,
125 int iAttribute
126 )
127 {
128 iAttribute &= FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM;
129 return (HFILE) CreateFileA(
130 lpPathName,
131 GENERIC_READ | GENERIC_WRITE,
132 (FILE_SHARE_READ | FILE_SHARE_WRITE),
133 NULL,
134 CREATE_ALWAYS,
135 iAttribute,
136 NULL);
137 }
138
139
140 /*
141 * @implemented
142 */
143 int
144 STDCALL
145 _lclose (
146 HFILE hFile
147 )
148 {
149 if (CloseHandle ((HANDLE)hFile))
150 {
151 return 0;
152 }
153 return HFILE_ERROR;
154 }
155
156
157 /*
158 * @implemented
159 */
160 LONG
161 STDCALL
162 _llseek(
163 HFILE hFile,
164 LONG lOffset,
165 int iOrigin
166 )
167 {
168 return SetFilePointer (
169 (HANDLE) hFile,
170 lOffset,
171 NULL,
172 (DWORD) iOrigin);
173 }
174
175 /* EOF */