Merged mingw32 branch into main trunk
[reactos.git] / reactos / lib / kernel32 / file / lfile.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: lib/kernel32/file/lfile.c
5 * PURPOSE: Find functions
6 * PROGRAMMER: Ariadne ( ariadne@xs4all.nl)
7 * UPDATE HISTORY:
8 * Created 01/11/98
9 */
10
11 #undef WIN32_LEAN_AND_MEAN
12 #include <windows.h>
13 #include <string.h>
14 #include <wchar.h>
15
16
17
18
19 long _hread(
20 HFILE hFile,
21 LPVOID lpBuffer,
22 long lBytes
23 )
24 {
25 DWORD NumberOfBytesRead;
26 if ( ReadFile((HANDLE)hFile,(LPVOID)lpBuffer,(DWORD)lBytes,&NumberOfBytesRead, NULL) == FALSE )
27 return -1;
28 else
29 return NumberOfBytesRead;
30
31 }
32
33 UINT STDCALL _lread(HFILE fd,LPVOID buffer,UINT count)
34 {
35 return _hread(fd,buffer, count);
36 }
37
38
39 long _hwrite(
40 HFILE hFile,
41 LPCSTR lpBuffer,
42 long lBytes
43 )
44 {
45
46 DWORD NumberOfBytesWritten;
47 if ( lBytes == 0 ) {
48 if ( SetEndOfFile((HANDLE) hFile ) == FALSE )
49 return -1;
50 else
51 return 0;
52 }
53 if ( WriteFile((HANDLE)hFile,(LPVOID)lpBuffer,(DWORD)lBytes, &NumberOfBytesWritten,NULL) == FALSE )
54 return -1;
55 else
56 return NumberOfBytesWritten;
57
58 }
59
60 UINT
61 STDCALL
62 _lwrite(
63 HFILE hFile,
64 LPCSTR lpBuffer,
65 UINT uBytes
66 )
67 {
68 return _hwrite(hFile,lpBuffer,uBytes);
69 }
70
71
72
73
74
75 HFILE _lopen( LPCSTR lpPathName, int iReadWrite )
76 {
77
78
79
80 DWORD dwAccessMask = 0;
81 DWORD dwShareMode = 0;
82
83 if ( (iReadWrite & OF_READWRITE ) == OF_READWRITE )
84 dwAccessMask = GENERIC_READ | GENERIC_WRITE;
85 else if ( (iReadWrite & OF_READ ) == OF_READ )
86 dwAccessMask = GENERIC_READ;
87 else if ( (iReadWrite & OF_WRITE ) == OF_WRITE )
88 dwAccessMask = GENERIC_WRITE;
89
90
91
92
93
94 if ((iReadWrite & OF_SHARE_COMPAT) == OF_SHARE_COMPAT )
95 dwShareMode = FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE;
96 else if ((iReadWrite & OF_SHARE_DENY_NONE) == OF_SHARE_DENY_NONE)
97 dwShareMode = FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE;
98 else if ((iReadWrite & OF_SHARE_DENY_READ) == OF_SHARE_DENY_READ)
99 dwShareMode = FILE_SHARE_WRITE | FILE_SHARE_DELETE;
100 else if ((iReadWrite & OF_SHARE_DENY_WRITE) == OF_SHARE_DENY_WRITE )
101 dwShareMode = FILE_SHARE_READ | FILE_SHARE_DELETE;
102 else if ((iReadWrite & OF_SHARE_EXCLUSIVE) == OF_SHARE_EXCLUSIVE)
103 dwShareMode = 0;
104
105
106
107 SetLastError(0);
108 return (HFILE) CreateFileA( lpPathName,dwAccessMask,dwShareMode,
109 NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
110
111 }
112
113
114 HFILE _lcreat( LPCSTR lpPathName, int iAttribute )
115 {
116
117 DWORD FileAttributes = 0;
118
119 if ( iAttribute == 1 )
120 FileAttributes |= FILE_ATTRIBUTE_NORMAL;
121 else if ( iAttribute == 2 )
122 FileAttributes |= FILE_ATTRIBUTE_READONLY;
123 else if ( iAttribute == 3 )
124 FileAttributes |= FILE_ATTRIBUTE_HIDDEN;
125 else if ( iAttribute == 4 )
126 FileAttributes |= FILE_ATTRIBUTE_SYSTEM;
127
128 return(HFILE) CreateFileA( lpPathName,GENERIC_ALL,FILE_SHARE_READ|FILE_SHARE_WRITE,
129 NULL,CREATE_ALWAYS,iAttribute ,NULL);
130 }
131
132
133 int _lclose(
134 HFILE hFile
135 )
136 {
137 if ( CloseHandle((HANDLE)hFile) )
138 return 0;
139 else
140 return -1;
141 }
142
143 LONG _llseek(
144 HFILE hFile,
145 LONG lOffset,
146 int iOrigin
147 )
148 {
149 return SetFilePointer((HANDLE) hFile, lOffset, NULL,(DWORD)iOrigin );
150 }
151
152