From 074854735fec76a581a672694b971c79ddcd2c50 Mon Sep 17 00:00:00 2001 From: Bernhard Miklautz Date: Tue, 15 Sep 2015 01:18:19 +0200 Subject: [PATCH] winpr/file: extend API Add function GetFileHandleForFileDescriptor to get a file handle for a valid file descriptor. --- winpr/include/winpr/file.h | 1 + winpr/libwinpr/file/file.c | 26 ++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/winpr/include/winpr/file.h b/winpr/include/winpr/file.h index 6d3e9cc..afe8588 100644 --- a/winpr/include/winpr/file.h +++ b/winpr/include/winpr/file.h @@ -360,6 +360,7 @@ WINPR_API char* GetNamedPipeUnixDomainSocketBaseFilePathA(void); WINPR_API char* GetNamedPipeUnixDomainSocketFilePathA(LPCSTR lpName); WINPR_API int GetNamePipeFileDescriptor(HANDLE hNamedPipe); +WINPR_API HANDLE GetFileHandleForFileDescriptor(int fd); #ifdef __cplusplus } diff --git a/winpr/libwinpr/file/file.c b/winpr/libwinpr/file/file.c index 4735ff2..c0098f3 100644 --- a/winpr/libwinpr/file/file.c +++ b/winpr/libwinpr/file/file.c @@ -33,6 +33,7 @@ #include "../handle/handle.h" #include +#include struct winpr_file { @@ -215,13 +216,34 @@ HANDLE GetStdHandle(DWORD nStdHandle) BOOL SetStdHandle(DWORD nStdHandle, HANDLE hHandle) { - return TRUE; + return FALSE; } BOOL SetStdHandleEx(DWORD dwStdHandle, HANDLE hNewHandle, HANDLE* phOldHandle) { - return TRUE; + return FALSE; } #endif /* _WIN32 */ +/* Extended API */ + +HANDLE GetFileHandleForFileDescriptor(int fd) +{ +#ifdef WIN32 + return INVALID_HANDLE_VALUE; +#else /* WIN32 */ + WINPR_FILE *pFile; + + /* Make sure it's a valid fd */ + if (fcntl(fd, F_GETFD) == -1 && errno == EBADF) + return INVALID_HANDLE_VALUE; + + pFile = FileHandle_New(); + if (!pFile) + return INVALID_HANDLE_VALUE; + pFile->fd = fd; + return (HANDLE)pFile; +#endif /* WIN32 */ +} + -- 2.7.4