Commit 49728a47 authored by Ralf Habacker's avatar Ralf Habacker
Browse files

moved out DBusPipe implementation from into separate files

parent 949a64b1
......@@ -133,6 +133,7 @@ set (DBUS_SHARED_SOURCES
${DBUS_DIR}/dbus-mempool.c
${DBUS_DIR}/dbus-string.c
${DBUS_DIR}/dbus-sysdeps.c
${DBUS_DIR}/dbus-pipe.c
)
set (DBUS_SHARED_HEADERS
......@@ -144,6 +145,7 @@ set (DBUS_SHARED_HEADERS
${DBUS_DIR}/dbus-mempool.h
${DBUS_DIR}/dbus-string.h
${DBUS_DIR}/dbus-string-private.h
${DBUS_DIR}/dbus-pipe.h
${DBUS_DIR}/dbus-sysdeps.h
)
......@@ -185,6 +187,7 @@ set (DBUS_UTIL_HEADERS
if (WIN32)
set (DBUS_SHARED_SOURCES ${DBUS_SHARED_SOURCES}
${DBUS_DIR}/dbus-sysdeps-win.c
${DBUS_DIR}/dbus-pipe-win.c
${DBUS_DIR}/dbus-sysdeps-thread-win.c
${DBUS_DIR}/dbus-spawn-win.c
)
......@@ -198,6 +201,7 @@ if (WIN32)
set (LIBS ${LIBS} ws2_32 advapi32 netapi32)
else (WIN32)
set (DBUS_SHARED_SOURCES ${DBUS_SHARED_SOURCES}
${DBUS_DIR}/dbus-pipe-unix.c
${DBUS_DIR}/dbus-sysdeps-unix.c
${DBUS_DIR}/dbus-sysdeps-pthread.c
${DBUS_DIR}/dbus-spawn.c
......
......@@ -59,6 +59,7 @@ DBUS_LIB_arch_sources = \
dbus-server-win.h
DBUS_SHARED_arch_sources = \
dbus-pipe-win.c \
dbus-sysdeps-win.c \
dbus-sysdeps-win.h \
dbus-sysdeps-thread-win.c \
......@@ -76,6 +77,7 @@ DBUS_LIB_arch_sources = \
dbus-server-unix.h
DBUS_SHARED_arch_sources = \
dbus-pipe-unix.c \
dbus-sysdeps-unix.c \
dbus-sysdeps-unix.h \
dbus-sysdeps-pthread.c \
......@@ -191,6 +193,8 @@ DBUS_SHARED_SOURCES= \
dbus-memory.c \
dbus-mempool.c \
dbus-mempool.h \
dbus-pipe.c \
dbus-pipe.h \
dbus-string.c \
dbus-string.h \
dbus-string-private.h \
......
......@@ -457,57 +457,6 @@ _dbus_write_socket_with_unix_fds_two(int fd,
#endif
}
/**
* 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,
const DBusString *buffer,
int start,
int len,
DBusError *error)
{
int written;
written = _dbus_write (pipe->fd_or_handle, buffer, start, len);
if (written < 0)
{
dbus_set_error (error, DBUS_ERROR_FAILED,
"Writing to pipe: %s\n",
_dbus_strerror (errno));
}
return written;
}
/**
* close a pipe.
*
* @param pipe the pipe instance
* @param error return location for an error
* @returns #FALSE if error is set
*/
int
_dbus_pipe_close (DBusPipe *pipe,
DBusError *error)
{
if (_dbus_close (pipe->fd_or_handle, error) < 0)
{
return -1;
}
else
{
_dbus_pipe_invalidate (pipe);
return 0;
}
}
/**
* Like _dbus_write_two() but only works on sockets and is thus
* available on Windows.
......
......@@ -108,62 +108,6 @@ _dbus_win_free_error_string (char *string)
LocalFree (string);
}
/**
* 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,
const DBusString *buffer,
int start,
int len,
DBusError *error)
{
int written;
const char *buffer_c = _dbus_string_get_const_data (buffer);
written = _write (pipe->fd_or_handle, buffer_c + start, len);
if (written < 0)
{
dbus_set_error (error, DBUS_ERROR_FAILED,
"Writing to pipe: %s\n",
strerror (errno));
}
return written;
}
/**
* close a pipe.
*
* @param pipe the pipe instance
* @param error return location for an error
* @returns #FALSE if error is set
*/
int
_dbus_pipe_close (DBusPipe *pipe,
DBusError *error)
{
_DBUS_ASSERT_ERROR_IS_CLEAR (error);
if (_close (pipe->fd_or_handle) < 0)
{
dbus_set_error (error, _dbus_error_from_errno (errno),
"Could not close pipe %d: %s", pipe->fd_or_handle, strerror (errno));
return -1;
}
else
{
_dbus_pipe_invalidate (pipe);
return 0;
}
}
/**
* Socket interface
*
......
......@@ -242,65 +242,6 @@ _dbus_get_environment (void)
return environment;
}
/*
* 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;
}
/**
* Split paths into a list of char strings
*
......
......@@ -27,7 +27,42 @@
#include <config.h>
/**
* @addtogroup DBusSysdeps
*
* @{
*/
/* The idea of this file is to encapsulate everywhere that we're
* relying on external libc features, for ease of security
* auditing. The idea is from vsftpd. This also gives us a chance to
* make things more convenient to use, e.g. by reading into a
* DBusString. Operating system headers aren't intended to be used
* outside of this file and a limited number of others (such as
* dbus-memory.c)
*/
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
#define _DBUS_GNUC_PRINTF( format_idx, arg_idx ) \
__attribute__((__format__ (__printf__, format_idx, arg_idx)))
#define _DBUS_GNUC_NORETURN \
__attribute__((__noreturn__))
#else /* !__GNUC__ */
#define _DBUS_GNUC_PRINTF( format_idx, arg_idx )
#define _DBUS_GNUC_NORETURN
#endif /* !__GNUC__ */
/** @def _DBUS_GNUC_PRINTF
* used to tell gcc about printf format strings
*/
/** @def _DBUS_GNUC_NORETURN
* used to tell gcc about functions that never return, such as _dbus_abort()
*/
/** @} */
#include <dbus/dbus-errors.h>
#include <dbus/dbus-pipe.h>
/* this is perhaps bogus, but strcmp() etc. are faster if we use the
* stuff straight out of string.h, so have this here for now.
......@@ -69,32 +104,6 @@ typedef struct DBusCredentials DBusCredentials;
* @{
*/
/* The idea of this file is to encapsulate everywhere that we're
* relying on external libc features, for ease of security
* auditing. The idea is from vsftpd. This also gives us a chance to
* make things more convenient to use, e.g. by reading into a
* DBusString. Operating system headers aren't intended to be used
* outside of this file and a limited number of others (such as
* dbus-memory.c)
*/
#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)
#define _DBUS_GNUC_PRINTF( format_idx, arg_idx ) \
__attribute__((__format__ (__printf__, format_idx, arg_idx)))
#define _DBUS_GNUC_NORETURN \
__attribute__((__noreturn__))
#else /* !__GNUC__ */
#define _DBUS_GNUC_PRINTF( format_idx, arg_idx )
#define _DBUS_GNUC_NORETURN
#endif /* !__GNUC__ */
/** @def _DBUS_GNUC_PRINTF
* used to tell gcc about printf format strings
*/
/** @def _DBUS_GNUC_NORETURN
* used to tell gcc about functions that never return, such as _dbus_abort()
*/
void _dbus_abort (void) _DBUS_GNUC_NORETURN;
const char* _dbus_getenv (const char *varname);
......@@ -355,25 +364,6 @@ dbus_bool_t _dbus_get_standard_system_servicedirs (DBusList **dirs);
dbus_bool_t _dbus_append_system_config_file (DBusString *str);
dbus_bool_t _dbus_append_session_config_file (DBusString *str);
typedef struct {
int fd_or_handle;
} DBusPipe;
void _dbus_pipe_init (DBusPipe *pipe,
int fd);
void _dbus_pipe_init_stdout (DBusPipe *pipe);
int _dbus_pipe_write (DBusPipe *pipe,
const DBusString *buffer,
int start,
int len,
DBusError *error);
int _dbus_pipe_close (DBusPipe *pipe,
DBusError *error);
dbus_bool_t _dbus_pipe_is_valid (DBusPipe *pipe);
void _dbus_pipe_invalidate (DBusPipe *pipe);
dbus_bool_t _dbus_pipe_is_stdout_or_stderr (DBusPipe *pipe);
/** Opaque type for reading a directory listing */
typedef struct DBusDirIter DBusDirIter;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment