${DBUS_DIR}/dbus-mempool.c
${DBUS_DIR}/dbus-string.c
${DBUS_DIR}/dbus-sysdeps.c
+ ${DBUS_DIR}/dbus-pipe.c
)
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
)
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
)
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
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 \
dbus-server-unix.h
DBUS_SHARED_arch_sources = \
+ dbus-pipe-unix.c \
dbus-sysdeps-unix.c \
dbus-sysdeps-unix.h \
dbus-sysdeps-pthread.c \
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 \
}
/**
- * 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.
*
}
/**
- * 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
*
*/
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
*
#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.
* @{
*/
-/* 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);
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;