diff options
author | Ralf Habacker <ralf.habacker@freenet.de> | 2007-03-10 09:10:36 +0000 |
---|---|---|
committer | Ralf Habacker <ralf.habacker@freenet.de> | 2007-03-10 09:10:36 +0000 |
commit | 47e318a6e1893069e1326945ce1af25ddf8201d1 (patch) | |
tree | aae5bbc914c095d75ce7c40712d89ac847002e00 /dbus | |
parent | f3fd4d60ad5de9f0c6576f6e100f944792fed255 (diff) |
* bus/bus.c, bus/bus.h, bus/main.c, bus/test.c, dbus/dbus-sysdeps-unix.c, dbus/dbus-sysdeps-util-unix.c, dbus/dbus-sysdeps-util-win.c, bus/dbus-sysdeps-win.c,dbus/dbus-sysdeps.h: renamed _dbus_xxx_pipe to _dbus_pipe_xxx, completed _dbus_pipe support.
Diffstat (limited to 'dbus')
-rw-r--r-- | dbus/dbus-sysdeps-unix.c | 65 | ||||
-rw-r--r-- | dbus/dbus-sysdeps-util-unix.c | 4 | ||||
-rw-r--r-- | dbus/dbus-sysdeps-util-win.c | 2 | ||||
-rw-r--r-- | dbus/dbus-sysdeps-win.c | 78 | ||||
-rw-r--r-- | dbus/dbus-sysdeps.h | 17 |
5 files changed, 154 insertions, 12 deletions
diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c index 13375fe8..edd4025d 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -169,16 +169,77 @@ _dbus_write_socket (int fd, return _dbus_write (fd, buffer, start, len); } +/** + * 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 + * @returns the number of bytes written or -1 on error + */ int -_dbus_write_pipe (DBusPipe pipe, +_dbus_pipe_write (DBusPipe pipe, const DBusString *buffer, int start, int len) { - return _dbus_write (pipe, buffer, start, len); + return _dbus_write (pipe.fd, buffer, start, len); +} + +/** + * 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) +{ + return _dbus_close (pipe.fd, 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; +} + + +/** * Like _dbus_write_two() but only works on sockets and is thus * available on Windows. * diff --git a/dbus/dbus-sysdeps-util-unix.c b/dbus/dbus-sysdeps-util-unix.c index f57b7807..f1ed1056 100644 --- a/dbus/dbus-sysdeps-util-unix.c +++ b/dbus/dbus-sysdeps-util-unix.c @@ -67,7 +67,7 @@ */ dbus_bool_t _dbus_become_daemon (const DBusString *pidfile, - int print_pid_fd, + DBusPipe print_pid_fd, DBusError *error) { const char *s; @@ -157,7 +157,7 @@ _dbus_become_daemon (const DBusString *pidfile, } bytes = _dbus_string_get_length (&pid); - if (_dbus_write_socket (print_pid_fd, &pid, 0, bytes) != bytes) + if (_dbus_pipe_write (print_pid_fd, &pid, 0, bytes) != bytes) { dbus_set_error (error, DBUS_ERROR_FAILED, "Printing message bus PID: %s\n", diff --git a/dbus/dbus-sysdeps-util-win.c b/dbus/dbus-sysdeps-util-win.c index 331c9446..3b7a9cc4 100644 --- a/dbus/dbus-sysdeps-util-win.c +++ b/dbus/dbus-sysdeps-util-win.c @@ -52,7 +52,7 @@ */ dbus_bool_t _dbus_become_daemon (const DBusString *pidfile, - int print_pid_fd, + DBusPipe print_pid_fd, DBusError *error) { return TRUE; diff --git a/dbus/dbus-sysdeps-win.c b/dbus/dbus-sysdeps-win.c index 9f62e5ba..fe80d100 100644 --- a/dbus/dbus-sysdeps-win.c +++ b/dbus/dbus-sysdeps-win.c @@ -266,27 +266,97 @@ 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. + * + * @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 + * @returns the number of bytes written or -1 on error + */ int -_dbus_write_pipe (DBusPipe pipe, +_dbus_pipe_write (DBusPipe pipe, const DBusString *buffer, int start, int len) { DBusFile file; - file.FDATA = pipe; + file.FDATA = pipe.fd; return _dbus_write_file(&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_read_pipe(DBusPipe pipe, +_dbus_pipe_read(DBusPipe pipe, DBusString *buffer, int count) { DBusFile file; - file.FDATA = pipe; + file.FDATA = pipe.fd; return _dbus_read_file(&file, buffer, count); } +/** + * 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) +{ + DBusFile file; + file.FDATA = pipe.fd; + return _dbus_close_file(&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; +} + #undef FDATA /** diff --git a/dbus/dbus-sysdeps.h b/dbus/dbus-sysdeps.h index 9c1bec98..879a47bc 100644 --- a/dbus/dbus-sysdeps.h +++ b/dbus/dbus-sysdeps.h @@ -302,12 +302,23 @@ dbus_bool_t _dbus_path_is_absolute (const DBusString *filename); dbus_bool_t _dbus_get_standard_session_servicedirs (DBusList **dirs); -typedef int DBusPipe; -int _dbus_write_pipe (DBusPipe pipe, +typedef struct { + int fd; +} DBusPipe; + +DBusPipe _dbus_pipe_init(int fd); + +int _dbus_pipe_write (DBusPipe pipe, const DBusString *buffer, int start, int len); +int _dbus_pipe_close (DBusPipe pipe, + DBusError *error); + +dbus_bool_t _dbus_pipe_is_valid(DBusPipe pipe); +dbus_bool_t _dbus_pipe_is_special(DBusPipe pipe); + /** Opaque type for reading a directory listing */ typedef struct DBusDirIter DBusDirIter; @@ -374,7 +385,7 @@ dbus_bool_t _dbus_full_duplex_pipe (int *fd1, void _dbus_print_backtrace (void); dbus_bool_t _dbus_become_daemon (const DBusString *pidfile, - int print_pid_fd, + DBusPipe print_pid_fd, DBusError *error); dbus_bool_t _dbus_write_pid_file (const DBusString *filename, unsigned long pid, |