* 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.
This commit is contained in:
Ralf Habacker 2007-03-13 17:14:35 +00:00
parent 288d47c783
commit fabc977527
4 changed files with 97 additions and 125 deletions

View file

@ -1,3 +1,12 @@
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

View file

@ -169,30 +169,6 @@ _dbus_write_socket (int fd,
return _dbus_write (fd, buffer, start, len);
}
/**
* 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.
*
@ -244,41 +220,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.

View file

@ -266,19 +266,6 @@ dbus_bool_t _dbus_fstat (DBusFile *file,
return fstat(file->FDATA, sb) >= 0;
}
/**
* 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.
*
@ -286,35 +273,27 @@ DBusPipe _dbus_pipe_init(int fd)
* @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)
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)
{
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

View 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;
}
/** @} */
/**