-#include <cerrno>
-#include <unistd.h>
-#include <msp/core/systemerror.h>
#include "handle.h"
#include "handle_private.h"
Handle::operator const void *() const
{
-#ifdef WIN32
return priv->handle!=INVALID_HANDLE_VALUE ? this : 0;
-#else
- return priv->handle!=-1 ? this : 0;
-#endif
}
Handle::Private::Private():
-#ifdef WIN32
handle(INVALID_HANDLE_VALUE)
-#else
- handle(-1)
-#endif
{ }
-Handle::Private &Handle::Private::operator=(H h)
+Handle::Private &Handle::Private::operator=(PlatformHandle h)
{
handle = 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