* dbus/dbus-sysdeps-win.c: fixed broken DBusPipe on win32.
authorRalf Habacker <ralf.habacker@freenet.de>
Tue, 13 Mar 2007 17:14:35 +0000 (17:14 +0000)
committerRalf Habacker <ralf.habacker@freenet.de>
Tue, 13 Mar 2007 17:14:35 +0000 (17:14 +0000)
* dbus/dbus-sysdeps-win.c, dbus/dbus-sysdeps-unix.c: moved platform independent DBusPipe function to dbus-sysdeps.c.

ChangeLog
dbus/dbus-sysdeps-unix.c
dbus/dbus-sysdeps-win.c
dbus/dbus-sysdeps.c

index b402970..7ef46aa 100644 (file)
--- 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
 
index 3b265d7..d6250bf 100644 (file)
@@ -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.
  * 
index 2ffb3e2..64c2f99 100644 (file)
@@ -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
index 8a437ca..33179e9 100644 (file)
@@ -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;
+}
+
 /** @} */
 
 /**