summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRalf Habacker <ralf.habacker@freenet.de>2007-03-13 17:14:35 +0000
committerRalf Habacker <ralf.habacker@freenet.de>2007-03-13 17:14:35 +0000
commitfabc97752724d36149fec6fde3caf354336862eb (patch)
treed7f863cbbfeb5e4d68fab29b98b4b5e518e6582c
parent288d47c7833c58cef3747b15f2ece36d8612964b (diff)
* 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.
-rw-r--r--ChangeLog9
-rw-r--r--dbus/dbus-sysdeps-unix.c59
-rw-r--r--dbus/dbus-sysdeps-win.c95
-rw-r--r--dbus/dbus-sysdeps.c59
4 files changed, 97 insertions, 125 deletions
diff --git a/ChangeLog b/ChangeLog
index b402970d..7ef46aa0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2007-03-13 Ralf.Habacker <ralf.habacker@freenet.de>
+ * 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 <ralf.habacker@freenet.de>
+
* 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 3b265d78..d6250bf9 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 2ffb3e2d..64c2f99d 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 8a437cad..33179e9d 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;
+}
+
/** @} */
/**