00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <config.h>
00026 #include "dbus-protocol.h"
00027 #include "dbus-string.h"
00028 #include "dbus-internals.h"
00029 #include "dbus-pipe.h"
00030
00031 #include <windows.h>
00032
00043 int
00044 _dbus_pipe_write (DBusPipe *pipe,
00045 const DBusString *buffer,
00046 int start,
00047 int len,
00048 DBusError *error)
00049 {
00050 DWORD written;
00051 BOOL res;
00052
00053 const char *buffer_c = _dbus_string_get_const_data (buffer);
00054
00055 res = WriteFile ((HANDLE) pipe->fd_or_handle, buffer_c + start, len, &written, NULL);
00056 if (res == 0 || written < 0)
00057 {
00058 dbus_set_error (error, DBUS_ERROR_FAILED,
00059 "Writing to pipe: %s\n",
00060 _dbus_strerror_from_errno ());
00061 }
00062 return written;
00063 }
00064
00072 int
00073 _dbus_pipe_close (DBusPipe *pipe,
00074 DBusError *error)
00075 {
00076 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
00077
00078 if (CloseHandle ((HANDLE) pipe->fd_or_handle) == 0)
00079 {
00080 dbus_set_error (error, _dbus_error_from_system_errno (),
00081 "Could not close pipe %d: %s", pipe->fd_or_handle,
00082 _dbus_strerror_from_errno ());
00083 return -1;
00084 }
00085 else
00086 {
00087 _dbus_pipe_invalidate (pipe);
00088 return 0;
00089 }
00090 }