From 070140ee48e8524493f882a278b5ced255b34b65 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Tue, 8 Mar 2016 10:09:50 -0500 Subject: [PATCH] Add some functions to fd.c for the convenience of extensions. For example, if you want to perform an ioctl() on a file descriptor opened through the fd.c routines, there's no way to do that without being able to get at the underlying fd. KaiGai Kohei --- src/backend/storage/file/fd.c | 34 ++++++++++++++++++++++++++++++++++ src/include/storage/fd.h | 3 +++ 2 files changed, 37 insertions(+) diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c index 1b301001f0..37a2ae6b64 100644 --- a/src/backend/storage/file/fd.c +++ b/src/backend/storage/file/fd.c @@ -1577,6 +1577,40 @@ FilePathName(File file) return VfdCache[file].fileName; } +/* + * Return the raw file descriptor of an opened file. + * + * The returned file descriptor will be valid until the file is closed, but + * there are a lot of things that can make that happen. So the caller should + * be careful not to do much of anything else before it finishes using the + * returned file descriptor. + */ +int +FileGetRawDesc(File file) +{ + Assert(FileIsValid(file)); + return VfdCache[file].fd; +} + +/* + * FileGetRawFlags - returns the file flags on open(2) + */ +int +FileGetRawFlags(File file) +{ + Assert(FileIsValid(file)); + return VfdCache[file].fileFlags; +} + +/* + * FileGetRawMode - returns the mode bitmask passed to open(2) + */ +int +FileGetRawMode(File file) +{ + Assert(FileIsValid(file)); + return VfdCache[file].fileMode; +} /* * Make room for another allocatedDescs[] array entry if needed and possible. diff --git a/src/include/storage/fd.h b/src/include/storage/fd.h index 4a3fccbaa9..6faa8ad8a6 100644 --- a/src/include/storage/fd.h +++ b/src/include/storage/fd.h @@ -75,6 +75,9 @@ extern int FileSync(File file); extern off_t FileSeek(File file, off_t offset, int whence); extern int FileTruncate(File file, off_t offset); extern char *FilePathName(File file); +extern int FileGetRawDesc(File file); +extern int FileGetRawFlags(File file); +extern int FileGetRawMode(File file); /* Operations that allow use of regular stdio --- USE WITH CAUTION */ extern FILE *AllocateFile(const char *name, const char *mode);