/src/FreeRDP/winpr/libwinpr/handle/handle.h
Line  | Count  | Source (jump to first uncovered line)  | 
1  |  | /**  | 
2  |  |  * WinPR: Windows Portable Runtime  | 
3  |  |  * Handle Management  | 
4  |  |  *  | 
5  |  |  * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>  | 
6  |  |  *  | 
7  |  |  * Licensed under the Apache License, Version 2.0 (the "License");  | 
8  |  |  * you may not use this file except in compliance with the License.  | 
9  |  |  * You may obtain a copy of the License at  | 
10  |  |  *  | 
11  |  |  *     http://www.apache.org/licenses/LICENSE-2.0  | 
12  |  |  *  | 
13  |  |  * Unless required by applicable law or agreed to in writing, software  | 
14  |  |  * distributed under the License is distributed on an "AS IS" BASIS,  | 
15  |  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  | 
16  |  |  * See the License for the specific language governing permissions and  | 
17  |  |  * limitations under the License.  | 
18  |  |  */  | 
19  |  |  | 
20  |  | #ifndef WINPR_HANDLE_PRIVATE_H  | 
21  |  | #define WINPR_HANDLE_PRIVATE_H  | 
22  |  |  | 
23  |  | #include <winpr/handle.h>  | 
24  |  | #include <winpr/file.h>  | 
25  |  | #include <winpr/synch.h>  | 
26  |  | #include <winpr/winsock.h>  | 
27  |  |  | 
28  | 0  | #define HANDLE_TYPE_NONE 0  | 
29  | 1.46M  | #define HANDLE_TYPE_PROCESS 1  | 
30  | 1.82M  | #define HANDLE_TYPE_THREAD 2  | 
31  | 1.30M  | #define HANDLE_TYPE_EVENT 3  | 
32  | 731k  | #define HANDLE_TYPE_MUTEX 4  | 
33  |  | #define HANDLE_TYPE_SEMAPHORE 5  | 
34  |  | #define HANDLE_TYPE_TIMER 6  | 
35  | 0  | #define HANDLE_TYPE_NAMED_PIPE 7  | 
36  | 0  | #define HANDLE_TYPE_ANONYMOUS_PIPE 8  | 
37  | 0  | #define HANDLE_TYPE_ACCESS_TOKEN 9  | 
38  | 0  | #define HANDLE_TYPE_FILE 10  | 
39  |  | #define HANDLE_TYPE_TIMER_QUEUE 11  | 
40  |  | #define HANDLE_TYPE_TIMER_QUEUE_TIMER 12  | 
41  | 0  | #define HANDLE_TYPE_COMM 13  | 
42  |  |  | 
43  |  | typedef BOOL (*pcIsHandled)(HANDLE handle);  | 
44  |  | typedef BOOL (*pcCloseHandle)(HANDLE handle);  | 
45  |  | typedef int (*pcGetFd)(HANDLE handle);  | 
46  |  | typedef DWORD (*pcCleanupHandle)(HANDLE handle);  | 
47  |  | typedef BOOL (*pcReadFile)(PVOID Object, LPVOID lpBuffer, DWORD nNumberOfBytesToRead,  | 
48  |  |                            LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);  | 
49  |  | typedef BOOL (*pcReadFileEx)(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead,  | 
50  |  |                              LPOVERLAPPED lpOverlapped,  | 
51  |  |                              LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);  | 
52  |  | typedef BOOL (*pcReadFileScatter)(HANDLE hFile, FILE_SEGMENT_ELEMENT aSegmentArray[],  | 
53  |  |                                   DWORD nNumberOfBytesToRead, LPDWORD lpReserved,  | 
54  |  |                                   LPOVERLAPPED lpOverlapped);  | 
55  |  | typedef BOOL (*pcWriteFile)(PVOID Object, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite,  | 
56  |  |                             LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped);  | 
57  |  | typedef BOOL (*pcWriteFileEx)(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite,  | 
58  |  |                               LPOVERLAPPED lpOverlapped,  | 
59  |  |                               LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);  | 
60  |  | typedef BOOL (*pcWriteFileGather)(HANDLE hFile, FILE_SEGMENT_ELEMENT aSegmentArray[],  | 
61  |  |                                   DWORD nNumberOfBytesToWrite, LPDWORD lpReserved,  | 
62  |  |                                   LPOVERLAPPED lpOverlapped);  | 
63  |  | typedef DWORD (*pcGetFileSize)(HANDLE handle, LPDWORD lpFileSizeHigh);  | 
64  |  | typedef BOOL (*pcGetFileInformationByHandle)(HANDLE handle,  | 
65  |  |                                              LPBY_HANDLE_FILE_INFORMATION lpFileInformation);  | 
66  |  | typedef BOOL (*pcFlushFileBuffers)(HANDLE hFile);  | 
67  |  | typedef BOOL (*pcSetEndOfFile)(HANDLE handle);  | 
68  |  | typedef DWORD (*pcSetFilePointer)(HANDLE handle, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh,  | 
69  |  |                                   DWORD dwMoveMethod);  | 
70  |  | typedef BOOL (*pcSetFilePointerEx)(HANDLE hFile, LARGE_INTEGER liDistanceToMove,  | 
71  |  |                                    PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod);  | 
72  |  | typedef BOOL (*pcLockFile)(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh,  | 
73  |  |                            DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh);  | 
74  |  | typedef BOOL (*pcLockFileEx)(HANDLE hFile, DWORD dwFlags, DWORD dwReserved,  | 
75  |  |                              DWORD nNumberOfBytesToLockLow, DWORD nNumberOfBytesToLockHigh,  | 
76  |  |                              LPOVERLAPPED lpOverlapped);  | 
77  |  | typedef BOOL (*pcUnlockFile)(HANDLE hFile, DWORD dwFileOffsetLow, DWORD dwFileOffsetHigh,  | 
78  |  |                              DWORD nNumberOfBytesToUnlockLow, DWORD nNumberOfBytesToUnlockHigh);  | 
79  |  | typedef BOOL (*pcUnlockFileEx)(HANDLE hFile, DWORD dwReserved, DWORD nNumberOfBytesToUnlockLow,  | 
80  |  |                                DWORD nNumberOfBytesToUnlockHigh, LPOVERLAPPED lpOverlapped);  | 
81  |  | typedef BOOL (*pcSetFileTime)(HANDLE hFile, const FILETIME* lpCreationTime,  | 
82  |  |                               const FILETIME* lpLastAccessTime, const FILETIME* lpLastWriteTime);  | 
83  |  |  | 
84  |  | typedef struct  | 
85  |  | { | 
86  |  |   pcIsHandled IsHandled;  | 
87  |  |   pcCloseHandle CloseHandle;  | 
88  |  |   pcGetFd GetFd;  | 
89  |  |   pcCleanupHandle CleanupHandle;  | 
90  |  |   pcReadFile ReadFile;  | 
91  |  |   pcReadFileEx ReadFileEx;  | 
92  |  |   pcReadFileScatter ReadFileScatter;  | 
93  |  |   pcWriteFile WriteFile;  | 
94  |  |   pcWriteFileEx WriteFileEx;  | 
95  |  |   pcWriteFileGather WriteFileGather;  | 
96  |  |   pcGetFileSize GetFileSize;  | 
97  |  |   pcFlushFileBuffers FlushFileBuffers;  | 
98  |  |   pcSetEndOfFile SetEndOfFile;  | 
99  |  |   pcSetFilePointer SetFilePointer;  | 
100  |  |   pcSetFilePointerEx SetFilePointerEx;  | 
101  |  |   pcLockFile LockFile;  | 
102  |  |   pcLockFileEx LockFileEx;  | 
103  |  |   pcUnlockFile UnlockFile;  | 
104  |  |   pcUnlockFileEx UnlockFileEx;  | 
105  |  |   pcSetFileTime SetFileTime;  | 
106  |  |   pcGetFileInformationByHandle GetFileInformationByHandle;  | 
107  |  | } HANDLE_OPS;  | 
108  |  |  | 
109  |  | typedef struct  | 
110  |  | { | 
111  |  |   ULONG Type;  | 
112  |  |   ULONG Mode;  | 
113  |  |   HANDLE_OPS* ops;  | 
114  |  | } WINPR_HANDLE;  | 
115  |  |  | 
116  |  | static INLINE BOOL WINPR_HANDLE_IS_HANDLED(HANDLE handle, ULONG type, BOOL invalidValue)  | 
117  | 2.43M  | { | 
118  | 2.43M  |   WINPR_HANDLE* pWinprHandle = (WINPR_HANDLE*)handle;  | 
119  | 2.43M  |   BOOL invalid = !pWinprHandle;  | 
120  |  |  | 
121  | 2.43M  |   if (invalidValue)  | 
122  | 0  |   { | 
123  | 0  |     if (INVALID_HANDLE_VALUE == pWinprHandle)  | 
124  | 0  |       invalid = TRUE;  | 
125  | 0  |   }  | 
126  |  |  | 
127  | 2.43M  |   if (invalid || (pWinprHandle->Type != type))  | 
128  | 0  |   { | 
129  | 0  |     SetLastError(ERROR_INVALID_HANDLE);  | 
130  | 0  |     return FALSE;  | 
131  | 0  |   }  | 
132  |  |  | 
133  | 2.43M  |   return TRUE;  | 
134  | 2.43M  | } Unexecuted instantiation: critical.c:WINPR_HANDLE_IS_HANDLED event.c:WINPR_HANDLE_IS_HANDLED Line  | Count  | Source  |  117  | 975k  | { |  118  | 975k  |   WINPR_HANDLE* pWinprHandle = (WINPR_HANDLE*)handle;  |  119  | 975k  |   BOOL invalid = !pWinprHandle;  |  120  |  |  |  121  | 975k  |   if (invalidValue)  |  122  | 0  |   { |  123  | 0  |     if (INVALID_HANDLE_VALUE == pWinprHandle)  |  124  | 0  |       invalid = TRUE;  |  125  | 0  |   }  |  126  |  |  |  127  | 975k  |   if (invalid || (pWinprHandle->Type != type))  |  128  | 0  |   { |  129  | 0  |     SetLastError(ERROR_INVALID_HANDLE);  |  130  | 0  |     return FALSE;  |  131  | 0  |   }  |  132  |  |  |  133  | 975k  |   return TRUE;  |  134  | 975k  | }  |  
 Unexecuted instantiation: sleep.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: wait.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: generic.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: namedPipeClient.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: file.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: comm.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: comm_ioctl.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: comm_serial_sys.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: comm_sercx_sys.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: comm_sercx2_sys.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: pipe.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: io.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: handle.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: apc.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: process.c:WINPR_HANDLE_IS_HANDLED thread.c:WINPR_HANDLE_IS_HANDLED Line  | Count  | Source  |  117  | 1.46M  | { |  118  | 1.46M  |   WINPR_HANDLE* pWinprHandle = (WINPR_HANDLE*)handle;  |  119  | 1.46M  |   BOOL invalid = !pWinprHandle;  |  120  |  |  |  121  | 1.46M  |   if (invalidValue)  |  122  | 0  |   { |  123  | 0  |     if (INVALID_HANDLE_VALUE == pWinprHandle)  |  124  | 0  |       invalid = TRUE;  |  125  | 0  |   }  |  126  |  |  |  127  | 1.46M  |   if (invalid || (pWinprHandle->Type != type))  |  128  | 0  |   { |  129  | 0  |     SetLastError(ERROR_INVALID_HANDLE);  |  130  | 0  |     return FALSE;  |  131  | 0  |   }  |  132  |  |  |  133  | 1.46M  |   return TRUE;  |  134  | 1.46M  | }  |  
 Unexecuted instantiation: nt.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: comm_io.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: nonehandle.c:WINPR_HANDLE_IS_HANDLED Unexecuted instantiation: sspicli.c:WINPR_HANDLE_IS_HANDLED  | 
