diff options
-rw-r--r-- | man/sd_journal_get_fd.xml | 18 | ||||
-rw-r--r-- | man/sd_login_monitor_new.xml | 43 | ||||
-rw-r--r-- | src/login/libsystemd-login.sym | 5 | ||||
-rw-r--r-- | src/login/sd-login.c | 9 | ||||
-rw-r--r-- | src/login/test-login.c | 2 | ||||
-rw-r--r-- | src/systemd/sd-login.h | 3 |
6 files changed, 60 insertions, 20 deletions
diff --git a/man/sd_journal_get_fd.xml b/man/sd_journal_get_fd.xml index e57431ea9e..f29aeaab23 100644 --- a/man/sd_journal_get_fd.xml +++ b/man/sd_journal_get_fd.xml @@ -115,11 +115,11 @@ below.</para> <para><function>sd_journal_get_events()</function> - will return the - <citerefentry><refentrytitle>poll</refentrytitle><manvolnum>2</manvolnum></citerefentry> - mask to wait for. This function will return a - combination of POLLIN and POLLOUT and similar to fill - into the <literal>.events</literal> field of + will return the <function>poll()</function> mask to + wait for. This function will return a combination of + <literal>POLLIN</literal> and + <literal>POLLOUT</literal> and similar to fill into + the <literal>.events</literal> field of <literal>struct pollfd</literal>.</para> <para><function>sd_journal_reliable_fd()</function> @@ -134,7 +134,7 @@ <function>sd_journal_get_fd()</function> are sufficient as only source for wake-ups.</para> - <para>After each <literal>poll()</literal> wake-up + <para>After each <function>poll()</function> wake-up <function>sd_journal_process()</function> needs to be called to process events. This call will also indicate what kind of change has been detected (see below; note @@ -169,9 +169,9 @@ errno-style error code.</para> <para><function>sd_journal_get_events()</function> - returns a combination of POLLIN, POLLOUT and suchlike - on success or a negative errno-style error - code.</para> + returns a combination of <literal>POLLIN</literal>, + <literal>POLLOUT</literal> and suchlike on success or + a negative errno-style error code.</para> <para><function>sd_journal_reliable_fd()</function> returns a positive integer if the file descriptor diff --git a/man/sd_login_monitor_new.xml b/man/sd_login_monitor_new.xml index 2c4d05dcb9..94428771a8 100644 --- a/man/sd_login_monitor_new.xml +++ b/man/sd_login_monitor_new.xml @@ -47,6 +47,7 @@ <refname>sd_login_monitor_unref</refname> <refname>sd_login_monitor_flush</refname> <refname>sd_login_monitor_get_fd</refname> + <refname>sd_login_monitor_get_events</refname> <refname>sd_login_monitor</refname> <refpurpose>Monitor login sessions, seats and users</refpurpose> </refnamediv> @@ -76,6 +77,11 @@ <paramdef>sd_login_monitor* <parameter>m</parameter></paramdef> </funcprototype> + <funcprototype> + <funcdef>int <function>sd_login_monitor_get_events</function></funcdef> + <paramdef>sd_login_monitor* <parameter>m</parameter></paramdef> + </funcprototype> + </funcsynopsis> </refsynopsisdiv> @@ -122,14 +128,24 @@ application defined event loop, based around <citerefentry><refentrytitle>poll</refentrytitle><manvolnum>2</manvolnum></citerefentry> or a similar interface. The application should include - the returned file descriptor as wake up source for - POLLIN events. Whenever a wake-up is triggered the - file descriptor needs to be reset via + the returned file descriptor as wake-up source for the + events mask returned by + <function>sd_login_monitor_get_events()</function>. Whenever + a wake-up is triggered the file descriptor needs to be + reset via <function>sd_login_monitor_flush()</function>. An application needs to reread the login state with a function like <citerefentry><refentrytitle>sd_get_seats</refentrytitle><manvolnum>3</manvolnum></citerefentry> or similar to determine what changed.</para> + + <para><function>sd_login_monitor_get_events()</function> + will return the <function>poll()</function> mask to + wait for. This function will return a combination of + <literal>POLLIN</literal>, <literal>POLLOUT</literal> + and similar to fill into the + <literal>.events</literal> field of <literal>struct + pollfd</literal>.</para> </refsect1> <refsect1> @@ -140,8 +156,12 @@ <function>sd_login_monitor_flush()</function> return 0 or a positive integer. On success <function>sd_login_monitor_get_fd()</function> returns - a Unix file descriptor. On failure, these calls return - a negative errno-style error code.</para> + a Unix file descriptor. On success + <function>sd_login_monitor_get_events()</function> + returns a combination of <literal>POLLIN</literal>, + <literal>POLLOUT</literal> and suchlike. On failure, + these calls return a negative errno-style error + code.</para> <para><function>sd_login_monitor_unref()</function> always returns NULL.</para> @@ -151,10 +171,12 @@ <title>Notes</title> <para>The <function>sd_login_monitor_new()</function>, - <function>sd_login_monitor_unref()</function>, <function>sd_login_monitor_flush()</function> and - <function>sd_login_monitor_get_fd()</function> interfaces - are available as shared library, which can be compiled - and linked to with the + <function>sd_login_monitor_unref()</function>, + <function>sd_login_monitor_flush()</function>, + <function>sd_login_monitor_get_fd()</function> and + <function>sd_login_monitor_get_events()</function> + interfaces are available as shared library, which can + be compiled and linked to with the <literal>libsystemd-login</literal> <citerefentry><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry> file.</para> @@ -166,7 +188,8 @@ <para> <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>, <citerefentry><refentrytitle>sd-login</refentrytitle><manvolnum>3</manvolnum></citerefentry>, - <citerefentry><refentrytitle>sd_get_seats</refentrytitle><manvolnum>3</manvolnum></citerefentry> + <citerefentry><refentrytitle>sd_get_seats</refentrytitle><manvolnum>3</manvolnum></citerefentry>, + <citerefentry><refentrytitle>poll</refentrytitle><manvolnum>2</manvolnum></citerefentry> </para> </refsect1> diff --git a/src/login/libsystemd-login.sym b/src/login/libsystemd-login.sym index 272b0e2b52..55a828773b 100644 --- a/src/login/libsystemd-login.sym +++ b/src/login/libsystemd-login.sym @@ -58,3 +58,8 @@ LIBSYSTEMD_LOGIN_198 { global: sd_session_get_tty; } LIBSYSTEMD_LOGIN_186; + +LIBSYSTEMD_LOGIN_201 { +global: + sd_login_monitor_get_events; +} LIBSYSTEMD_LOGIN_198; diff --git a/src/login/sd-login.c b/src/login/sd-login.c index 8867e8c8eb..861a57166d 100644 --- a/src/login/sd-login.c +++ b/src/login/sd-login.c @@ -23,6 +23,7 @@ #include <string.h> #include <errno.h> #include <sys/inotify.h> +#include <sys/poll.h> #include "util.h" #include "cgroup-util.h" @@ -797,3 +798,11 @@ _public_ int sd_login_monitor_get_fd(sd_login_monitor *m) { return MONITOR_TO_FD(m); } + +_public_ int sd_login_monitor_get_events(sd_login_monitor *m) { + + if (!m) + return -EINVAL; + + return POLLIN; +} diff --git a/src/login/test-login.c b/src/login/test-login.c index 159ff3efc5..f639129636 100644 --- a/src/login/test-login.c +++ b/src/login/test-login.c @@ -185,7 +185,7 @@ int main(int argc, char* argv[]) { zero(pollfd); pollfd.fd = sd_login_monitor_get_fd(m); - pollfd.events = POLLIN; + pollfd.events = sd_login_monitor_get_events(m); for (n = 0; n < 5; n++) { r = poll(&pollfd, 1, -1); diff --git a/src/systemd/sd-login.h b/src/systemd/sd-login.h index 3746b45cf3..57255bd4a9 100644 --- a/src/systemd/sd-login.h +++ b/src/systemd/sd-login.h @@ -156,6 +156,9 @@ int sd_login_monitor_flush(sd_login_monitor *m); /* Get FD from monitor */ int sd_login_monitor_get_fd(sd_login_monitor *m); +/* Get poll() mask to monitor */ +int sd_login_monitor_get_events(sd_login_monitor *m); + #ifdef __cplusplus } #endif |