aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Oberhollenzer <goliath@infraroot.at>2019-03-29 10:40:59 +0100
committerDavid Oberhollenzer <goliath@infraroot.at>2019-03-29 21:00:53 +0100
commitc3d14cbfa863ea3af8aaa253f1d7d3909adf1547 (patch)
tree5b057f5fbdd0a28a6c5a9061c5907eb58f8e817f
parent7cfe6e845878d67f578fa846e784c064a178d9c5 (diff)
cleanup: init status response
- rename init_status_response_t to init_status_t - merge code for handling it - fix memory leak in status command Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
-rw-r--r--cmd/service/startstop.c14
-rw-r--r--cmd/service/status.c18
-rw-r--r--lib/Makemodule.am2
-rw-r--r--lib/include/initsock.h6
-rw-r--r--lib/init/free_init_status.c10
-rw-r--r--lib/init/init_socket_recv_status.c2
6 files changed, 27 insertions, 25 deletions
diff --git a/cmd/service/startstop.c b/cmd/service/startstop.c
index ffc33de..8c30efa 100644
--- a/cmd/service/startstop.c
+++ b/cmd/service/startstop.c
@@ -8,17 +8,11 @@
#include <getopt.h>
#include <unistd.h>
-static void free_resp(init_status_response_t *resp)
-{
- free(resp->filename);
- free(resp->service_name);
-}
-
static int cmd_startstop(int argc, char **argv,
E_SERVICE_STATE filter, E_INIT_REQUEST action)
{
int i, fd, ret = EXIT_FAILURE;
- init_status_response_t resp;
+ init_status_t resp;
char tmppath[256];
bool found;
@@ -41,12 +35,12 @@ static int cmd_startstop(int argc, char **argv,
if (init_socket_recv_status(fd, &resp)) {
perror("reading from initd socket");
- free_resp(&resp);
+ free_init_status(&resp);
goto out;
}
if (resp.state == ESS_NONE) {
- free_resp(&resp);
+ free_init_status(&resp);
break;
}
@@ -68,7 +62,7 @@ static int cmd_startstop(int argc, char **argv,
goto out;
}
- free_resp(&resp);
+ free_init_status(&resp);
}
ret = EXIT_SUCCESS;
diff --git a/cmd/service/status.c b/cmd/service/status.c
index abeeb15..752b0c7 100644
--- a/cmd/service/status.c
+++ b/cmd/service/status.c
@@ -15,17 +15,11 @@ static const struct option long_opts[] = {
static const char *short_opts = "d";
-static void free_resp(init_status_response_t *resp)
-{
- free(resp->filename);
- free(resp->service_name);
-}
-
static int cmd_status(int argc, char **argv)
{
bool is_tty, found, show_details = false;
int i, fd, ret = EXIT_FAILURE;
- init_status_response_t resp;
+ init_status_t resp;
char tmppath[256];
const char *state;
service_t *svc;
@@ -63,12 +57,12 @@ static int cmd_status(int argc, char **argv)
if (init_socket_recv_status(fd, &resp)) {
perror("reading from initd socket");
- free_resp(&resp);
+ free_init_status(&resp);
goto out;
}
if (resp.state == ESS_NONE) {
- free_resp(&resp);
+ free_init_status(&resp);
break;
}
@@ -87,8 +81,10 @@ static int cmd_status(int argc, char **argv)
}
}
- if (!found)
+ if (!found) {
+ free_init_status(&resp);
continue;
+ }
}
switch (resp.state) {
@@ -150,7 +146,7 @@ static int cmd_status(int argc, char **argv)
printf("[%s] %s\n", state, resp.filename);
}
- free_resp(&resp);
+ free_init_status(&resp);
}
ret = EXIT_SUCCESS;
diff --git a/lib/Makemodule.am b/lib/Makemodule.am
index a131463..8dcff06 100644
--- a/lib/Makemodule.am
+++ b/lib/Makemodule.am
@@ -1,7 +1,7 @@
libinit_a_SOURCES = lib/init/delsvc.c lib/init/svcmap.c lib/init/rdsvc.c
libinit_a_SOURCES += lib/init/svcscan.c lib/init/del_svc_list.c
libinit_a_SOURCES += lib/init/svc_tsort.c lib/include/service.h
-libinit_a_SOURCES += lib/init/init_socket_open.c
+libinit_a_SOURCES += lib/init/init_socket_open.c lib/init/free_init_status.c
libinit_a_SOURCES += lib/include/initsock.h lib/init/init_socket_send_request.c
libinit_a_SOURCES += lib/init/init_socket_recv_status.c
libinit_a_CPPFLAGS = $(AM_CPPFLAGS)
diff --git a/lib/include/initsock.h b/lib/include/initsock.h
index afbf861..04b8ffd 100644
--- a/lib/include/initsock.h
+++ b/lib/include/initsock.h
@@ -45,12 +45,14 @@ typedef struct {
int id;
char *filename;
char *service_name;
-} init_status_response_t;
+} init_status_t;
int init_socket_open(const char *tmppath);
int init_socket_send_request(int fd, E_INIT_REQUEST rq, ...);
-int init_socket_recv_status(int fd, init_status_response_t *resp);
+int init_socket_recv_status(int fd, init_status_t *resp);
+
+void free_init_status(init_status_t *resp);
#endif /* INITSOCK_H */
diff --git a/lib/init/free_init_status.c b/lib/init/free_init_status.c
new file mode 100644
index 0000000..945d407
--- /dev/null
+++ b/lib/init/free_init_status.c
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: ISC */
+#include <stdlib.h>
+
+#include "initsock.h"
+
+void free_init_status(init_status_t *resp)
+{
+ free(resp->filename);
+ free(resp->service_name);
+}
diff --git a/lib/init/init_socket_recv_status.c b/lib/init/init_socket_recv_status.c
index b812819..d5ca2e6 100644
--- a/lib/init/init_socket_recv_status.c
+++ b/lib/init/init_socket_recv_status.c
@@ -61,7 +61,7 @@ static char *read_string(int fd)
return buffer;
}
-int init_socket_recv_status(int fd, init_status_response_t *resp)
+int init_socket_recv_status(int fd, init_status_t *resp)
{
uint8_t info[8];