summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2013-04-04 17:38:08 +0200
committerLennart Poettering <lennart@poettering.net>2013-04-04 17:38:08 +0200
commitdace83cbd0c2212fc0e25d36d50711b19f14b1b6 (patch)
treec505fcc4425837fb098b1562753d469955a220be
parentee531d949c2f62374fc109252f8cbe61c2b8ee39 (diff)
login: add new public API call sd_login_monitor_get_events() to get poll() flags to wait for
We should keep our options open, so that we can watch for POLLOUT later on if we wish to. CUrrently this call will always return POLLIN however.
-rw-r--r--man/sd_journal_get_fd.xml18
-rw-r--r--man/sd_login_monitor_new.xml43
-rw-r--r--src/login/libsystemd-login.sym5
-rw-r--r--src/login/sd-login.c9
-rw-r--r--src/login/test-login.c2
-rw-r--r--src/systemd/sd-login.h3
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