summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2012-02-13 19:54:52 +0000
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2012-02-28 12:37:41 +0000
commit1e35c693e474f341d03a525a54af93c101d4737d (patch)
tree053a3182867d2f360a985f0759e490710eb4bc19
parent5ed44952d9a4506d58878234cb09df8baa20461b (diff)
downloaddbus-1e35c693e474f341d03a525a54af93c101d4737d.tar.gz
Make dbus-daemon.exe --print-address work under Windows
The DBusPipe code was broken by commit 6e214b5b3c2837, which switched from C runtime API to Win32 API for WinCE's benefit. In a DBusPipe, fd_or_handle is in fact always a C runtime file descriptor, which can't be used with the Win32 API (which expects a HANDLE). This commit goes back to the C runtime API. It might cause WinCE support to regress, but at least dbus-daemon.exe --print-address works again. This is enough to make a few tests work under Wine when cross-compiling from Linux to mingw-w64: in particular, this now works: DBUS_TEST_DAEMON=bus/dbus-daemon.exe DBUS_TEST_DATA=test/data \ wine test/test-dbus-daemon.exe -p /echo/session Bug: https://bugs.freedesktop.org/show_bug.cgi?id=46049 Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk> Reviewed-by: Ralf Habacker <ralf.habacker@freenet.de>
-rw-r--r--dbus/dbus-pipe-unix.c4
-rw-r--r--dbus/dbus-pipe-win.c26
-rw-r--r--dbus/dbus-pipe.c10
-rw-r--r--dbus/dbus-pipe.h4
-rw-r--r--dbus/dbus-sysdeps-util-unix.c4
-rw-r--r--dbus/dbus-sysdeps-util-win.c2
6 files changed, 25 insertions, 25 deletions
diff --git a/dbus/dbus-pipe-unix.c b/dbus/dbus-pipe-unix.c
index 1a2806e2..cfc57044 100644
--- a/dbus/dbus-pipe-unix.c
+++ b/dbus/dbus-pipe-unix.c
@@ -50,7 +50,7 @@ _dbus_pipe_write (DBusPipe *pipe,
{
int written;
- written = _dbus_write (pipe->fd_or_handle, buffer, start, len);
+ written = _dbus_write (pipe->fd, buffer, start, len);
if (written < 0)
{
dbus_set_error (error, DBUS_ERROR_FAILED,
@@ -71,7 +71,7 @@ int
_dbus_pipe_close (DBusPipe *pipe,
DBusError *error)
{
- if (!_dbus_close (pipe->fd_or_handle, error))
+ if (!_dbus_close (pipe->fd, error))
{
return -1;
}
diff --git a/dbus/dbus-pipe-win.c b/dbus/dbus-pipe-win.c
index f734518c..9c7c2570 100644
--- a/dbus/dbus-pipe-win.c
+++ b/dbus/dbus-pipe-win.c
@@ -29,6 +29,7 @@
#include "dbus-pipe.h"
#include <windows.h>
+#include <io.h>
/**
* write data to a pipe.
@@ -47,19 +48,18 @@ _dbus_pipe_write (DBusPipe *pipe,
int len,
DBusError *error)
{
- DWORD written;
- BOOL res;
-
const char *buffer_c = _dbus_string_get_const_data (buffer);
+ int written;
- res = WriteFile ((HANDLE) pipe->fd_or_handle, buffer_c + start, len, &written, NULL);
- if (res == 0 || written < 0)
- {
- dbus_set_error (error, DBUS_ERROR_FAILED,
- "Writing to pipe: %s\n",
- _dbus_strerror_from_errno ());
- }
- return written;
+ written = _write (pipe->fd, buffer_c + start, len);
+
+ if (written >= 0)
+ return written;
+
+ dbus_set_error (error, _dbus_error_from_system_errno (),
+ "Writing to pipe: %s",
+ _dbus_strerror_from_errno ());
+ return -1;
}
/**
@@ -75,10 +75,10 @@ _dbus_pipe_close (DBusPipe *pipe,
{
_DBUS_ASSERT_ERROR_IS_CLEAR (error);
- if (CloseHandle ((HANDLE) pipe->fd_or_handle) == 0)
+ if (_close (pipe->fd) != 0)
{
dbus_set_error (error, _dbus_error_from_system_errno (),
- "Could not close pipe %d: %s", pipe->fd_or_handle,
+ "Could not close pipe fd %d: %s", pipe->fd,
_dbus_strerror_from_errno ());
return -1;
}
diff --git a/dbus/dbus-pipe.c b/dbus/dbus-pipe.c
index 06560f16..7b5fe6d4 100644
--- a/dbus/dbus-pipe.c
+++ b/dbus/dbus-pipe.c
@@ -33,9 +33,9 @@
*/
void
_dbus_pipe_init (DBusPipe *pipe,
- intptr_t fd)
+ int fd)
{
- pipe->fd_or_handle = fd;
+ pipe->fd = fd;
}
/**
@@ -59,7 +59,7 @@ _dbus_pipe_init_stdout (DBusPipe *pipe)
dbus_bool_t
_dbus_pipe_is_valid(DBusPipe *pipe)
{
- return pipe->fd_or_handle >= 0;
+ return pipe->fd >= 0;
}
/**
@@ -71,7 +71,7 @@ _dbus_pipe_is_valid(DBusPipe *pipe)
dbus_bool_t
_dbus_pipe_is_stdout_or_stderr (DBusPipe *pipe)
{
- return pipe->fd_or_handle == 1 || pipe->fd_or_handle == 2;
+ return pipe->fd == 1 || pipe->fd == 2;
}
/**
@@ -81,5 +81,5 @@ _dbus_pipe_is_stdout_or_stderr (DBusPipe *pipe)
void
_dbus_pipe_invalidate (DBusPipe *pipe)
{
- pipe->fd_or_handle = -1;
+ pipe->fd = -1;
}
diff --git a/dbus/dbus-pipe.h b/dbus/dbus-pipe.h
index f6eac5f9..c2063b5a 100644
--- a/dbus/dbus-pipe.h
+++ b/dbus/dbus-pipe.h
@@ -39,11 +39,11 @@
#include <dbus/dbus-sysdeps.h>
struct DBusPipe {
- intptr_t fd_or_handle;
+ int fd;
};
void _dbus_pipe_init (DBusPipe *pipe,
- intptr_t fd);
+ int fd);
void _dbus_pipe_init_stdout (DBusPipe *pipe);
int _dbus_pipe_write (DBusPipe *pipe,
const DBusString *buffer,
diff --git a/dbus/dbus-sysdeps-util-unix.c b/dbus/dbus-sysdeps-util-unix.c
index a1915cb3..ef86d738 100644
--- a/dbus/dbus-sysdeps-util-unix.c
+++ b/dbus/dbus-sysdeps-util-unix.c
@@ -254,8 +254,8 @@ _dbus_write_pid_to_file_and_pipe (const DBusString *pidfile,
DBusString pid;
int bytes;
- _dbus_verbose ("writing our pid to pipe %"PRIuPTR"\n",
- print_pid_pipe->fd_or_handle);
+ _dbus_verbose ("writing our pid to pipe %d\n",
+ print_pid_pipe->fd);
if (!_dbus_string_init (&pid))
{
diff --git a/dbus/dbus-sysdeps-util-win.c b/dbus/dbus-sysdeps-util-win.c
index f5646f39..111db9ea 100644
--- a/dbus/dbus-sysdeps-util-win.c
+++ b/dbus/dbus-sysdeps-util-win.c
@@ -191,7 +191,7 @@ _dbus_write_pid_to_file_and_pipe (const DBusString *pidfile,
DBusString pid;
int bytes;
- _dbus_verbose ("writing our pid to pipe %d\n", print_pid_pipe->fd_or_handle);
+ _dbus_verbose ("writing our pid to pipe %d\n", print_pid_pipe->fd);
if (!_dbus_string_init (&pid))
{