diff --git a/include/wx/filefn.h b/include/wx/filefn.h index b94428b201..5349903d17 100644 --- a/include/wx/filefn.h +++ b/include/wx/filefn.h @@ -459,6 +459,9 @@ WXDLLIMPEXP_BASE bool wxMkdir(const wxString& dir, int perm = wxS_DIR_DEFAULT); // Remove directory. Flags reserved for future use. WXDLLIMPEXP_BASE bool wxRmdir(const wxString& dir, int flags = 0); +// Return file descriptor of an open file, -1 if not available. +WXDLLIMPEXP_BASE int wxGetFileDescriptor(FILE *fp); + // Return the type of an open file WXDLLIMPEXP_BASE wxFileKind wxGetFileKind(int fd); WXDLLIMPEXP_BASE wxFileKind wxGetFileKind(FILE *fp); diff --git a/interface/wx/filefn.h b/interface/wx/filefn.h index 704af7d591..0410345a82 100644 --- a/interface/wx/filefn.h +++ b/interface/wx/filefn.h @@ -543,6 +543,21 @@ enum wxFileKind ///@} +/** @addtogroup group_funcmacro_file */ +///@{ +/** + Returns the file descriptor for the given @a fp. + + @param fp + A valid pointer to a @c FILE. + @returns + The file descriptor for the given @a fp, or -1 on error. + + @since 3.3.4 + */ +int wxGetFileDescriptor(FILE *fp); +///@} + /** @addtogroup group_funcmacro_file */ ///@{ /** diff --git a/src/common/filefn.cpp b/src/common/filefn.cpp index e2bb9a644f..93de94bf35 100644 --- a/src/common/filefn.cpp +++ b/src/common/filefn.cpp @@ -1038,13 +1038,21 @@ wxFileKind wxGetFileKind(FILE *fp) #if defined(wxFILEKIND_STUB) (void)fp; return wxFILE_KIND_DISK; -#elif defined(__WINDOWS__) && !defined(__CYGWIN__) && !defined(__WINE__) - return fp ? wxGetFileKind(_fileno(fp)) : wxFILE_KIND_UNKNOWN; #else - return fp ? wxGetFileKind(fileno(fp)) : wxFILE_KIND_UNKNOWN; + return fp ? wxGetFileKind(wxGetFileDescriptor(fp)) : wxFILE_KIND_UNKNOWN; #endif } +int wxGetFileDescriptor(FILE *fp) +{ + wxCHECK_MSG( fp, -1, wxT("invalid file") ); + +#if defined(__WINDOWS__) && !defined(__CYGWIN__) && !defined(__WINE__) + return _fileno(fp); +#else + return fileno(fp); +#endif +} //------------------------------------------------------------------------ // wild character routines