From e589c5b2698e30337a6f06186768de26ba1b90c3 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Thu, 18 Aug 2022 11:21:54 +0200 Subject: [PATCH] Refactor, create svc_find_by_cond() from api.c callback Signed-off-by: Joachim Wiberg --- src/api.c | 13 +------------ src/svc.c | 26 ++++++++++++++++++++++++-- src/svc.h | 1 + 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/api.c b/src/api.c index 21b7087d..d07e18e7 100644 --- a/src/api.c +++ b/src/api.c @@ -206,7 +206,6 @@ static svc_t *do_find(char *buf, size_t len) static svc_t *do_find_byc(char *buf, size_t len) { - svc_t *svc, *iter = NULL; char *input; input = sanitize(buf, len); @@ -215,17 +214,7 @@ static svc_t *do_find_byc(char *buf, size_t len) return NULL; } - for (svc = svc_iterator(&iter, 1); svc; svc = svc_iterator(&iter, 0)) { - char cond[MAX_COND_LEN]; - - mkcond(svc, cond, sizeof(cond)); - _d("Comparing input %s with cond %s", input, cond); - if (string_compare(cond, input)) - return svc; - } - - _d("None found"); - return NULL; + return svc_find_by_cond(input); } static void bypass_shutdown(void *); diff --git a/src/svc.c b/src/svc.c index 2d1b9918..b9a1e456 100644 --- a/src/svc.c +++ b/src/svc.c @@ -372,7 +372,7 @@ svc_t *svc_find(char *name, char *id) } /** - * svc_find_by_pid - Find an service object by its PID + * svc_find_by_pid - Find a service object by its PID * @pid: Process ID to match * * Returns: @@ -391,7 +391,29 @@ svc_t *svc_find_by_pid(pid_t pid) } /** - * svc_find_by_jobid - Find an service object by its JOB:ID + * svc_find_by_cond - Find a service object by its pid/foo condition + * @cond: Full "pid/foo" condition + * + * Returns: + * A pointer to an &svc_t object, or %NULL if not found. + */ +svc_t *svc_find_by_cond(const char *cond) +{ + svc_t *svc, *iter = NULL; + + for (svc = svc_iterator(&iter, 1); svc; svc = svc_iterator(&iter, 0)) { + char buf[MAX_COND_LEN]; + + mkcond(svc, buf, sizeof(buf)); + if (string_compare(buf, cond)) + return svc; + } + + return NULL; +} + +/** + * svc_find_by_jobid - Find a service object by its JOB:ID * @job: Job n:o * @id: Optional instance id * diff --git a/src/svc.h b/src/svc.h index a81dc25e..ac787968 100644 --- a/src/svc.h +++ b/src/svc.h @@ -201,6 +201,7 @@ void svc_validate (svc_t *svc); svc_t *svc_find (char *name, char *id); svc_t *svc_find_by_pid (pid_t pid); +svc_t *svc_find_by_cond (const char *cond); svc_t *svc_find_by_jobid (int job, char *id); svc_t *svc_find_by_tty (char *dev); svc_t *svc_find_by_pidfile (char *fn);