171
171
libcrun_write_container_status (const char * state_root , const char * id , libcrun_container_status_t * status ,
172
172
libcrun_error_t * err )
173
173
{
174
- int ret ;
174
+ int r , ret ;
175
175
cleanup_free char * file = get_state_directory_status_file (state_root , id );
176
176
cleanup_free char * file_tmp = NULL ;
177
177
size_t len ;
@@ -199,46 +199,99 @@ libcrun_write_container_status (const char *state_root, const char *id, libcrun_
199
199
yajl_gen_config (gen , yajl_gen_beautify , 1 );
200
200
yajl_gen_config (gen , yajl_gen_validate_utf8 , 1 );
201
201
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 ;
205
221
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 ;
208
225
209
- yajl_gen_string (gen , YAJL_STR ("cgroup-path" ), strlen ("cgroup-path" ));
210
226
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 ;
212
234
213
- yajl_gen_string (gen , YAJL_STR ("scope" ), strlen ("scope" ));
214
235
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 ;
216
239
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 ;
219
243
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 ;
222
247
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 ;
225
251
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 ;
228
255
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 ;
231
259
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 ;
234
263
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 ;
236
267
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 ;
242
295
243
296
if (UNLIKELY (safe_write (fd_write , buf , (ssize_t ) len ) < 0 ))
244
297
{
@@ -259,6 +312,12 @@ libcrun_write_container_status (const char *state_root, const char *id, libcrun_
259
312
yajl_gen_free (gen );
260
313
261
314
return ret ;
315
+
316
+ yajl_error :
317
+ if (gen )
318
+ yajl_gen_free (gen );
319
+
320
+ return yajl_error_to_crun_error (r , err );
262
321
}
263
322
264
323
int
0 commit comments