mirror of
https://github.com/pygos/init.git
synced 2024-12-22 15:20:49 +01:00
Add filter argument to status request
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
This commit is contained in:
parent
affe9e4b88
commit
d16d260181
6 changed files with 38 additions and 12 deletions
|
@ -53,7 +53,7 @@ static int cmd_status(int argc, char **argv)
|
|||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
if (init_socket_send_request(fd, EIR_STATUS))
|
||||
if (init_socket_send_request(fd, EIR_STATUS, ESS_NONE))
|
||||
goto out;
|
||||
|
||||
is_tty = (isatty(STDOUT_FILENO) == 1);
|
||||
|
|
|
@ -68,7 +68,7 @@ void supervisor_init(void);
|
|||
bool supervisor_process_queues(void);
|
||||
|
||||
void supervisor_answer_status_request(int fd, const void *dest_addr,
|
||||
size_t addrlen);
|
||||
size_t addrlen, E_SERVICE_STATE filter);
|
||||
|
||||
/********** signal_<platform>.c **********/
|
||||
|
||||
|
|
|
@ -61,7 +61,8 @@ retry:
|
|||
|
||||
switch (rq.rq) {
|
||||
case EIR_STATUS:
|
||||
supervisor_answer_status_request(sockfd, &addr, addrlen);
|
||||
supervisor_answer_status_request(sockfd, &addr, addrlen,
|
||||
rq.arg.status.filter);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -186,8 +186,12 @@ out:
|
|||
}
|
||||
|
||||
static int send_svc_list(int fd, const void *dst, size_t addrlen,
|
||||
E_SERVICE_STATE state, service_t *list)
|
||||
E_SERVICE_STATE filter, E_SERVICE_STATE state,
|
||||
service_t *list)
|
||||
{
|
||||
if (filter != ESS_NONE && filter != state)
|
||||
return 0;
|
||||
|
||||
while (list != NULL) {
|
||||
if (init_socket_send_status(fd, dst, addrlen, state, list))
|
||||
return -1;
|
||||
|
@ -198,17 +202,18 @@ static int send_svc_list(int fd, const void *dst, size_t addrlen,
|
|||
return 0;
|
||||
}
|
||||
|
||||
void supervisor_answer_status_request(int fd, const void *dst, size_t addrlen)
|
||||
void supervisor_answer_status_request(int fd, const void *dst, size_t addrlen,
|
||||
E_SERVICE_STATE filter)
|
||||
{
|
||||
if (send_svc_list(fd, dst, addrlen, ESS_RUNNING, running))
|
||||
if (send_svc_list(fd, dst, addrlen, filter, ESS_RUNNING, running))
|
||||
return;
|
||||
if (send_svc_list(fd, dst, addrlen, ESS_DONE, completed))
|
||||
if (send_svc_list(fd, dst, addrlen, filter, ESS_DONE, completed))
|
||||
return;
|
||||
if (send_svc_list(fd, dst, addrlen, ESS_FAILED, failed))
|
||||
if (send_svc_list(fd, dst, addrlen, filter, ESS_FAILED, failed))
|
||||
return;
|
||||
if (send_svc_list(fd, dst, addrlen, ESS_ENQUEUED, queue))
|
||||
if (send_svc_list(fd, dst, addrlen, filter, ESS_ENQUEUED, queue))
|
||||
return;
|
||||
if (send_svc_list(fd, dst, addrlen, ESS_ENQUEUED, terminated))
|
||||
if (send_svc_list(fd, dst, addrlen, filter, ESS_ENQUEUED, terminated))
|
||||
return;
|
||||
init_socket_send_status(fd, dst, addrlen, ESS_NONE, NULL);
|
||||
}
|
||||
|
|
|
@ -23,6 +23,14 @@ typedef enum {
|
|||
|
||||
typedef struct {
|
||||
uint8_t rq;
|
||||
uint8_t padd[3];
|
||||
|
||||
union {
|
||||
struct {
|
||||
uint8_t filter;
|
||||
uint8_t padd[3];
|
||||
} status;
|
||||
} arg;
|
||||
} init_request_t;
|
||||
|
||||
typedef struct {
|
||||
|
@ -36,7 +44,7 @@ int init_socket_create(void);
|
|||
|
||||
int init_socket_open(const char *tmppath);
|
||||
|
||||
int init_socket_send_request(int fd, E_INIT_REQUEST rq);
|
||||
int init_socket_send_request(int fd, E_INIT_REQUEST rq, ...);
|
||||
|
||||
int init_socket_send_status(int fd, const void *dest_addr, size_t addrlen,
|
||||
E_SERVICE_STATE state, service_t *svc);
|
||||
|
|
|
@ -1,19 +1,31 @@
|
|||
/* SPDX-License-Identifier: ISC */
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "initsock.h"
|
||||
|
||||
int init_socket_send_request(int fd, E_INIT_REQUEST rq)
|
||||
int init_socket_send_request(int fd, E_INIT_REQUEST rq, ...)
|
||||
{
|
||||
init_request_t request;
|
||||
ssize_t ret;
|
||||
va_list ap;
|
||||
|
||||
memset(&request, 0, sizeof(request));
|
||||
request.rq = rq;
|
||||
|
||||
va_start(ap, rq);
|
||||
switch (rq) {
|
||||
case EIR_STATUS:
|
||||
request.arg.status.filter = va_arg(ap, E_SERVICE_STATE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
va_end(ap);
|
||||
|
||||
retry:
|
||||
ret = write(fd, &request, sizeof(request));
|
||||
|
||||
|
|
Loading…
Reference in a new issue