Lines Matching +full:- +full:r

1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: Copyright 2016 IBM Corporation
15 #include <systemd/sd-bus.h>
16 #include <systemd/sd-event.h>
53 int r; member
82 static void async_wait_done(int r, mapper_async_wait*);
87 static void async_subtree_done(int r, mapper_async_subtree*);
148 int r; in async_wait_timeout_callback() local
150 mapper_async_wait* wait = data->wait; in async_wait_timeout_callback()
152 sd_event_source_unref(data->event_source); in async_wait_timeout_callback()
153 r = sd_bus_call_method_async( in async_wait_timeout_callback()
154 wait->conn, NULL, "xyz.openbmc_project.ObjectMapper", in async_wait_timeout_callback()
157 async_wait_getobject_callback, data, "sas", data->path, 0, NULL); in async_wait_timeout_callback()
158 if (r < 0) in async_wait_timeout_callback()
160 async_wait_done(r, wait); in async_wait_timeout_callback()
171 int r; in async_wait_getobject_callback() local
173 mapper_async_wait* wait = data->wait; in async_wait_getobject_callback()
176 if (wait->finished) in async_wait_getobject_callback()
187 r = sd_bus_message_get_errno(m); in async_wait_getobject_callback()
189 if ((r == EBUSY || r == ENOBUFS) && data->retry < mapper_busy_retries) in async_wait_getobject_callback()
191 r = sd_event_now(wait->loop, CLOCK_MONOTONIC, &next_retry); in async_wait_getobject_callback()
192 if (r < 0) in async_wait_getobject_callback()
194 async_wait_done(r, wait); in async_wait_getobject_callback()
198 next_retry += mapper_busy_delay_interval_usec * (1 << data->retry); in async_wait_getobject_callback()
199 r = sd_event_add_time(wait->loop, &data->event_source, CLOCK_MONOTONIC, in async_wait_getobject_callback()
201 ++data->retry; in async_wait_getobject_callback()
202 if (r < 0) in async_wait_getobject_callback()
204 async_wait_done(r, wait); in async_wait_getobject_callback()
211 if (r) in async_wait_getobject_callback()
213 async_wait_done(-r, wait); in async_wait_getobject_callback()
217 for (i = 0; i < wait->count; ++i) in async_wait_getobject_callback()
219 if (!strcmp(data->path, wait->objs[i])) in async_wait_getobject_callback()
221 wait->status[i] = 1; in async_wait_getobject_callback()
238 int r; in async_wait_get_objects() local
241 for (i = 0; i < wait->count; ++i) in async_wait_get_objects()
243 if (wait->status[i]) in async_wait_get_objects()
248 data->wait = wait; in async_wait_get_objects()
249 data->path = wait->objs[i]; in async_wait_get_objects()
250 data->retry = 0; in async_wait_get_objects()
251 data->event_source = NULL; in async_wait_get_objects()
252 r = sd_bus_call_method_async( in async_wait_get_objects()
253 wait->conn, NULL, "xyz.openbmc_project.ObjectMapper", in async_wait_get_objects()
256 async_wait_getobject_callback, data, "sas", wait->objs[i], 0, NULL); in async_wait_get_objects()
257 if (r < 0) in async_wait_get_objects()
260 fprintf(stderr, "Error invoking method: %s\n", strerror(-r)); in async_wait_get_objects()
261 return r; in async_wait_get_objects()
271 int r; in async_wait_match_introspection_complete() local
274 if (wait->finished) in async_wait_match_introspection_complete()
279 r = async_wait_get_objects(wait); in async_wait_match_introspection_complete()
280 if (r < 0) in async_wait_match_introspection_complete()
282 async_wait_done(r, wait); in async_wait_match_introspection_complete()
288 static void async_wait_done(int r, mapper_async_wait* w) in async_wait_done() argument
290 if (w->finished) in async_wait_done()
295 w->finished = 1; in async_wait_done()
296 sd_bus_slot_unref(w->introspection_slot); in async_wait_done()
297 sd_bus_slot_unref(w->intf_slot); in async_wait_done()
299 if (w->callback) in async_wait_done()
301 w->callback(r, w->userdata); in async_wait_done()
309 if (w->finished) in async_wait_check_done()
314 for (i = 0; i < w->count; ++i) in async_wait_check_done()
316 if (!w->status[i]) in async_wait_check_done()
327 free(w->status); in mapper_wait_async_free()
328 sarrayfree(w->objs); in mapper_wait_async_free()
336 int r; in mapper_wait_async() local
342 return -ENOMEM; in mapper_wait_async()
346 wait->conn = conn; in mapper_wait_async()
347 wait->loop = loop; in mapper_wait_async()
348 wait->callback = callback; in mapper_wait_async()
349 wait->userdata = userdata; in mapper_wait_async()
350 wait->count = sarraylen(objs); in mapper_wait_async()
351 if (!wait->count) in mapper_wait_async()
353 r = 0; in mapper_wait_async()
357 wait->objs = sarraydup(objs); in mapper_wait_async()
358 if (!wait->objs) in mapper_wait_async()
360 r = -ENOMEM; in mapper_wait_async()
364 wait->status = malloc(sizeof(*wait->status) * wait->count); in mapper_wait_async()
365 if (!wait->status) in mapper_wait_async()
367 r = -ENOMEM; in mapper_wait_async()
370 memset(wait->status, 0, sizeof(*wait->status) * wait->count); in mapper_wait_async()
372 r = sd_bus_add_match(conn, &wait->introspection_slot, in mapper_wait_async()
375 if (r < 0) in mapper_wait_async()
377 fprintf(stderr, "Error adding match rule: %s\n", strerror(-r)); in mapper_wait_async()
381 r = sd_bus_add_match(conn, &wait->intf_slot, in mapper_wait_async()
384 if (r < 0) in mapper_wait_async()
386 fprintf(stderr, "Error adding match rule: %s\n", strerror(-r)); in mapper_wait_async()
390 r = async_wait_get_objects(wait); in mapper_wait_async()
391 if (r < 0) in mapper_wait_async()
393 fprintf(stderr, "Error calling method: %s\n", strerror(-r)); in mapper_wait_async()
402 sd_bus_slot_unref(wait->intf_slot); in mapper_wait_async()
404 sd_bus_slot_unref(wait->introspection_slot); in mapper_wait_async()
406 free(wait->status); in mapper_wait_async()
408 sarrayfree(wait->objs); in mapper_wait_async()
412 return r; in mapper_wait_async()
418 int r; in async_subtree_timeout_callback() local
421 sd_event_source_unref(subtree->event_source); in async_subtree_timeout_callback()
422 r = sd_bus_call_method_async( in async_subtree_timeout_callback()
423 subtree->conn, NULL, "xyz.openbmc_project.ObjectMapper", in async_subtree_timeout_callback()
426 async_subtree_getpaths_callback, subtree, "sias", subtree->namespace, 0, in async_subtree_timeout_callback()
427 1, subtree->interface); in async_subtree_timeout_callback()
428 if (r < 0) in async_subtree_timeout_callback()
430 async_subtree_done(r, subtree); in async_subtree_timeout_callback()
439 int r; in async_subtree_getpaths_callback() local
443 if (subtree->finished) in async_subtree_getpaths_callback()
448 r = sd_bus_message_get_errno(m); in async_subtree_getpaths_callback()
453 if (subtree->op == MAPPER_OP_REMOVE) in async_subtree_getpaths_callback()
455 r = 0; in async_subtree_getpaths_callback()
463 if ((r == EBUSY || r == ENOBUFS) && subtree->retry < mapper_busy_retries) in async_subtree_getpaths_callback()
465 r = sd_event_now(subtree->loop, CLOCK_MONOTONIC, &next_retry); in async_subtree_getpaths_callback()
466 if (r < 0) in async_subtree_getpaths_callback()
468 async_subtree_done(r, subtree); in async_subtree_getpaths_callback()
472 next_retry += mapper_busy_delay_interval_usec * (1 << subtree->retry); in async_subtree_getpaths_callback()
473 r = sd_event_add_time(subtree->loop, &subtree->event_source, in async_subtree_getpaths_callback()
476 ++subtree->retry; in async_subtree_getpaths_callback()
477 if (r < 0) in async_subtree_getpaths_callback()
479 async_subtree_done(r, subtree); in async_subtree_getpaths_callback()
486 if (r) in async_subtree_getpaths_callback()
488 async_subtree_done(-r, subtree); in async_subtree_getpaths_callback()
492 if (subtree->op == MAPPER_OP_REMOVE) in async_subtree_getpaths_callback()
494 r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, "s"); in async_subtree_getpaths_callback()
495 if (r < 0) in async_subtree_getpaths_callback()
497 async_subtree_done(r, subtree); in async_subtree_getpaths_callback()
501 r = sd_bus_message_at_end(m, false); in async_subtree_getpaths_callback()
502 if (r < 0) in async_subtree_getpaths_callback()
504 async_subtree_done(r, subtree); in async_subtree_getpaths_callback()
511 if (r) in async_subtree_getpaths_callback()
521 int r = 0; in async_subtree_getpaths() local
523 subtree->retry = 0; in async_subtree_getpaths()
524 subtree->event_source = NULL; in async_subtree_getpaths()
525 r = sd_bus_call_method_async( in async_subtree_getpaths()
526 subtree->conn, NULL, "xyz.openbmc_project.ObjectMapper", in async_subtree_getpaths()
529 async_subtree_getpaths_callback, subtree, "sias", subtree->namespace, 0, in async_subtree_getpaths()
530 1, subtree->interface); in async_subtree_getpaths()
531 if (r < 0) in async_subtree_getpaths()
533 fprintf(stderr, "Error invoking method: %s\n", strerror(-r)); in async_subtree_getpaths()
534 return r; in async_subtree_getpaths()
543 int r; in async_subtree_match_callback() local
546 if (subtree->finished) in async_subtree_match_callback()
551 r = async_subtree_getpaths(subtree); in async_subtree_match_callback()
552 if (r < 0) in async_subtree_match_callback()
554 async_subtree_done(r, subtree); in async_subtree_match_callback()
560 static void async_subtree_done(int r, mapper_async_subtree* t) in async_subtree_done() argument
562 if (t->finished) in async_subtree_done()
567 t->finished = 1; in async_subtree_done()
568 sd_bus_slot_unref(t->slot); in async_subtree_done()
570 if (t->callback) in async_subtree_done()
572 t->callback(r, t->userdata); in async_subtree_done()
581 int r = 0; in mapper_subtree_async() local
587 return -ENOMEM; in mapper_subtree_async()
591 subtree->conn = conn; in mapper_subtree_async()
592 subtree->loop = loop; in mapper_subtree_async()
593 subtree->namespace = namespace; in mapper_subtree_async()
594 subtree->interface = interface; in mapper_subtree_async()
595 subtree->callback = callback; in mapper_subtree_async()
596 subtree->userdata = userdata; in mapper_subtree_async()
597 subtree->op = op; in mapper_subtree_async()
599 if (subtree->op == MAPPER_OP_REMOVE) in mapper_subtree_async()
601 r = sd_bus_add_match(conn, &subtree->slot, interfaces_removed_match, in mapper_subtree_async()
603 if (r < 0) in mapper_subtree_async()
605 fprintf(stderr, "Error adding match rule: %s\n", strerror(-r)); in mapper_subtree_async()
612 r = -EINVAL; in mapper_subtree_async()
616 r = async_subtree_getpaths(subtree); in mapper_subtree_async()
617 if (r < 0) in mapper_subtree_async()
619 fprintf(stderr, "Error calling method: %s\n", strerror(-r)); in mapper_subtree_async()
628 sd_bus_slot_unref(subtree->slot); in mapper_subtree_async()
632 return r; in mapper_subtree_async()
639 int r, retry = 0; in mapper_get_object() local
641 r = sd_bus_message_new_method_call( in mapper_get_object()
645 if (r < 0) in mapper_get_object()
650 r = sd_bus_message_append(request, "s", obj); in mapper_get_object()
651 if (r < 0) in mapper_get_object()
655 r = sd_bus_message_append(request, "as", 0, NULL); in mapper_get_object()
656 if (r < 0) in mapper_get_object()
663 r = sd_bus_call(conn, request, 0, NULL, reply); in mapper_get_object()
664 if (r == -EBUSY || r == -ENOBUFS) in mapper_get_object()
676 if (r < 0) in mapper_get_object()
684 return r; in mapper_get_object()
691 int r; in mapper_get_service() local
693 r = mapper_get_object(conn, obj, &reply); in mapper_get_service()
694 if (r < 0) in mapper_get_service()
699 r = sd_bus_message_enter_container(reply, 0, NULL); in mapper_get_service()
700 if (r < 0) in mapper_get_service()
705 r = sd_bus_message_enter_container(reply, 0, NULL); in mapper_get_service()
706 if (r < 0) in mapper_get_service()
711 r = sd_bus_message_read(reply, "s", &tmp); in mapper_get_service()
712 if (r < 0) in mapper_get_service()
722 return r; in mapper_get_service()