135  |  |  | 
136  |  | static INLINE void WINPR_HANDLE_SET_TYPE_AND_MODE(void* _handle, ULONG _type, ULONG _mode)  | 
137  | 609k  | { | 
138  | 609k  |   WINPR_HANDLE* hdl = (WINPR_HANDLE*)_handle;  | 
139  |  |  | 
140  | 609k  |   hdl->Type = _type;  | 
141  | 609k  |   hdl->Mode = _mode;  | 
142  | 609k  | } Unexecuted instantiation: critical.c:WINPR_HANDLE_SET_TYPE_AND_MODE event.c:WINPR_HANDLE_SET_TYPE_AND_MODE Line  | Count  | Source  |  137  | 243k  | { |  138  | 243k  |   WINPR_HANDLE* hdl = (WINPR_HANDLE*)_handle;  |  139  |  |  |  140  | 243k  |   hdl->Type = _type;  |  141  | 243k  |   hdl->Mode = _mode;  |  142  | 243k  | }  |  
 Unexecuted instantiation: sleep.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: wait.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: generic.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: namedPipeClient.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: file.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: comm.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: comm_ioctl.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: comm_serial_sys.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: comm_sercx_sys.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: comm_sercx2_sys.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: pipe.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: io.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: handle.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: apc.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: process.c:WINPR_HANDLE_SET_TYPE_AND_MODE thread.c:WINPR_HANDLE_SET_TYPE_AND_MODE Line  | Count  | Source  |  137  | 365k  | { |  138  | 365k  |   WINPR_HANDLE* hdl = (WINPR_HANDLE*)_handle;  |  139  |  |  |  140  | 365k  |   hdl->Type = _type;  |  141  | 365k  |   hdl->Mode = _mode;  |  142  | 365k  | }  |  
 Unexecuted instantiation: nt.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: comm_io.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: nonehandle.c:WINPR_HANDLE_SET_TYPE_AND_MODE Unexecuted instantiation: sspicli.c:WINPR_HANDLE_SET_TYPE_AND_MODE  | 
