X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Fpipe.cpp;h=0a72a80068da4d9ac686fdb8cd3216801e316725;hp=831076f0086b2ffd756ec9e86a3b1b1364e9b1cc;hb=9a4c531eb1aa68595cd3ab074b31bfa565aaefe2;hpb=754132d5541ff9db869ef22e7863097110545339 diff --git a/source/io/pipe.cpp b/source/io/pipe.cpp index 831076f..0a72a80 100644 --- a/source/io/pipe.cpp +++ b/source/io/pipe.cpp @@ -24,6 +24,22 @@ Pipe::~Pipe() sys_close(write_handle); } +void Pipe::set_mode(Mode m) +{ + m = m&M_RDWR; + if(!m) + throw invalid_argument("Pipe::set_mode"); + + check_access(m); + + Mode close = mode&M_RDWR&~m; + if(close&M_READ) + sys_close(read_handle); + if(close&M_WRITE) + sys_close(write_handle); + mode = (mode&~M_RDWR)|m; +} + void Pipe::set_block(bool b) { mode = (mode&~M_NONBLOCK);