X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Funix%2Fhandle.cpp;h=c9bf3b1384f08dce4c2f44d2e4edfdc5fc4114be;hp=ea8fa4eeb9797e12f5a598f4c63d0fe6e352d492;hb=c8bf2d6c15893ccc9dbc4e04611b7229029f4808;hpb=8e696b9c1ee35f2ce5b9264f31b1963758d65ced diff --git a/source/io/unix/handle.cpp b/source/io/unix/handle.cpp index ea8fa4e..c9bf3b1 100644 --- a/source/io/unix/handle.cpp +++ b/source/io/unix/handle.cpp @@ -5,24 +5,26 @@ #include "handle.h" #include "handle_private.h" +using namespace std; + namespace Msp { namespace IO { -Handle::operator const void *() const +void sys_set_blocking(Handle &handle, bool b) { - return priv->handle!=-1 ? this : 0; + int flags = fcntl(*handle, F_GETFL); + fcntl(*handle, F_SETFL, (flags&~O_NONBLOCK)|(b?0:O_NONBLOCK)); } - -void sys_set_blocking(Handle &handle, bool b) +void sys_set_inherit(Handle &handle, bool i) { int flags = fcntl(*handle, F_GETFD); - fcntl(*handle, F_SETFL, (flags&~O_NONBLOCK)|(b?0:O_NONBLOCK)); + fcntl(*handle, F_SETFD, (flags&~O_CLOEXEC)|(i?O_CLOEXEC:0)); } -unsigned sys_read(Handle &handle, char *buf, unsigned size) +size_t sys_read(Handle &handle, char *buf, size_t size) { - int ret = read(*handle, buf, size); + ssize_t ret = read(*handle, buf, size); if(ret==-1) { if(errno==EAGAIN) @@ -34,9 +36,9 @@ unsigned sys_read(Handle &handle, char *buf, unsigned size) return ret; } -unsigned sys_write(Handle &handle, const char *buf, unsigned size) +size_t sys_write(Handle &handle, const char *buf, size_t size) { - int ret = write(*handle, buf, size); + ssize_t ret = write(*handle, buf, size); if(ret==-1) { if(errno==EAGAIN)