source: trunk/src/kernel32/hmopen32.cpp@ 3642

Last change on this file since 3642 was 3642, checked in by sandervl, 25 years ago

Rewrote file io apis

File size: 8.7 KB
Line 
1/* $Id: hmopen32.cpp,v 1.24 2000-06-01 11:28:47 sandervl Exp $ */
2
3/*
4 * Project Odin Software License can be found in LICENSE.TXT
5 * Win32 Unified Handle Manager for OS/2
6 */
7
8
9/*****************************************************************************
10 * Remark *
11 *****************************************************************************
12 */
13
14//#define DEBUG_LOCAL
15
16#ifdef DEBUG_LOCAL
17# define dprintfl(a) dprintf(a)
18#else
19inline void ignore_dprintf(...){}
20# define dprintfl(a) ignore_dprintf(a)
21#endif
22
23/*****************************************************************************
24 * Includes *
25 *****************************************************************************/
26
27#include <os2win.h>
28#include <string.h>
29#include "HandleManager.h"
30#include "HMOpen32.h"
31#include "mmap.h"
32
33#define DBG_LOCALLOG DBG_hmopen32
34#include "dbglocal.h"
35
36/*****************************************************************************
37 * Defines *
38 *****************************************************************************/
39
40
41/*****************************************************************************
42 * Structures *
43 *****************************************************************************/
44
45/*****************************************************************************
46 * Name : HMDeviceOpen32Class::_DeviceRequest
47 * Purpose : entry method for special request functions
48 * Parameters: ULONG ulRequestCode
49 * various parameters as required
50 * Variables :
51 * Result :
52 * Remark : the standard behaviour is to return an error code for non-
53 * existant request codes
54 * Status :
55 *
56 * Author : Patrick Haller [Wed, 1998/02/11 20:44]
57 *****************************************************************************/
58DWORD HMDeviceOpen32Class::_DeviceRequest (PHMHANDLEDATA pHMHandleData,
59 ULONG ulRequestCode,
60 ULONG arg1,
61 ULONG arg2,
62 ULONG arg3,
63 ULONG arg4)
64{
65 dprintfl(("KERNEL32: HandleManager::Open32::_DeviceRequest %s(%08x,%08x) - stub?\n",
66 lpHMDeviceName,
67 pHMHandleData,
68 ulRequestCode));
69
70 return(ERROR_INVALID_FUNCTION);
71}
72
73/*****************************************************************************
74 * Name : DWORD HMDeviceOpen32Class::CloseHandle
75 * Purpose : close the handle
76 * Parameters: PHMHANDLEDATA pHMHandleData
77 * Variables :
78 * Result : API returncode
79 * Remark :
80 * Status :
81 *
82 * Author : Patrick Haller [Wed, 1998/02/11 20:44]
83 *****************************************************************************/
84
85DWORD HMDeviceOpen32Class::CloseHandle(PHMHANDLEDATA pHMHandleData)
86{
87 BOOL bRC;
88
89 dprintfl(("KERNEL32: HandleManager::Open32::CloseHandle(%08x)\n",
90 pHMHandleData->hHMHandle));
91
92 bRC = O32_CloseHandle(pHMHandleData->hHMHandle);
93
94 dprintfl(("KERNEL32: HandleManager::Open32::CloseHandle returned %08xh\n",
95 bRC));
96
97 return (DWORD)bRC;
98}
99
100/*****************************************************************************
101 * Name : HMDeviceHandler::DuplicateHandle
102 * Purpose : dummy version
103 * Parameters:
104 * various parameters as required
105 * Variables :
106 * Result :
107 * Remark : the standard behaviour is to return an error code for non-
108 * existant request codes
109 * Status :
110 *
111 * Author : Patrick Haller [Wed, 1998/02/11 20:44]
112 *****************************************************************************/
113BOOL HMDeviceOpen32Class::DuplicateHandle(PHMHANDLEDATA pHMHandleData, HANDLE srcprocess,
114 PHMHANDLEDATA pHMSrcHandle,
115 HANDLE destprocess,
116 PHANDLE desthandle,
117 DWORD fdwAccess,
118 BOOL fInherit,
119 DWORD fdwOptions)
120{
121 BOOL rc;
122
123 dprintf(("KERNEL32:HandleManager::Open32::DuplicateHandle %s(%08x,%08x,%08x,%08x,%08x)\n",
124 lpHMDeviceName,
125 pHMHandleData,
126 srcprocess, pHMSrcHandle->hHMHandle, destprocess, desthandle));
127
128 rc = O32_DuplicateHandle(srcprocess, pHMSrcHandle->hHMHandle, destprocess, desthandle, fdwAccess, fInherit, fdwOptions);
129
130 if(rc == TRUE) {
131 pHMHandleData->hHMHandle = *desthandle;
132 return TRUE;
133 }
134 else return FALSE;
135}
136
137/*****************************************************************************
138 * Name : DWORD HMDeviceOpen32Class::GetFileType
139 * Purpose : determine the handle type
140 * Parameters: PHMHANDLEDATA pHMHandleData
141 * Variables :
142 * Result : API returncode
143 * Remark :
144 * Status :
145 *
146 * Author : Patrick Haller [Wed, 1998/02/11 20:44]
147 *****************************************************************************/
148
149DWORD HMDeviceOpen32Class::GetFileType(PHMHANDLEDATA pHMHandleData)
150{
151 dprintfl(("KERNEL32: HandleManager::Open32::GetFileType %s(%08x)\n",
152 lpHMDeviceName,
153 pHMHandleData));
154
155 //TODO: return FILE_TYPE_UNKNOWN for standard in/out handles; correct??
156 return O32_GetFileType(pHMHandleData->hHMHandle);
157}
158
159
160/*****************************************************************************
161 * Name : DWORD HMDeviceOpen32Class::GetFileInformationByHandle
162 * Purpose : determine the handle type
163 * Parameters: PHMHANDLEDATA pHMHandleData
164 * BY_HANDLE_FILE_INFORMATION* pHFI
165 * Variables :
166 * Result : API returncode
167 * Remark :
168 * Status :
169 *
170 * Author : Patrick Haller [Wed, 1999/06/17 20:44]
171 *****************************************************************************/
172
173DWORD HMDeviceOpen32Class::GetFileInformationByHandle(PHMHANDLEDATA pHMHandleData,
174 BY_HANDLE_FILE_INFORMATION* pHFI)
175{
176 dprintfl(("KERNEL32: HandleManager::Open32::GetFileInformationByHandle %s(%08xh,%08xh)\n",
177 lpHMDeviceName,
178 pHMHandleData,
179 pHFI));
180
181 return O32_GetFileInformationByHandle(pHMHandleData->hHMHandle,
182 pHFI);
183}
184
185/*****************************************************************************
186 * Name : DWORD HMDeviceOpen32Class::WaitForSingleObject
187 * Purpose : object synchronization
188 * Parameters: PHMHANDLEDATA pHMHandleData
189 * DWORD dwTimeout
190 * Variables :
191 * Result : API returncode
192 * Remark :
193 * Status :
194 *
195 * Author : Patrick Haller [Wed, 1999/06/17 20:44]
196 *****************************************************************************/
197
198DWORD HMDeviceOpen32Class::WaitForSingleObject(PHMHANDLEDATA pHMHandleData,
199 DWORD dwTimeout)
200{
201 DWORD rc, starttime, endtime;
202
203 dprintfl(("KERNEL32: HandleManager::Open32::WaitForSingleObject(%08xh,%08h)\n",
204 pHMHandleData->hHMHandle,
205 dwTimeout));
206
207 if(dwTimeout) {
208 starttime = O32_GetCurrentTime();
209 }
210 rc = (O32_WaitForSingleObject(pHMHandleData->hHMHandle,
211 dwTimeout));
212 if(dwTimeout) {
213 endtime = O32_GetCurrentTime();
214 dprintf(("KERNEL32: HandleManager::WaitForSingleObject %x delta = %x (rc=%x)", pHMHandleData->hHMHandle, endtime - starttime, rc));
215 }
216 else dprintf(("KERNEL32: HandleManager::WaitForSingleObject %x rc=%x", pHMHandleData->hHMHandle, rc));
217 return rc;
218}
219
220
221/*****************************************************************************
222 * Name : DWORD HMDeviceOpen32Class::WaitForSingleObjectEx
223 * Purpose : object synchronization
224 * Parameters: PHMHANDLEDATA pHMHandleData
225 * DWORD dwTimeout
226 * BOOL fAlertable
227 * Variables :
228 * Result : API returncode
229 * Remark :
230 * Status :
231 *
232 * Author : Patrick Haller [Wed, 1999/06/17 20:44]
233 *****************************************************************************/
234
235DWORD HMDeviceOpen32Class::WaitForSingleObjectEx(PHMHANDLEDATA pHMHandleData,
236 DWORD dwTimeout,
237 BOOL fAlertable)
238{
239 dprintfl(("KERNEL32: HandleManager::Open32::WaitForSingleObjectEx(%08xh,%08h,%08xh) not implemented correctly.\n",
240 pHMHandleData->hHMHandle,
241 dwTimeout,
242 fAlertable));
243
244 //@@@PH: WARNING mapped to WaitForSingleObject simply. fAlertable missing!
245 return (O32_WaitForSingleObject(pHMHandleData->hHMHandle,
246 dwTimeout));
247}
248
Note: See TracBrowser for help on using the repository browser.