+#include <cerrno>
+#include <unistd.h>
+#include <msp/core/systemerror.h>
#include "handle.h"
#include "handle_private.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