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