X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Fhandle.cpp;h=0e9b82aa000c9382fe954b764f36d6614710934e;hp=d5183e5b4a349d286f9858e85c3c28234ac5970f;hb=6c40658510b68788fd5ef0488b20873b6aa32938;hpb=c21ab7e49852585df01b4cc19599e25a918b581b diff --git a/source/io/handle.cpp b/source/io/handle.cpp index d5183e5..0e9b82a 100644 --- a/source/io/handle.cpp +++ b/source/io/handle.cpp @@ -1,3 +1,6 @@ +#include +#include +#include #include "handle.h" #include "handle_private.h" @@ -49,5 +52,55 @@ Handle::Private &Handle::Private::operator=(H h) return *this; } + +unsigned sys_read(Handle &handle, char *buf, unsigned size) +{ +#ifdef WIN32 + DWORD ret; + if(ReadFile(*handle, buf, size, &ret, 0)==0) + throw system_error("ReadFile"); +#else + int ret = read(*handle, buf, size); + if(ret==-1) + { + if(errno==EAGAIN) + return 0; + else + throw system_error("read"); + } +#endif + + return ret; +} + +unsigned sys_write(Handle &handle, const char *buf, unsigned size) +{ +#ifdef WIN32 + DWORD ret; + if(WriteFile(*handle, buf, size, &ret, 0)==0) + throw system_error("WriteFile"); +#else + int ret = write(*handle, buf, size); + if(ret==-1) + { + if(errno==EAGAIN) + return 0; + else + throw system_error("write"); + } +#endif + + return ret; +} + +void sys_close(Handle &handle) +{ +#ifdef WIN32 + CloseHandle(*handle); +#else + close(*handle); +#endif +} + } // namespace IO } // namespace Msp