From 4d1ecddf648ef6f1ab488272100e4c271c127e77 Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Tue, 28 Jan 2025 10:01:59 +0100 Subject: [PATCH] status: report errors from get_state_directory_status_file Signed-off-by: Giuseppe Scrivano --- src/libcrun/status.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/libcrun/status.c b/src/libcrun/status.c index 67033ab7aa..1c7f24f46f 100644 --- a/src/libcrun/status.c +++ b/src/libcrun/status.c @@ -95,29 +95,24 @@ libcrun_get_state_directory (char **out, const char *state_root, const char *id, return 0; } -static char * -get_state_directory_status_file (const char *state_root, const char *id) +static int +get_state_directory_status_file (char **out, const char *state_root, const char *id, libcrun_error_t *err) { cleanup_free char *root = NULL; - libcrun_error_t *err = NULL; char *path = NULL; int ret; ret = get_run_directory (&root, state_root, err); if (UNLIKELY (ret < 0)) - { - crun_error_release (err); - return NULL; - } + return ret; ret = append_paths (&path, err, root, id, "status", NULL); if (UNLIKELY (ret < 0)) - { - crun_error_release (err); - return NULL; - } + return ret; + + STEAL_POINTER (out, path); - return path; + return 0; } static int @@ -188,8 +183,8 @@ libcrun_write_container_status (const char *state_root, const char *id, libcrun_ libcrun_error_t *err) { int r, ret; - cleanup_free char *file = get_state_directory_status_file (state_root, id); cleanup_free char *file_tmp = NULL; + cleanup_free char *file = NULL; size_t len; cleanup_close int fd_write = -1; const unsigned char *buf = NULL; @@ -197,6 +192,10 @@ libcrun_write_container_status (const char *state_root, const char *id, libcrun_ const char *tmp; yajl_gen gen = NULL; + ret = get_state_directory_status_file (&file, state_root, id, err); + if (UNLIKELY (ret < 0)) + return ret; + ret = read_pid_stat (status->pid, &st, err); if (UNLIKELY (ret < 0)) return ret; @@ -363,9 +362,13 @@ libcrun_read_container_status (libcrun_container_status_t *status, const char *s cleanup_free char *buffer = NULL; char err_buffer[256]; int ret; - cleanup_free char *file = get_state_directory_status_file (state_root, id); + cleanup_free char *file = NULL; yajl_val tree, tmp; + ret = get_state_directory_status_file (&file, state_root, id, err); + if (UNLIKELY (ret < 0)) + return ret; + ret = read_all_file (file, &buffer, NULL, err); if (UNLIKELY (ret < 0)) return ret;