diff options
Diffstat (limited to 'ahl-binding/ahl-binding.cpp')
-rw-r--r-- | ahl-binding/ahl-binding.cpp | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/ahl-binding/ahl-binding.cpp b/ahl-binding/ahl-binding.cpp index 6247371..8ac5b22 100644 --- a/ahl-binding/ahl-binding.cpp +++ b/ahl-binding/ahl-binding.cpp @@ -187,7 +187,6 @@ int ahl_binding_t::update_streams() { json_object* loaded = nullptr; json_object* response = nullptr; - size_t i = 0, j = 0; size_t hals_count = 0, streams_count = 0; if (afb_dynapi_call_sync(handle_, "4a-hal-manager", "loaded", json_object_new_object(), &loaded)) @@ -196,13 +195,18 @@ int ahl_binding_t::update_streams() if (loaded) AFB_DYNAPI_NOTICE(handle_, "%s", json_object_to_json_string(loaded)); return -1; } - response = json_object_object_get(loaded, "response"); + json_bool ret = json_object_object_get_ex(loaded, "response", &response); + if (!ret) + { + AFB_DYNAPI_ERROR(handle_, "Maformed response; missing 'response' field"); + return -1; + } hals_count = json_object_array_length(response); - for(i = 0; i < hals_count; ++i) + for(int i = 0; i < hals_count; ++i) { json_object* info = nullptr; - json_object* streams = nullptr; + const char* halname = json_object_get_string(json_object_array_get_idx(response, i)); AFB_DYNAPI_DEBUG(handle_, "Found an active HAL: %s", halname); @@ -213,14 +217,24 @@ int ahl_binding_t::update_streams() return -1; } - streams = json_object_object_get(json_object_object_get(info, "response"), "streams"); - streams_count = json_object_array_length(streams); - for(j = 0; j < streams_count; ++j) + json_object * responseJ = nullptr; + json_object_object_get_ex(info, "response", &responseJ); + + json_object* streamsJ = nullptr; + json_object_object_get_ex(responseJ, "streams", &streamsJ); + streams_count = json_object_array_length(streamsJ); + for(int j = 0; j < streams_count; ++j) { + json_object * nameJ = nullptr, * cardIdJ = nullptr; + json_object * streamJ = json_object_array_get_idx(streamsJ, j); + + json_object_object_get_ex(streamJ, "name", &nameJ); + json_object_object_get_ex(streamJ, "cardId", &cardIdJ); + update_stream( halname, - json_object_get_string(json_object_object_get(json_object_array_get_idx(streams, j), "name")), - json_object_get_string(json_object_object_get(json_object_array_get_idx(streams, j), "cardId")) + json_object_get_string(nameJ), + json_object_get_string(cardIdJ) ); } @@ -283,7 +297,7 @@ void ahl_binding_t::load_controller_configs() // Only one file should be found this way, but read all just in case size_t config_files_count = json_object_array_length(config_files); - for(size_t i = 0; i < config_files_count; ++i) + for(int i = 0; i < config_files_count; ++i) { config_entry_t file {json_object_array_get_idx(config_files, i)}; @@ -335,7 +349,7 @@ int ahl_binding_t::parse_roles_config(json_object* o) size_t count = json_object_array_length(o); roles_.reserve(count); - for(size_t i = 0; i < count; ++i) + for(int i = 0; i < count; ++i) { json_object* jr = json_object_array_get_idx(o, i); assert(jr != nullptr); |