143  |  |  | 
144  |  | static INLINE BOOL winpr_Handle_GetInfo(HANDLE handle, ULONG* pType, WINPR_HANDLE** pObject)  | 
145  | 4.71M  | { | 
146  | 4.71M  |   WINPR_HANDLE* wHandle;  | 
147  |  |  | 
148  | 4.71M  |   if (handle == NULL)  | 
149  | 0  |     return FALSE;  | 
150  |  |  | 
151  |  |     /* INVALID_HANDLE_VALUE is an invalid value for every handle, but it  | 
152  |  |      * confuses the clang scanbuild analyzer. */  | 
153  | 4.71M  | #ifndef __clang_analyzer__  | 
154  | 4.71M  |   if (handle == INVALID_HANDLE_VALUE)  | 
155  | 0  |     return FALSE;  | 
156  | 4.71M  | #endif  | 
157  |  |  | 
158  | 4.71M  |   wHandle = (WINPR_HANDLE*)handle;  | 
159  |  |  | 
160  | 4.71M  |   *pType = wHandle->Type;  | 
161  | 4.71M  |   *pObject = handle;  | 
162  |  |  | 
163  | 4.71M  |   return TRUE;  | 
164  | 4.71M  | } Unexecuted instantiation: critical.c:winpr_Handle_GetInfo event.c:winpr_Handle_GetInfo Line  | Count  | Source  |  145  | 80.6k  | { |  146  | 80.6k  |   WINPR_HANDLE* wHandle;  |  147  |  |  |  148  | 80.6k  |   if (handle == NULL)  |  149  | 0  |     return FALSE;  |  150  |  |  |  151  |  |     /* INVALID_HANDLE_VALUE is an invalid value for every handle, but it  |  152  |  |      * confuses the clang scanbuild analyzer. */  |  153  | 80.6k  | #ifndef __clang_analyzer__  |  154  | 80.6k  |   if (handle == INVALID_HANDLE_VALUE)  |  155  | 0  |     return FALSE;  |  156  | 80.6k  | #endif  |  157  |  |  |  158  | 80.6k  |   wHandle = (WINPR_HANDLE*)handle;  |  159  |  |  |  160  | 80.6k  |   *pType = wHandle->Type;  |  161  | 80.6k  |   *pObject = handle;  |  162  |  |  |  163  | 80.6k  |   return TRUE;  |  164  | 80.6k  | }  |  
 Unexecuted instantiation: sleep.c:winpr_Handle_GetInfo wait.c:winpr_Handle_GetInfo Line  | Count  | Source  |  145  | 4.02M  | { |  146  | 4.02M  |   WINPR_HANDLE* wHandle;  |  147  |  |  |  148  | 4.02M  |   if (handle == NULL)  |  149  | 0  |     return FALSE;  |  150  |  |  |  151  |  |     /* INVALID_HANDLE_VALUE is an invalid value for every handle, but it  |  152  |  |      * confuses the clang scanbuild analyzer. */  |  153  | 4.02M  | #ifndef __clang_analyzer__  |  154  | 4.02M  |   if (handle == INVALID_HANDLE_VALUE)  |  155  | 0  |     return FALSE;  |  156  | 4.02M  | #endif  |  157  |  |  |  158  | 4.02M  |   wHandle = (WINPR_HANDLE*)handle;  |  159  |  |  |  160  | 4.02M  |   *pType = wHandle->Type;  |  161  | 4.02M  |   *pObject = handle;  |  162  |  |  |  163  | 4.02M  |   return TRUE;  |  164  | 4.02M  | }  |  
 Unexecuted instantiation: generic.c:winpr_Handle_GetInfo Unexecuted instantiation: namedPipeClient.c:winpr_Handle_GetInfo Unexecuted instantiation: file.c:winpr_Handle_GetInfo Unexecuted instantiation: comm.c:winpr_Handle_GetInfo Unexecuted instantiation: comm_ioctl.c:winpr_Handle_GetInfo Unexecuted instantiation: comm_serial_sys.c:winpr_Handle_GetInfo Unexecuted instantiation: comm_sercx_sys.c:winpr_Handle_GetInfo Unexecuted instantiation: comm_sercx2_sys.c:winpr_Handle_GetInfo Unexecuted instantiation: pipe.c:winpr_Handle_GetInfo Unexecuted instantiation: io.c:winpr_Handle_GetInfo handle.c:winpr_Handle_GetInfo Line  | Count  | Source  |  145  | 609k  | { |  146  | 609k  |   WINPR_HANDLE* wHandle;  |  147  |  |  |  148  | 609k  |   if (handle == NULL)  |  149  | 0  |     return FALSE;  |  150  |  |  |  151  |  |     /* INVALID_HANDLE_VALUE is an invalid value for every handle, but it  |  152  |  |      * confuses the clang scanbuild analyzer. */  |  153  | 609k  | #ifndef __clang_analyzer__  |  154  | 609k  |   if (handle == INVALID_HANDLE_VALUE)  |  155  | 0  |     return FALSE;  |  156  | 609k  | #endif  |  157  |  |  |  158  | 609k  |   wHandle = (WINPR_HANDLE*)handle;  |  159  |  |  |  160  | 609k  |   *pType = wHandle->Type;  |  161  | 609k  |   *pObject = handle;  |  162  |  |  |  163  | 609k  |   return TRUE;  |  164  | 609k  | }  |  
 Unexecuted instantiation: apc.c:winpr_Handle_GetInfo Unexecuted instantiation: process.c:winpr_Handle_GetInfo Unexecuted instantiation: thread.c:winpr_Handle_GetInfo Unexecuted instantiation: nt.c:winpr_Handle_GetInfo Unexecuted instantiation: comm_io.c:winpr_Handle_GetInfo Unexecuted instantiation: nonehandle.c:winpr_Handle_GetInfo Unexecuted instantiation: sspicli.c:winpr_Handle_GetInfo  | 
165  |  |  | 
166  |  | static INLINE int winpr_Handle_getFd(HANDLE handle)  | 
167  | 1.46M  | { | 
168  | 1.46M  |   WINPR_HANDLE* hdl;  | 
169  | 1.46M  |   ULONG type;  | 
170  |  |  | 
171  | 1.46M  |   if (!winpr_Handle_GetInfo(handle, &type, &hdl))  | 
172  | 0  |     return -1;  | 
173  |  |  | 
174  | 1.46M  |   if (!hdl || !hdl->ops || !hdl->ops->GetFd)  | 
175  | 0  |     return -1;  | 
176  |  |  | 
177  | 1.46M  |   return hdl->ops->GetFd(handle);  | 
178  | 1.46M  | } Unexecuted instantiation: critical.c:winpr_Handle_getFd Unexecuted instantiation: event.c:winpr_Handle_getFd Unexecuted instantiation: sleep.c:winpr_Handle_getFd wait.c:winpr_Handle_getFd Line  | Count  | Source  |  167  | 1.46M  | { |  168  | 1.46M  |   WINPR_HANDLE* hdl;  |  169  | 1.46M  |   ULONG type;  |  170  |  |  |  171  | 1.46M  |   if (!winpr_Handle_GetInfo(handle, &type, &hdl))  |  172  | 0  |     return -1;  |  173  |  |  |  174  | 1.46M  |   if (!hdl || !hdl->ops || !hdl->ops->GetFd)  |  175  | 0  |     return -1;  |  176  |  |  |  177  | 1.46M  |   return hdl->ops->GetFd(handle);  |  178  | 1.46M  | }  |  
 Unexecuted instantiation: generic.c:winpr_Handle_getFd Unexecuted instantiation: namedPipeClient.c:winpr_Handle_getFd Unexecuted instantiation: file.c:winpr_Handle_getFd Unexecuted instantiation: comm.c:winpr_Handle_getFd Unexecuted instantiation: comm_ioctl.c:winpr_Handle_getFd Unexecuted instantiation: comm_serial_sys.c:winpr_Handle_getFd Unexecuted instantiation: comm_sercx_sys.c:winpr_Handle_getFd Unexecuted instantiation: comm_sercx2_sys.c:winpr_Handle_getFd Unexecuted instantiation: pipe.c:winpr_Handle_getFd Unexecuted instantiation: io.c:winpr_Handle_getFd Unexecuted instantiation: handle.c:winpr_Handle_getFd Unexecuted instantiation: apc.c:winpr_Handle_getFd Unexecuted instantiation: process.c:winpr_Handle_getFd Unexecuted instantiation: thread.c:winpr_Handle_getFd Unexecuted instantiation: nt.c:winpr_Handle_getFd Unexecuted instantiation: comm_io.c:winpr_Handle_getFd Unexecuted instantiation: nonehandle.c:winpr_Handle_getFd Unexecuted instantiation: sspicli.c:winpr_Handle_getFd  | 
179  |  |  | 
180  |  | static INLINE DWORD winpr_Handle_cleanup(HANDLE handle)  | 
181  | 1.09M  | { | 
182  | 1.09M  |   WINPR_HANDLE* hdl;  | 
183  | 1.09M  |   ULONG type;  | 
184  |  |  | 
185  | 1.09M  |   if (!winpr_Handle_GetInfo(handle, &type, &hdl))  | 
186  | 0  |     return WAIT_FAILED;  | 
187  |  |  | 
188  | 1.09M  |   if (!hdl || !hdl->ops)  | 
189  | 0  |     return WAIT_FAILED;  | 
190  |  |  | 
191  |  |   /* If there is no cleanup function, assume all ok. */  | 
192  | 1.09M  |   if (!hdl->ops->CleanupHandle)  | 
193  | 364k  |     return WAIT_OBJECT_0;  | 
194  |  |  | 
195  | 731k  |   return hdl->ops->CleanupHandle(handle);  | 
196  | 1.09M  | } Unexecuted instantiation: critical.c:winpr_Handle_cleanup Unexecuted instantiation: event.c:winpr_Handle_cleanup Unexecuted instantiation: sleep.c:winpr_Handle_cleanup wait.c:winpr_Handle_cleanup Line  | Count  | Source  |  181  | 1.09M  | { |  182  | 1.09M  |   WINPR_HANDLE* hdl;  |  183  | 1.09M  |   ULONG type;  |  184  |  |  |  185  | 1.09M  |   if (!winpr_Handle_GetInfo(handle, &type, &hdl))  |  186  | 0  |     return WAIT_FAILED;  |  187  |  |  |  188  | 1.09M  |   if (!hdl || !hdl->ops)  |  189  | 0  |     return WAIT_FAILED;  |  190  |  |  |  191  |  |   /* If there is no cleanup function, assume all ok. */  |  192  | 1.09M  |   if (!hdl->ops->CleanupHandle)  |  193  | 364k  |     return WAIT_OBJECT_0;  |  194  |  |  |  195  | 731k  |   return hdl->ops->CleanupHandle(handle);  |  196  | 1.09M  | }  |  
 Unexecuted instantiation: generic.c:winpr_Handle_cleanup Unexecuted instantiation: namedPipeClient.c:winpr_Handle_cleanup Unexecuted instantiation: file.c:winpr_Handle_cleanup Unexecuted instantiation: comm.c:winpr_Handle_cleanup Unexecuted instantiation: comm_ioctl.c:winpr_Handle_cleanup Unexecuted instantiation: comm_serial_sys.c:winpr_Handle_cleanup Unexecuted instantiation: comm_sercx_sys.c:winpr_Handle_cleanup Unexecuted instantiation: comm_sercx2_sys.c:winpr_Handle_cleanup Unexecuted instantiation: pipe.c:winpr_Handle_cleanup Unexecuted instantiation: io.c:winpr_Handle_cleanup Unexecuted instantiation: handle.c:winpr_Handle_cleanup Unexecuted instantiation: apc.c:winpr_Handle_cleanup Unexecuted instantiation: process.c:winpr_Handle_cleanup Unexecuted instantiation: thread.c:winpr_Handle_cleanup Unexecuted instantiation: nt.c:winpr_Handle_cleanup Unexecuted instantiation: comm_io.c:winpr_Handle_cleanup Unexecuted instantiation: nonehandle.c:winpr_Handle_cleanup Unexecuted instantiation: sspicli.c:winpr_Handle_cleanup  | 
197  |  |  | 
198  |  | #endif /* WINPR_HANDLE_PRIVATE_H */  |