From fabc97752724d36149fec6fde3caf354336862eb Mon Sep 17 00:00:00 2001 From: Ralf Habacker Date: Tue, 13 Mar 2007 17:14:35 +0000 Subject: [PATCH] * dbus/dbus-sysdeps-win.c: fixed broken DBusPipe on win32. * dbus/dbus-sysdeps-win.c, dbus/dbus-sysdeps-unix.c: moved platform independent DBusPipe function to dbus-sysdeps.c. --- ChangeLog | 9 +++++ dbus/dbus-sysdeps-unix.c | 59 ------------------------------ dbus/dbus-sysdeps-win.c | 95 +++++++++++++++--------------------------------- dbus/dbus-sysdeps.c | 59 ++++++++++++++++++++++++++++++ 4 files changed, 97 insertions(+), 125 deletions(-) diff --git a/ChangeLog b/ChangeLog index b402970..7ef46aa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2007-03-13 Ralf.Habacker + * dbus/dbus-sysdeps-win.c: fixed broken DBusPipe on + win32. + + * dbus/dbus-sysdeps-win.c, dbus/dbus-sysdeps-unix.c: + moved platform independent DBusPipe function to + dbus-sysdeps.c. + +2007-03-13 Ralf.Habacker + * dbus/dbus-sysdeps-win.c: added zero byte sending and receiving after connection start up diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index 3b265d7..d6250bf 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -170,30 +170,6 @@ _dbus_write_socket (int fd, } /** - * init a pipe instance. - * - * @param pipe the pipe - * @param fd the file descriptor to init from - */ -void -_dbus_pipe_init (DBusPipe *pipe, - int fd) -{ - pipe->fd_or_handle = fd; -} - -/** - * init a pipe with stdout - * - * @param pipe the pipe - */ -void -_dbus_pipe_init_stdout (DBusPipe *pipe) -{ - _dbus_pipe_init (pipe, 1); -} - -/** * write data to a pipe. * * @param pipe the pipe instance @@ -245,41 +221,6 @@ _dbus_pipe_close (DBusPipe *pipe, } /** - * check if a pipe is valid; pipes can be set invalid, similar to - * a -1 file descriptor. - * - * @param pipe the pipe instance - * @returns #FALSE if pipe is not valid - */ -dbus_bool_t -_dbus_pipe_is_valid(DBusPipe *pipe) -{ - return pipe->fd_or_handle >= 0; -} - -/** - * Check if a pipe is stdout or stderr. - * - * @param pipe the pipe instance - * @returns #TRUE if pipe is one of the standard out/err channels - */ -dbus_bool_t -_dbus_pipe_is_stdout_or_stderr (DBusPipe *pipe) -{ - return pipe->fd_or_handle == 1 || pipe->fd_or_handle == 2; -} - -/** - * Initializes a pipe to an invalid value. - * @param pipe the pipe - */ -void -_dbus_pipe_invalidate (DBusPipe *pipe) -{ - pipe->fd_or_handle = -1; -} - -/** * Like _dbus_write_two() but only works on sockets and is thus * available on Windows. * diff --git a/dbus/dbus-sysdeps-win.c b/dbus/dbus-sysdeps-win.c index 2ffb3e2..64c2f99 100644 --- a/dbus/dbus-sysdeps-win.c +++ b/dbus/dbus-sysdeps-win.c @@ -267,54 +267,33 @@ dbus_bool_t _dbus_fstat (DBusFile *file, } /** - * init a pipe instance. - * - * @param fd the file descriptor to init from - * @returns a DBusPipe instance - */ -DBusPipe _dbus_pipe_init(int fd) -{ - DBusPipe pipe; - pipe.fd = fd; - return pipe; -} - -/** * write data to a pipe. * * @param pipe the pipe instance * @param buffer the buffer to write data from * @param start the first byte in the buffer to write * @param len the number of bytes to try to write + * @param error error return * @returns the number of bytes written or -1 on error */ int -_dbus_pipe_write (DBusPipe pipe, +_dbus_pipe_write (DBusPipe *pipe, const DBusString *buffer, int start, - int len) + int len, + DBusError *error) { - DBusFile file; - file.FDATA = pipe.fd; - return _dbus_file_write(&file, buffer, start, len); -} - -/** - * read data from a pipe. - * - * @param pipe the pipe instance - * @param buffer the buffer to read data in - * @param count the number of bytes to try to read - * @returns the number of bytes read or -1 on error - */ -int -_dbus_pipe_read(DBusPipe pipe, - DBusString *buffer, - int count) -{ - DBusFile file; - file.FDATA = pipe.fd; - return _dbus_file_read(&file, buffer, count); + int written; + DBusFile file; + file.FDATA = pipe->fd_or_handle; + written = _dbus_file_write (&file, buffer, start, len); + if (written < 0) + { + dbus_set_error (error, DBUS_ERROR_FAILED, + "Writing to pipe: %s\n", + _dbus_strerror (errno)); + } + return written; } /** @@ -324,37 +303,21 @@ _dbus_pipe_read(DBusPipe pipe, * @param error return location for an error * @returns #FALSE if error is set */ - int -_dbus_pipe_close(DBusPipe pipe, - DBusError *error) -{ - DBusFile file; - file.FDATA = pipe.fd; - return _dbus_file_close(&file, error); -} - -/** - * check if a pipe is valid, which means is constructed - * by a valid file descriptor - * - * @param pipe the pipe instance - * @returns #FALSE if pipe is not valid - */ -dbus_bool_t _dbus_pipe_is_valid(DBusPipe pipe) -{ - return pipe.fd >= 0; -} - -/** - * check if a pipe is a special pipe, which means using - * a non default file descriptor (>2) - * - * @param pipe the pipe instance - * @returns #FALSE if pipe is not a special pipe - */ -dbus_bool_t _dbus_pipe_is_special(DBusPipe pipe) +int +_dbus_pipe_close (DBusPipe *pipe, + DBusError *error) { - return pipe.fd > 2; + DBusFile file; + file.FDATA = pipe->fd_or_handle; + if (_dbus_file_close (&file, error) < 0) + { + return -1; + } + else + { + _dbus_pipe_invalidate (pipe); + return 0; + } } #undef FDATA diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c index 8a437ca..33179e9 100644 --- a/dbus/dbus-sysdeps.c +++ b/dbus/dbus-sysdeps.c @@ -172,6 +172,65 @@ _dbus_getenv (const char *varname) return getenv (varname); } +/* + * init a pipe instance. + * + * @param pipe the pipe + * @param fd the file descriptor to init from + */ +void +_dbus_pipe_init (DBusPipe *pipe, + int fd) +{ + pipe->fd_or_handle = fd; +} + +/** + * init a pipe with stdout + * + * @param pipe the pipe + */ +void +_dbus_pipe_init_stdout (DBusPipe *pipe) +{ + _dbus_pipe_init (pipe, 1); +} + +/** + * check if a pipe is valid; pipes can be set invalid, similar to + * a -1 file descriptor. + * + * @param pipe the pipe instance + * @returns #FALSE if pipe is not valid + */ +dbus_bool_t +_dbus_pipe_is_valid(DBusPipe *pipe) +{ + return pipe->fd_or_handle >= 0; +} + +/** + * Check if a pipe is stdout or stderr. + * + * @param pipe the pipe instance + * @returns #TRUE if pipe is one of the standard out/err channels + */ +dbus_bool_t +_dbus_pipe_is_stdout_or_stderr (DBusPipe *pipe) +{ + return pipe->fd_or_handle == 1 || pipe->fd_or_handle == 2; +} + +/** + * Initializes a pipe to an invalid value. + * @param pipe the pipe + */ +void +_dbus_pipe_invalidate (DBusPipe *pipe) +{ + pipe->fd_or_handle = -1; +} + /** @} */ /** -- 2.7.4