API/Client: Use nested scope for JSON handling
authorWook Song <wook16.song@samsung.com>
Mon, 22 May 2023 08:06:17 +0000 (17:06 +0900)
committerjaeyun-jung <39614140+jaeyun-jung@users.noreply.github.com>
Thu, 1 Jun 2023 05:33:11 +0000 (14:33 +0900)
This is a trivial patch for code cleaning. Toward better readability,
nested scope and g_auto* are used for JSON handling.

Signed-off-by: Wook Song <wook16.song@samsung.com>
c/src/ml-api-service-agent-client.c

index 138644e..9454a66 100644 (file)
@@ -497,7 +497,6 @@ int
 ml_service_model_activate (const char *name, const unsigned int version)
 {
   int ret = ML_ERROR_NONE;
-
   GError *err = NULL;
 
   check_feature_state (ML_FEATURE_SERVICE);
@@ -530,17 +529,9 @@ ml_service_model_get (const char *name, const unsigned int version,
     ml_option_h * info)
 {
   int ret = ML_ERROR_NONE;
-
   ml_option_h _info = NULL;
   GError *err = NULL;
-  gchar *description = NULL;
-
-  JsonParser *parser = NULL;
-  JsonObjectIter iter;
-  JsonNode *root_node;
-  JsonNode *member_node;
-  const gchar *member_name;
-  JsonObject *j_object;
+  g_autofree gchar *description = NULL;
 
   check_feature_state (ML_FEATURE_SERVICE);
 
@@ -577,33 +568,43 @@ ml_service_model_get (const char *name, const unsigned int version,
   }
 
   /* fill ml_info */
-  parser = json_parser_new ();
-  if (!parser) {
-    _ml_error_report
-        ("Failed to allocate memory for JsonParser. Out of memory?");
-    ret = ML_ERROR_OUT_OF_MEMORY;
-    goto error;
-  }
+  {
+    const gchar *member_name;
+    g_autoptr (JsonParser) parser = NULL;
+    JsonNode *root_node;
+    JsonNode *member_node;
+    JsonObject *j_object;
+    JsonObjectIter iter;
 
-  if (!json_parser_load_from_data (parser, description, -1, &err)) {
-    _ml_error_report ("Failed to parse the json string. %s", err->message);
-    g_clear_error (&err);
-    ret = ML_ERROR_INVALID_PARAMETER;
-    goto error;
-  }
+    parser = json_parser_new ();
+    if (!parser) {
+      _ml_error_report
+          ("Failed to allocate memory for JsonParser. Out of memory?");
+      ret = ML_ERROR_OUT_OF_MEMORY;
+      goto error;
+    }
 
-  root_node = json_parser_get_root (parser);
-  if (!root_node) {
-    _ml_error_report ("Failed to get the root node of json string.");
-    ret = ML_ERROR_INVALID_PARAMETER;
-    goto error;
-  }
+    if (!json_parser_load_from_data (parser, description, -1, &err)) {
+      _ml_error_report ("Failed to parse the json string. %s", err->message);
+      g_clear_error (&err);
+      ret = ML_ERROR_INVALID_PARAMETER;
+      goto error;
+    }
+
+    root_node = json_parser_get_root (parser);
+    if (!root_node) {
+      _ml_error_report ("Failed to get the root node of json string.");
+      ret = ML_ERROR_INVALID_PARAMETER;
+      goto error;
+    }
 
-  j_object = json_node_get_object (root_node);
-  json_object_iter_init_ordered (&iter, j_object);
-  while (json_object_iter_next_ordered (&iter, &member_name, &member_node)) {
-    const gchar *value = json_object_get_string_member (j_object, member_name);
-    ml_option_set (_info, member_name, g_strdup (value), g_free);
+    j_object = json_node_get_object (root_node);
+    json_object_iter_init_ordered (&iter, j_object);
+    while (json_object_iter_next_ordered (&iter, &member_name, &member_node)) {
+      const gchar *value =
+          json_object_get_string_member (j_object, member_name);
+      ml_option_set (_info, member_name, g_strdup (value), g_free);
+    }
   }
 
   if (_parse_app_info_and_update_path (_info) != 0) {
@@ -615,11 +616,6 @@ ml_service_model_get (const char *name, const unsigned int version,
   *info = _info;
 
 error:
-  if (parser) {
-    g_object_unref (parser);
-  }
-  g_free (description);
-
   if (ret != ML_ERROR_NONE && _info) {
     ml_option_destroy (_info);
   }
@@ -638,12 +634,6 @@ ml_service_model_get_activated (const char *name, ml_option_h * info)
   ml_option_h _info = NULL;
   GError *err = NULL;
   g_autofree gchar *description = NULL;
-  g_autoptr (JsonParser) parser = NULL;
-  JsonObjectIter iter;
-  JsonNode *root_node;
-  JsonNode *member_node;
-  const gchar *member_name;
-  JsonObject *j_object;
 
   check_feature_state (ML_FEATURE_SERVICE);
 
@@ -680,33 +670,44 @@ ml_service_model_get_activated (const char *name, ml_option_h * info)
   }
 
   /* fill ml_info */
-  parser = json_parser_new ();
-  if (!parser) {
-    _ml_error_report
-        ("Failed to allocate memory for JsonParser. Out of memory?");
-    ret = ML_ERROR_OUT_OF_MEMORY;
-    goto error;
-  }
+  {
+    g_autoptr (JsonParser) parser = NULL;
+    JsonObjectIter iter;
+    JsonNode *root_node;
+    JsonNode *member_node;
+    const gchar *member_name;
+    JsonObject *j_object;
 
-  if (!json_parser_load_from_data (parser, description, -1, &err)) {
-    _ml_error_report ("Failed to parse the json string. %s", err->message);
-    g_clear_error (&err);
-    ret = ML_ERROR_INVALID_PARAMETER;
-    goto error;
-  }
+    parser = json_parser_new ();
+    if (!parser) {
+      _ml_error_report
+          ("Failed to allocate memory for JsonParser. Out of memory?");
+      ret = ML_ERROR_OUT_OF_MEMORY;
+      goto error;
+    }
 
-  root_node = json_parser_get_root (parser);
-  if (!root_node) {
-    _ml_error_report ("Failed to get the root node of json string.");
-    ret = ML_ERROR_INVALID_PARAMETER;
-    goto error;
-  }
+    if (!json_parser_load_from_data (parser, description, -1, &err)) {
+      _ml_error_report ("Failed to parse the json string. %s", err->message);
+      g_clear_error (&err);
+      ret = ML_ERROR_INVALID_PARAMETER;
+      goto error;
+    }
+
+    root_node = json_parser_get_root (parser);
+    if (!root_node) {
+      _ml_error_report ("Failed to get the root node of json string.");
+      ret = ML_ERROR_INVALID_PARAMETER;
+      goto error;
+    }
+
+    j_object = json_node_get_object (root_node);
+    json_object_iter_init_ordered (&iter, j_object);
+    while (json_object_iter_next_ordered (&iter, &member_name, &member_node)) {
+      const gchar *value =
+          json_object_get_string_member (j_object, member_name);
 
-  j_object = json_node_get_object (root_node);
-  json_object_iter_init_ordered (&iter, j_object);
-  while (json_object_iter_next_ordered (&iter, &member_name, &member_node)) {
-    const gchar *value = json_object_get_string_member (j_object, member_name);
-    ml_option_set (_info, member_name, g_strdup (value), g_free);
+      ml_option_set (_info, member_name, g_strdup (value), g_free);
+    }
   }
 
   if (_parse_app_info_and_update_path (_info) != 0) {
@@ -733,15 +734,11 @@ ml_service_model_get_all (const char *name, ml_option_h * info_list[],
     unsigned int *num)
 {
   int ret = ML_ERROR_NONE;
-
   ml_option_h *_info_list = NULL;
   GError *err = NULL;
-  gchar *description = NULL;
+  g_autofree gchar *description = NULL;
   guint i, n;
 
-  JsonParser *parser = NULL;
-  JsonArray *array;
-
   check_feature_state (ML_FEATURE_SERVICE);
 
   if (!name) {
@@ -773,80 +770,82 @@ ml_service_model_get_all (const char *name, ml_option_h * info_list[],
     goto error;
   }
 
-  parser = json_parser_new ();
-  if (!parser) {
-    _ml_error_report
-        ("Failed to allocate memory for JsonParser. Out of memory?");
-    ret = ML_ERROR_OUT_OF_MEMORY;
-    goto error;
-  }
+  {
+    g_autoptr (JsonParser) parser = NULL;
+    JsonArray *array;
 
-  if (!json_parser_load_from_data (parser, description, -1, &err)) {
-    _ml_error_report ("Failed to parse the json string. %s", err->message);
-    g_clear_error (&err);
-    ret = ML_ERROR_INVALID_PARAMETER;
-    goto error;
-  }
-
-  array = json_node_get_array (json_parser_get_root (parser));
-  if (!array) {
-    _ml_error_report ("Failed to get array from json string.");
-    ret = ML_ERROR_INVALID_PARAMETER;
-    goto error;
-  }
+    parser = json_parser_new ();
+    if (!parser) {
+      _ml_error_report
+          ("Failed to allocate memory for JsonParser. Out of memory?");
+      ret = ML_ERROR_OUT_OF_MEMORY;
+      goto error;
+    }
 
-  n = json_array_get_length (array);
-  if (n == 0U) {
-    _ml_error_report ("Failed to get array from json string.");
-    ret = ML_ERROR_INVALID_PARAMETER;
-    goto error;
-  }
+    if (!json_parser_load_from_data (parser, description, -1, &err)) {
+      _ml_error_report ("Failed to parse the json string. %s", err->message);
+      g_clear_error (&err);
+      ret = ML_ERROR_INVALID_PARAMETER;
+      goto error;
+    }
 
-  _info_list = g_try_new0 (ml_option_h, n);
-  if (!_info_list) {
-    _ml_error_report
-        ("Failed to allocate memory for list of ml_info_h. Out of memory?");
-    ret = ML_ERROR_OUT_OF_MEMORY;
-    goto error;
-  }
+    array = json_node_get_array (json_parser_get_root (parser));
+    if (!array) {
+      _ml_error_report ("Failed to get array from json string.");
+      ret = ML_ERROR_INVALID_PARAMETER;
+      goto error;
+    }
 
-  for (i = 0; i < n; i++) {
-    JsonObjectIter iter;
-    const gchar *member_name;
-    JsonNode *member_node;
-    JsonObject *object;
+    n = json_array_get_length (array);
+    if (n == 0U) {
+      _ml_error_report ("Failed to get array from json string.");
+      ret = ML_ERROR_INVALID_PARAMETER;
+      goto error;
+    }
 
-    if (ml_option_create (&_info_list[i]) != ML_ERROR_NONE) {
+    _info_list = g_try_new0 (ml_option_h, n);
+    if (!_info_list) {
       _ml_error_report
-          ("Failed to allocate memory for ml_option_h. Out of memory?");
-      n = i;
+          ("Failed to allocate memory for list of ml_info_h. Out of memory?");
       ret = ML_ERROR_OUT_OF_MEMORY;
       goto error;
     }
 
-    object = json_array_get_object_element (array, i);
-    json_object_iter_init_ordered (&iter, object);
-    while (json_object_iter_next_ordered (&iter, &member_name, &member_node)) {
-      const gchar *value = json_object_get_string_member (object, member_name);
-      ml_option_set (_info_list[i], member_name, g_strdup (value), g_free);
-    }
+    for (i = 0; i < n; i++) {
+      const gchar *member_name;
+      JsonObjectIter iter;
+      JsonNode *member_node;
+      JsonObject *object;
+
+      if (ml_option_create (&_info_list[i]) != ML_ERROR_NONE) {
+        _ml_error_report
+            ("Failed to allocate memory for ml_option_h. Out of memory?");
+        n = i;
+        ret = ML_ERROR_OUT_OF_MEMORY;
+        goto error;
+      }
 
-    if (_parse_app_info_and_update_path (_info_list[i]) != 0) {
-      _ml_error_report ("Failed to parse app_info and update path.");
-      ret = ML_ERROR_INVALID_PARAMETER;
-      goto error;
+      object = json_array_get_object_element (array, i);
+      json_object_iter_init_ordered (&iter, object);
+      while (json_object_iter_next_ordered (&iter, &member_name, &member_node)) {
+        const gchar *value =
+            json_object_get_string_member (object, member_name);
+        ml_option_set (_info_list[i], member_name, g_strdup (value), g_free);
+      }
+
+      if (_parse_app_info_and_update_path (_info_list[i]) != 0) {
+        _ml_error_report ("Failed to parse app_info and update path.");
+        ret = ML_ERROR_INVALID_PARAMETER;
+        goto error;
+      }
     }
   }
 
+
   *info_list = _info_list;
   *num = n;
 
 error:
-  if (parser) {
-    g_object_unref (parser);
-  }
-  g_free (description);
-
   if (ret != ML_ERROR_NONE) {
     if (_info_list) {
       for (i = 0; i < n; i++) {