mirror of
https://github.com/troglobit/finit.git
synced 2026-11-06 15:51:03 +00:00
Refactor other iterators to use new re-entrant svc_iterator1() API
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
1 parent
7f04382eee
commit
d7d8b8487d
3 files changed
+17
-12
No files matched your search
+4
-2
@@ -225,10 +225,11 @@ static void socket_cb(uev_t *w, void *arg, int events)
|
|||||||
*/
|
*/
|
||||||
int inetd_check_loop(struct sockaddr *sa, socklen_t len, char *name)
|
int inetd_check_loop(struct sockaddr *sa, socklen_t len, char *name)
|
||||||
{
|
{
|
||||||
|
int pos;
|
||||||
svc_t *svc;
|
svc_t *svc;
|
||||||
char pname[NI_MAXHOST];
|
char pname[NI_MAXHOST];
|
||||||
|
|
||||||
for (svc = svc_inetd_iterator(1); svc; svc = svc_inetd_iterator(0)) {
|
for (svc = svc_inetd_iterator(&pos, 1); svc; svc = svc_inetd_iterator(&pos, 0)) {
|
||||||
inetd_t *i = &svc->inetd;
|
inetd_t *i = &svc->inetd;
|
||||||
|
|
||||||
if (!i->builtin || i->type != SOCK_DGRAM)
|
if (!i->builtin || i->type != SOCK_DGRAM)
|
||||||
@@ -665,9 +666,10 @@ int inetd_filter_str(inetd_t *inetd, char *str, size_t len)
|
|||||||
|
|
||||||
svc_t *inetd_find_svc(char *path, char *service, char *proto)
|
svc_t *inetd_find_svc(char *path, char *service, char *proto)
|
||||||
{
|
{
|
||||||
|
int pos;
|
||||||
svc_t *svc;
|
svc_t *svc;
|
||||||
|
|
||||||
for (svc = svc_inetd_iterator(1); svc; svc = svc_inetd_iterator(0)) {
|
for (svc = svc_inetd_iterator(&pos, 1); svc; svc = svc_inetd_iterator(&pos, 0)) {
|
||||||
if (strncmp(path, svc->cmd, strlen(svc->cmd)))
|
if (strncmp(path, svc->cmd, strlen(svc->cmd)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
@@ -204,17 +204,18 @@ svc_t *svc_inetd_iterator(int *pos, int first)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* svc_dynamic_iterator - Naive iterator over all registered dynamic services.
|
* svc_dynamic_iterator - Naive iterator over all registered dynamic services.
|
||||||
|
* @pos: Iterator variable, preserves state between calls
|
||||||
* @first: Get first &svc_t object, or next until end.
|
* @first: Get first &svc_t object, or next until end.
|
||||||
*
|
*
|
||||||
* Returns:
|
* Returns:
|
||||||
* The first dynamically loaded &svc_t when @first is set, otherwise the
|
* The first dynamically loaded &svc_t when @first is set, otherwise the
|
||||||
* next dynamically loaded &svc_t until the end when %NULL is returned.
|
* next dynamically loaded &svc_t until the end when %NULL is returned.
|
||||||
*/
|
*/
|
||||||
svc_t *svc_dynamic_iterator(int first)
|
svc_t *svc_dynamic_iterator(int *pos, int first)
|
||||||
{
|
{
|
||||||
svc_t *svc;
|
svc_t *svc;
|
||||||
|
|
||||||
for (svc = svc_iterator(first); svc; svc = svc_iterator(0)) {
|
for (svc = svc_iterator1(pos, first); svc; svc = svc_iterator1(pos, 0)) {
|
||||||
if (svc->mtime.tv_sec)
|
if (svc->mtime.tv_sec)
|
||||||
return svc;
|
return svc;
|
||||||
}
|
}
|
||||||
@@ -225,6 +226,7 @@ svc_t *svc_dynamic_iterator(int first)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* svc_named_iterator - Iterates over all instances of a service.
|
* svc_named_iterator - Iterates over all instances of a service.
|
||||||
|
* @pos: Iterator variable, preserves state between calls
|
||||||
* @first: Get first &svc_t object, or next until end.
|
* @first: Get first &svc_t object, or next until end.
|
||||||
* @cmd: Service name to look for.
|
* @cmd: Service name to look for.
|
||||||
*
|
*
|
||||||
@@ -233,11 +235,11 @@ svc_t *svc_dynamic_iterator(int first)
|
|||||||
* &svc_t instance with the same @cmd until the end when %NULL is
|
* &svc_t instance with the same @cmd until the end when %NULL is
|
||||||
* returned.
|
* returned.
|
||||||
*/
|
*/
|
||||||
svc_t *svc_named_iterator(int first, char *cmd)
|
svc_t *svc_named_iterator(int *pos, int first, char *cmd)
|
||||||
{
|
{
|
||||||
svc_t *svc;
|
svc_t *svc;
|
||||||
|
|
||||||
for (svc = svc_iterator(first); svc; svc = svc_iterator(0)) {
|
for (svc = svc_iterator1(pos, first); svc; svc = svc_iterator1(pos, 0)) {
|
||||||
char *name = basename(svc->cmd);
|
char *name = basename(svc->cmd);
|
||||||
|
|
||||||
if (!strncmp(name, cmd, strlen(name)))
|
if (!strncmp(name, cmd, strlen(name)))
|
||||||
@@ -250,6 +252,7 @@ svc_t *svc_named_iterator(int first, char *cmd)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* svc_job_iterator - Iterates over all instances of a service.
|
* svc_job_iterator - Iterates over all instances of a service.
|
||||||
|
* @pos: Iterator variable, preserves state between calls
|
||||||
* @first: Get first &svc_t object, or next until end.
|
* @first: Get first &svc_t object, or next until end.
|
||||||
* @job: Job to look for.
|
* @job: Job to look for.
|
||||||
*
|
*
|
||||||
@@ -258,11 +261,11 @@ svc_t *svc_named_iterator(int first, char *cmd)
|
|||||||
* &svc_t instance with the same @job until the end when %NULL is
|
* &svc_t instance with the same @job until the end when %NULL is
|
||||||
* returned.
|
* returned.
|
||||||
*/
|
*/
|
||||||
svc_t *svc_job_iterator(int first, int job)
|
svc_t *svc_job_iterator(int *pos, int first, int job)
|
||||||
{
|
{
|
||||||
svc_t *svc;
|
svc_t *svc;
|
||||||
|
|
||||||
for (svc = svc_iterator(first); svc; svc = svc_iterator(0)) {
|
for (svc = svc_iterator1(pos, first); svc; svc = svc_iterator1(pos, 0)) {
|
||||||
if (svc->job == job)
|
if (svc->job == job)
|
||||||
return svc;
|
return svc;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -155,11 +155,11 @@ svc_t *svc_find_by_jobid (int job, int id);
|
|||||||
svc_t *svc_find_by_nameid (char *name, int id);
|
svc_t *svc_find_by_nameid (char *name, int id);
|
||||||
|
|
||||||
svc_t *svc_iterator (int first);
|
svc_t *svc_iterator (int first);
|
||||||
svc_t *svc_inetd_iterator (int first);
|
|
||||||
svc_t *svc_dynamic_iterator (int first);
|
|
||||||
svc_t *svc_named_iterator (int first, char *cmd);
|
|
||||||
svc_t *svc_job_iterator (int first, int job);
|
|
||||||
svc_t *svc_iterator1 (int *pos, int first);
|
svc_t *svc_iterator1 (int *pos, int first);
|
||||||
|
svc_t *svc_inetd_iterator (int *pos, int first);
|
||||||
|
svc_t *svc_dynamic_iterator (int *pos, int first);
|
||||||
|
svc_t *svc_named_iterator (int *pos, int first, char *cmd);
|
||||||
|
svc_t *svc_job_iterator (int *pos, int first, int job);
|
||||||
|
|
||||||
void svc_foreach (void (*cb)(svc_t *));
|
void svc_foreach (void (*cb)(svc_t *));
|
||||||
void svc_foreach_dynamic (void (*cb)(svc_t *));
|
void svc_foreach_dynamic (void (*cb)(svc_t *));
|
||||||
|
|||||||
Reference in new issue
Block a user