mirror of
https://gitlab.freedesktop.org/dbus/dbus.git
synced 2026-06-06 01:28:19 +02:00
moved out DBusPipe implementation into separate files
This commit is contained in:
parent
949a64b127
commit
35eb740bda
6 changed files with 43 additions and 211 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue