aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-08-12 11:43:14 +0200
committerHarald Welte <laforge@gnumonks.org>2017-08-12 11:43:14 +0200
commit6c0a0e645d4663fdd15de41d3e4dc3f45d6ce708 (patch)
tree06ed565351f628b8e62c90b000493bd9c583aca2
parent4a29f348135671ba59107a1659fab6c8c9362f58 (diff)
add osmo_fd_setup() convenience function to fill-in osmo_fd
This basically follows the concept of osmo_timer_setup() and allows the caller to fill-in all configurable fields of osmo_fd in one line of code, rather than open-coding it in 5 lines everywhere. Change-Id: I6dbf19ea22fd65302bfc5424c10418d1b7939094
-rw-r--r--include/osmocom/core/select.h4
-rw-r--r--src/select.c18
2 files changed, 22 insertions, 0 deletions
diff --git a/include/osmocom/core/select.h b/include/osmocom/core/select.h
index 2abda2dc..b6fed3c7 100644
--- a/include/osmocom/core/select.h
+++ b/include/osmocom/core/select.h
@@ -36,6 +36,10 @@ struct osmo_fd {
unsigned int priv_nr;
};
+void osmo_fd_setup(struct osmo_fd *ofd, int fd, unsigned int when,
+ int (*cb)(struct osmo_fd *fd, unsigned int what),
+ void *data, unsigned int priv_nr);
+
bool osmo_fd_is_registered(struct osmo_fd *fd);
int osmo_fd_register(struct osmo_fd *fd);
void osmo_fd_unregister(struct osmo_fd *fd);
diff --git a/src/select.c b/src/select.c
index 0ba8bc60..4b98b623 100644
--- a/src/select.c
+++ b/src/select.c
@@ -47,6 +47,24 @@ static int maxfd = 0;
static LLIST_HEAD(osmo_fds);
static int unregistered_count;
+/*! Set up an osmo-fd. Will not register it.
+ * \param[inout] ofd Osmo FD to be set-up
+ * \param[in] fd OS-level file descriptor number
+ * \param[in] when bit-mask of BSC_FD_{READ,WRITE,EXECEPT}
+ * \param[in] cb Call-back function to be called
+ * \param[in] data Private context pointer
+ * \param[in] priv_nr Private number
+ */
+void osmo_fd_setup(struct osmo_fd *ofd, int fd, unsigned int when,
+ int (*cb)(struct osmo_fd *fd, unsigned int what),
+ void *data, unsigned int priv_nr)
+{
+ ofd->fd = fd;
+ ofd->when = when;
+ ofd->cb = cb;
+ ofd->data = data;
+ ofd->priv_nr = priv_nr;
+}
/*! Check if a file descriptor is already registered
* \param[in] fd osmocom file descriptor to be checked