From ce9d743824be796471bae9b57c0185ef8ec1b804 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Tue, 8 Nov 2016 15:23:13 +0300 Subject: Add auto_fd::close() --- butl/fdstream.cxx | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'butl/fdstream.cxx') diff --git a/butl/fdstream.cxx b/butl/fdstream.cxx index dbd7767..102ad66 100644 --- a/butl/fdstream.cxx +++ b/butl/fdstream.cxx @@ -68,6 +68,26 @@ namespace butl ec, m); } + // auto_fd + // + void auto_fd:: + close () + { + if (fd_ >= 0) + { + bool r (fdclose (fd_)); + + // If fdclose() failed then no reason to expect it to succeed the next + // time. + // + fd_ = -1; + + if (!r) + throw_ios_failure (errno); + } + } + + // fdbuf // fdbuf:: @@ -105,8 +125,7 @@ namespace butl // This semantics change seems to be the right one as there is no reason to // expect fdclose() to succeed after it has already failed once. // - if (is_open () && !fdclose (fd_.release ())) - throw_ios_failure (errno); + fd_.close (); } streamsize fdbuf:: -- cgit v1.1