From 2940072ad2e4a074da9b091fce89adc50e29c6e0 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Tue, 8 Nov 2016 16:09:37 +0300 Subject: Add fddup() --- butl/fdstream.cxx | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'butl/fdstream.cxx') diff --git a/butl/fdstream.cxx b/butl/fdstream.cxx index 102ad66..16801ed 100644 --- a/butl/fdstream.cxx +++ b/butl/fdstream.cxx @@ -6,14 +6,14 @@ #ifndef _WIN32 # include // open(), O_*, fcntl() -# include // close(), read(), write(), lseek(), ssize_t, +# include // close(), read(), write(), lseek(), dup(), ssize_t, // STD*_FILENO # include // writev(), iovec # include // S_I* # include // off_t #else # include // _close(), _read(), _write(), _setmode(), _sopen(), - // _lseek() + // _lseek(), _dup() # include // _SH_DENYNO # include // _fileno(), stdin, stdout, stderr # include // _O_* @@ -87,7 +87,6 @@ namespace butl } } - // fdbuf // fdbuf:: @@ -737,6 +736,21 @@ namespace butl return auto_fd (fd); } + auto_fd + fddup (int fd) + { +#ifndef _WIN32 + int nfd (dup (fd)); +#else + int nfd (_dup (fd)); +#endif + + if (nfd == -1) + throw_ios_failure (errno); + + return auto_fd (nfd); + } + #ifndef _WIN32 bool -- cgit v1.1