Skip to content

Commit e29de40

Browse files
committed
status: use function to convert from yajl errors
Signed-off-by: Giuseppe Scrivano <[email protected]>
1 parent 540c884 commit e29de40

File tree

1 file changed

+87
-28
lines changed

1 file changed

+87
-28
lines changed

src/libcrun/status.c

Lines changed: 87 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ int
171171
libcrun_write_container_status (const char *state_root, const char *id, libcrun_container_status_t *status,
172172
libcrun_error_t *err)
173173
{
174-
int ret;
174+
int r, ret;
175175
cleanup_free char *file = get_state_directory_status_file (state_root, id);
176176
cleanup_free char *file_tmp = NULL;
177177
size_t len;
@@ -199,46 +199,99 @@ libcrun_write_container_status (const char *state_root, const char *id, libcrun_
199199
yajl_gen_config (gen, yajl_gen_beautify, 1);
200200
yajl_gen_config (gen, yajl_gen_validate_utf8, 1);
201201

202-
yajl_gen_map_open (gen);
203-
yajl_gen_string (gen, YAJL_STR ("pid"), strlen ("pid"));
204-
yajl_gen_integer (gen, status->pid);
202+
r = yajl_gen_map_open (gen);
203+
if (UNLIKELY (r != yajl_gen_status_ok))
204+
goto yajl_error;
205+
206+
r = yajl_gen_string (gen, YAJL_STR ("pid"), strlen ("pid"));
207+
if (UNLIKELY (r != yajl_gen_status_ok))
208+
goto yajl_error;
209+
210+
r = yajl_gen_integer (gen, status->pid);
211+
if (UNLIKELY (r != yajl_gen_status_ok))
212+
goto yajl_error;
213+
214+
r = yajl_gen_string (gen, YAJL_STR ("process-start-time"), strlen ("process-start-time"));
215+
if (UNLIKELY (r != yajl_gen_status_ok))
216+
goto yajl_error;
217+
218+
r = yajl_gen_integer (gen, status->process_start_time);
219+
if (UNLIKELY (r != yajl_gen_status_ok))
220+
goto yajl_error;
205221

206-
yajl_gen_string (gen, YAJL_STR ("process-start-time"), strlen ("process-start-time"));
207-
yajl_gen_integer (gen, status->process_start_time);
222+
r = yajl_gen_string (gen, YAJL_STR ("cgroup-path"), strlen ("cgroup-path"));
223+
if (UNLIKELY (r != yajl_gen_status_ok))
224+
goto yajl_error;
208225

209-
yajl_gen_string (gen, YAJL_STR ("cgroup-path"), strlen ("cgroup-path"));
210226
tmp = status->cgroup_path ? status->cgroup_path : "";
211-
yajl_gen_string (gen, YAJL_STR (tmp), strlen (tmp));
227+
r = yajl_gen_string (gen, YAJL_STR (tmp), strlen (tmp));
228+
if (UNLIKELY (r != yajl_gen_status_ok))
229+
goto yajl_error;
230+
231+
r = yajl_gen_string (gen, YAJL_STR ("scope"), strlen ("scope"));
232+
if (UNLIKELY (r != yajl_gen_status_ok))
233+
goto yajl_error;
212234

213-
yajl_gen_string (gen, YAJL_STR ("scope"), strlen ("scope"));
214235
tmp = status->scope ? status->scope : "";
215-
yajl_gen_string (gen, YAJL_STR (tmp), strlen (tmp));
236+
r = yajl_gen_string (gen, YAJL_STR (tmp), strlen (tmp));
237+
if (UNLIKELY (r != yajl_gen_status_ok))
238+
goto yajl_error;
216239

217-
yajl_gen_string (gen, YAJL_STR ("rootfs"), strlen ("rootfs"));
218-
yajl_gen_string (gen, YAJL_STR (status->rootfs), strlen (status->rootfs));
240+
r = yajl_gen_string (gen, YAJL_STR ("rootfs"), strlen ("rootfs"));
241+
if (UNLIKELY (r != yajl_gen_status_ok))
242+
goto yajl_error;
219243

220-
yajl_gen_string (gen, YAJL_STR ("systemd-cgroup"), strlen ("systemd-cgroup"));
221-
yajl_gen_bool (gen, status->systemd_cgroup);
244+
r = yajl_gen_string (gen, YAJL_STR (status->rootfs), strlen (status->rootfs));
245+
if (UNLIKELY (r != yajl_gen_status_ok))
246+
goto yajl_error;
222247

223-
yajl_gen_string (gen, YAJL_STR ("bundle"), strlen ("bundle"));
224-
yajl_gen_string (gen, YAJL_STR (status->bundle), strlen (status->bundle));
248+
r = yajl_gen_string (gen, YAJL_STR ("systemd-cgroup"), strlen ("systemd-cgroup"));
249+
if (UNLIKELY (r != yajl_gen_status_ok))
250+
goto yajl_error;
225251

226-
yajl_gen_string (gen, YAJL_STR ("created"), strlen ("created"));
227-
yajl_gen_string (gen, YAJL_STR (status->created), strlen (status->created));
252+
r = yajl_gen_bool (gen, status->systemd_cgroup);
253+
if (UNLIKELY (r != yajl_gen_status_ok))
254+
goto yajl_error;
228255

229-
yajl_gen_string (gen, YAJL_STR ("detached"), strlen ("detached"));
230-
yajl_gen_bool (gen, status->detached);
256+
r = yajl_gen_string (gen, YAJL_STR ("bundle"), strlen ("bundle"));
257+
if (UNLIKELY (r != yajl_gen_status_ok))
258+
goto yajl_error;
231259

232-
yajl_gen_string (gen, YAJL_STR ("external_descriptors"), strlen ("external_descriptors"));
233-
yajl_gen_string (gen, YAJL_STR (status->external_descriptors), strlen (status->external_descriptors));
260+
r = yajl_gen_string (gen, YAJL_STR (status->bundle), strlen (status->bundle));
261+
if (UNLIKELY (r != yajl_gen_status_ok))
262+
goto yajl_error;
234263

235-
yajl_gen_map_close (gen);
264+
r = yajl_gen_string (gen, YAJL_STR ("created"), strlen ("created"));
265+
if (UNLIKELY (r != yajl_gen_status_ok))
266+
goto yajl_error;
236267

237-
if (yajl_gen_get_buf (gen, &buf, &len) != yajl_gen_status_ok)
238-
{
239-
ret = crun_make_error (err, 0, "cannot generate status file");
240-
goto exit;
241-
}
268+
r = yajl_gen_string (gen, YAJL_STR (status->created), strlen (status->created));
269+
if (UNLIKELY (r != yajl_gen_status_ok))
270+
goto yajl_error;
271+
272+
r = yajl_gen_string (gen, YAJL_STR ("detached"), strlen ("detached"));
273+
if (UNLIKELY (r != yajl_gen_status_ok))
274+
goto yajl_error;
275+
276+
r = yajl_gen_bool (gen, status->detached);
277+
if (UNLIKELY (r != yajl_gen_status_ok))
278+
goto yajl_error;
279+
280+
r = yajl_gen_string (gen, YAJL_STR ("external_descriptors"), strlen ("external_descriptors"));
281+
if (UNLIKELY (r != yajl_gen_status_ok))
282+
goto yajl_error;
283+
284+
r = yajl_gen_string (gen, YAJL_STR (status->external_descriptors), strlen (status->external_descriptors));
285+
if (UNLIKELY (r != yajl_gen_status_ok))
286+
goto yajl_error;
287+
288+
r = yajl_gen_map_close (gen);
289+
if (UNLIKELY (r != yajl_gen_status_ok))
290+
goto yajl_error;
291+
292+
r = yajl_gen_get_buf (gen, &buf, &len);
293+
if (UNLIKELY (r != yajl_gen_status_ok))
294+
goto yajl_error;
242295

243296
if (UNLIKELY (safe_write (fd_write, buf, (ssize_t) len) < 0))
244297
{
@@ -259,6 +312,12 @@ libcrun_write_container_status (const char *state_root, const char *id, libcrun_
259312
yajl_gen_free (gen);
260313

261314
return ret;
315+
316+
yajl_error:
317+
if (gen)
318+
yajl_gen_free (gen);
319+
320+
return yajl_error_to_crun_error (r, err);
262321
}
263322

264323
int

0 commit comments

Comments
 (0)