static JsonObject *gphoto_parse_response(dt_gphoto_context_t *ctx, GString *response) { GError *error = NULL; gboolean ret = json_parser_load_from_data(ctx->json_parser, response->str, response->len, &error); if(ret) { JsonNode *root = json_parser_get_root(ctx->json_parser); // we should always have a dict g_return_val_if_fail((json_node_get_node_type(root) == JSON_NODE_OBJECT), NULL); JsonObject *rootdict = json_node_get_object(root); if(json_object_has_member(rootdict, "error")) { JsonObject *errorstruct = json_object_get_object_member(rootdict, "error"); g_return_val_if_fail((errorstruct != NULL), NULL); const gchar *errormessage = json_object_get_string_member(errorstruct, "message"); g_return_val_if_fail((errormessage != NULL), NULL); g_string_assign(ctx->errmsg, errormessage); return NULL; } return rootdict; } else // not a json response, can be the upload-token { ctx->response = g_string_new(response->str); return NULL; } }
static void skypeweb_got_self_details(SkypeWebAccount *sa, JsonNode *node, gpointer user_data) { JsonObject *userobj; const gchar *old_alias; const gchar *displayname = NULL; const gchar *username; if (node == NULL || json_node_get_node_type(node) != JSON_NODE_OBJECT) return; userobj = json_node_get_object(node); username = json_object_get_string_member(userobj, "username"); g_free(sa->username); sa->username = g_strdup(username); old_alias = purple_account_get_private_alias(sa->account); if (!old_alias || !*old_alias) { if (json_object_has_member(userobj, "displayname")) displayname = json_object_get_string_member(userobj, "displayname"); if (!displayname || g_str_equal(displayname, username)) displayname = json_object_get_string_member(userobj, "firstname"); if (displayname) purple_account_set_private_alias(sa->account, displayname); } if (!PURPLE_CONNECTION_IS_CONNECTED(sa->pc)) { skypeweb_do_all_the_things(sa); } }
static gboolean parse_emojione_element (JsonNode *node, EmojiData *data) { JsonObject *object; GList *members, *m; if (json_node_get_node_type (node) != JSON_NODE_OBJECT) { return FALSE; } reset_emoji_element (data); object = json_node_get_object (node); m = members = json_object_get_members (object); while (m) { const gchar *member = (const gchar *) m->data; if (!parse_emojione_emoji_data (json_object_get_member (object, member), member, data)) { g_list_free (members); return FALSE; } m = m->next; } g_list_free (members); update_emoji_dict (data); return TRUE; }
static gboolean parse_emojione_keywords (JsonNode *node, EmojiData *data) { #if 0 JsonArray *keywords; guint i, length; if (json_node_get_node_type (node) != JSON_NODE_ARRAY) { g_warning ("'keywords' element is not array"); return FALSE; } keywords = json_node_get_array (node); length = json_array_get_length (keywords); for (i = 0; i < length; i++) { const gchar *keyword = json_array_get_string_element (keywords, i); GSList *duplicated = g_slist_find_custom (data->annotations, keyword, (GCompareFunc) g_strcmp0); if (duplicated == NULL) { data->annotations = g_slist_prepend (data->annotations, g_strdup (keyword)); } } #endif return TRUE; }
static gboolean parse_emojione_category (JsonNode *node, EmojiData *data) { const gchar *category; GSList *duplicated; if (json_node_get_node_type (node) != JSON_NODE_VALUE) { g_warning ("'category' element is not string"); return FALSE; } category = json_node_get_string (node); if (category == NULL || *category == '\0') return TRUE; duplicated = g_slist_find_custom (data->annotations, category, (GCompareFunc) g_strcmp0); if (duplicated == NULL) { data->annotations = g_slist_prepend (data->annotations, g_strdup (category)); } return TRUE; }
static gboolean parse_emojione_aliases_ascii (JsonNode *node, EmojiData *data) { JsonArray *aliases_ascii; guint i, length; if (json_node_get_node_type (node) != JSON_NODE_ARRAY) { g_warning ("'aliases_ascii' element is not array"); return FALSE; } aliases_ascii = json_node_get_array (node); length = json_array_get_length (aliases_ascii); for (i = 0; i < length; i++) { const gchar *alias = json_array_get_string_element (aliases_ascii, i); GSList *duplicated = g_slist_find_custom (data->annotations, alias, (GCompareFunc) g_strcmp0); if (duplicated == NULL) { data->annotations = g_slist_prepend (data->annotations, g_strdup (alias)); } } return TRUE; }
static gboolean convert_metric_description (CockpitInternalMetrics *self, JsonNode *node, MetricInfo *info, int index) { const gchar *name; const gchar *units; if (json_node_get_node_type (node) == JSON_NODE_OBJECT) { if (!cockpit_json_get_string (json_node_get_object (node), "name", NULL, &name) || name == NULL) { g_warning ("invalid \"metrics\" option was specified (no name for metric %d)", index); return FALSE; } if (!cockpit_json_get_string (json_node_get_object (node), "units", NULL, &units)) { g_warning ("invalid units for metric %s (not a string)", name); return FALSE; } if (!cockpit_json_get_string (json_node_get_object (node), "derive", NULL, &info->derive)) { g_warning ("invalid derivation mode for metric %s (not a string)", name); return FALSE; } } else { g_warning ("invalid \"metrics\" option was specified (not an object for metric %d)", index); return FALSE; } MetricDescription *desc = find_metric_description (name); if (desc == NULL) { g_message ("unknown internal metric %s", name); } else { if (units && g_strcmp0 (desc->units, units) != 0) { g_warning ("%s has units %s, not %s", name, desc->units, units); return FALSE; } if (desc->instanced) info->instances = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); info->desc = desc; self->samplers |= desc->sampler; } return TRUE; }
static void skk_map_file_load_map (SkkMapFile* self, GeeMap* map, JsonObject* object) { JsonObject* _tmp0_; GList* _tmp1_ = NULL; GList* keys; GList* _tmp2_; g_return_if_fail (self != NULL); g_return_if_fail (map != NULL); g_return_if_fail (object != NULL); _tmp0_ = object; _tmp1_ = json_object_get_members (_tmp0_); keys = _tmp1_; _tmp2_ = keys; { GList* key_collection = NULL; GList* key_it = NULL; key_collection = _tmp2_; for (key_it = key_collection; key_it != NULL; key_it = key_it->next) { const gchar* key = NULL; key = (const gchar*) key_it->data; { JsonObject* _tmp3_; const gchar* _tmp4_; JsonNode* _tmp5_ = NULL; JsonNode* _tmp6_; JsonNode* value; JsonNode* _tmp7_; JsonNodeType _tmp8_ = 0; _tmp3_ = object; _tmp4_ = key; _tmp5_ = json_object_get_member (_tmp3_, _tmp4_); _tmp6_ = __vala_JsonNode_copy0 (_tmp5_); value = _tmp6_; _tmp7_ = value; _tmp8_ = json_node_get_node_type (_tmp7_); if (_tmp8_ == JSON_NODE_NULL) { GeeMap* _tmp9_; const gchar* _tmp10_; _tmp9_ = map; _tmp10_ = key; gee_map_unset (_tmp9_, _tmp10_, NULL); } else { GeeMap* _tmp11_; const gchar* _tmp12_; JsonNode* _tmp13_; _tmp11_ = map; _tmp12_ = key; _tmp13_ = value; gee_map_set (_tmp11_, _tmp12_, _tmp13_); } __vala_JsonNode_free0 (value); } } } _g_list_free0 (keys); }
static gboolean parse_emojione_shortname (JsonNode *node, EmojiData *data) { #if 0 const gchar *shortname; gchar *head, *s; int length; GSList *duplicated; if (json_node_get_node_type (node) != JSON_NODE_VALUE) { g_warning ("'shortname' element is not string"); return FALSE; } /* The format is ':short_name:' */ shortname = json_node_get_string (node); if (shortname == 0 || *shortname == '\0') return TRUE; if (*shortname != ':') { g_warning ("'shortname' format is different: %s", shortname); return FALSE; } length = strlen (shortname); head = g_new0 (gchar, length); strcpy (head, shortname + 1); for (s = head; *s; s++) { if (*s == ':') { *s = '\0'; break; } else if (*s == '_') { *s = ' '; } } if (head == NULL || *head == '\0') { g_warning ("'shortname' format is different: %s", shortname); g_free (head); return FALSE; } duplicated = g_slist_find_custom (data->annotations, head, (GCompareFunc) g_strcmp0); if (duplicated == NULL) { data->annotations = g_slist_prepend (data->annotations, head); } else { g_free (head); } #endif return TRUE; }
static void debug_print_json_node (char * msg, JsonNode * node) { g_assert (node != NULL); gchar * buffer; if (json_node_get_node_type (node) == JSON_NODE_VALUE) { buffer = g_strdup ( json_node_get_string (node) ); /* we should check number, boolean too */ } else { JsonGenerator *gen = json_generator_new(); json_generator_set_root (gen, node); buffer = json_generator_to_data (gen,NULL); g_object_unref (gen); } g_message("%s - Json Node of type %d: %s\n",msg, (gint)json_node_get_node_type (node), buffer); g_free (buffer); }
static void skypeweb_got_friend_profiles(SkypeWebAccount *sa, JsonNode *node, gpointer user_data) { JsonArray *contacts; PurpleBuddy *buddy; SkypeWebBuddy *sbuddy; gint index, length; if (node == NULL || json_node_get_node_type(node) != JSON_NODE_ARRAY) return; contacts = json_node_get_array(node); length = json_array_get_length(contacts); for(index = 0; index < length; index++) { JsonObject *contact = json_array_get_object_element(contacts, index); const gchar *username = json_object_get_string_member(contact, "username"); const gchar *new_avatar; buddy = purple_find_buddy(sa->account, username); if (!buddy) continue; sbuddy = purple_buddy_get_protocol_data(buddy); if (sbuddy == NULL) { sbuddy = g_new0(SkypeWebBuddy, 1); purple_buddy_set_protocol_data(buddy, sbuddy); sbuddy->skypename = g_strdup(username); sbuddy->sa = sa; } g_free(sbuddy->display_name); sbuddy->display_name = g_strdup(json_object_get_string_member(contact, "displayname")); purple_serv_got_alias(sa->pc, username, sbuddy->display_name); if (json_object_has_member(contact, "lastname")) { gchar *fullname = g_strconcat(json_object_get_string_member(contact, "firstname"), " ", json_object_get_string_member(contact, "lastname"), NULL); purple_blist_server_alias_buddy(buddy, fullname); g_free(fullname); } else { purple_blist_server_alias_buddy(buddy, json_object_get_string_member(contact, "firstname")); } new_avatar = json_object_get_string_member(contact, "avatarUrl"); if (new_avatar && *new_avatar && (!sbuddy->avatar_url || !g_str_equal(sbuddy->avatar_url, new_avatar))) { g_free(sbuddy->avatar_url); sbuddy->avatar_url = g_strdup(new_avatar); skypeweb_get_icon(buddy); } g_free(sbuddy->mood); sbuddy->mood = g_strdup(json_object_get_string_member(contact, "mood")); } }
static void skypeweb_got_object_for_file(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message) { SkypeWebFileTransfer *swft = user_data; SkypeWebAccount *sa = swft->sa; PurpleXfer *xfer = swft->xfer; JsonParser *parser; JsonNode *node; JsonObject *obj; gchar *id; sa->url_datas = g_slist_remove(sa->url_datas, url_data); //Get back {"id": "0-cus-d3-deadbeefdeadbeef012345678"} parser = json_parser_new(); if (!json_parser_load_from_data(parser, url_text, len, NULL)) { g_free(swft->from); g_free(swft); g_object_unref(parser); return; } node = json_parser_get_root(parser); if (node == NULL || json_node_get_node_type(node) != JSON_NODE_OBJECT) { g_free(swft->from); g_free(swft); g_object_unref(parser); purple_xfer_cancel_local(xfer); return; } obj = json_node_get_object(node); if (!json_object_has_member(obj, "id")) { g_free(swft->from); g_free(swft); g_object_unref(parser); purple_xfer_cancel_local(xfer); return; } swft->id = g_strdup(json_object_get_string_member(obj, "id")); swft->url = g_strconcat("https://" SKYPEWEB_XFER_HOST "/v1/objects/", purple_url_encode(swft->id), "/views/original/status", NULL); g_object_unref(parser); //Send the data //can't use fetch_url_request because it doesn't handle binary data //TODO make an error handler callback func purple_ssl_connect(sa->account, SKYPEWEB_XFER_HOST, 443, skypeweb_xfer_send_connect_cb, NULL, swft); //poll swft->url for progress purple_timeout_add_seconds(1, poll_file_send_progress, swft); }
static gboolean gs_plugin_odrs_load_ratings (GsPlugin *plugin, const gchar *fn, GError **error) { GsPluginData *priv = gs_plugin_get_data (plugin); GList *l; JsonNode *json_root; JsonObject *json_item; g_autoptr(GList) apps = NULL; g_autoptr(JsonParser) json_parser = NULL; /* remove all existing */ g_hash_table_remove_all (priv->ratings); /* parse the data and find the success */ json_parser = json_parser_new (); if (!json_parser_load_from_file (json_parser, fn, error)) { gs_utils_error_convert_json_glib (error); return FALSE; } json_root = json_parser_get_root (json_parser); if (json_root == NULL) { g_set_error_literal (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, "no ratings root"); return FALSE; } if (json_node_get_node_type (json_root) != JSON_NODE_OBJECT) { g_set_error_literal (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, "no ratings array"); return FALSE; } /* parse each app */ json_item = json_node_get_object (json_root); apps = json_object_get_members (json_item); for (l = apps; l != NULL; l = l->next) { const gchar *app_id = (const gchar *) l->data; JsonObject *json_app = json_object_get_object_member (json_item, app_id); g_autoptr(GArray) ratings = NULL;; ratings = gs_plugin_odrs_load_ratings_for_app (json_app); if (ratings->len == 6) { g_hash_table_insert (priv->ratings, g_strdup (app_id), g_array_ref (ratings)); } } return TRUE; }
static gboolean emojione_parse_json_file (const gchar *filename, GHashTable *dict) { JsonParser *parser = json_parser_new (); JsonNode *node; JsonObject *object; GList *members, *m; GError *error = NULL; EmojiData data = { 0, }; g_return_val_if_fail (filename != NULL, FALSE); g_return_val_if_fail (dict != NULL, FALSE); if (!json_parser_load_from_file (parser, filename, &error)) { g_error ("%s", error->message); g_error_free (error); goto fail_to_json_file; } node = json_parser_get_root (parser); if (json_node_get_node_type (node) != JSON_NODE_OBJECT) { g_warning ("Json file does not have Json object %s", filename); goto fail_to_json_file; } object = json_node_get_object (node); members = json_object_get_members (object); data.dict = dict; m = members; while (m) { const gchar *member = (const gchar *) m->data; if (!parse_emojione_element (json_object_get_member (object, member), &data)) { g_warning ("Failed to parse member '%s' in %s", member, filename); } m = m->next; } g_list_free (members); reset_emoji_element (&data); g_object_unref (parser); return TRUE; fail_to_json_file: g_object_unref (parser); return FALSE; }
static void foreach_object_cb (JsonObject *object, const char *member_name, JsonNode *member_node, gpointer user_data) { GSList **list = (GSList **) user_data; if (json_node_get_node_type (member_node) == JSON_NODE_OBJECT) { CouchdbStructField *sf; sf = couchdb_struct_field_new_from_json_object ( json_object_ref (json_node_get_object (member_node))); couchdb_struct_field_set_uuid (sf, member_name); *list = g_slist_prepend (*list, sf); } }
static void _iterate_json_object(JsonObject *object, const gchar *member_name, JsonNode *member_node, gpointer user_data) { GHashTable* params = user_data; if (json_node_get_node_type(member_node) != JSON_NODE_VALUE) return; if (json_node_get_value_type(member_node) == G_TYPE_STRING) g_hash_table_insert(params, g_strdup(member_name), g_strdup(json_node_get_string(member_node))); else if (json_node_get_value_type(member_node) == G_TYPE_INT64) g_hash_table_insert(params, g_strdup(member_name), g_strdup_printf("%"G_GINT64_FORMAT, json_node_get_int(member_node))); }
//Constructor. GobjectImplKeys::GobjectImplKeys(JsonNode* node):mKeys() { //Only object type json nodes have keys. if (json_node_get_node_type(node) == JSON_NODE_OBJECT) { JsonObject *asObject=json_node_get_object(node); if (asObject) { //get all propertis the object has. GList *members=json_object_get_members(asObject); if (members) { //Add each key to our vector. for (GList *member=members;member;member=member->next) { mKeys.push_back(std::string((char *) member->data)); } //Do some cleanup. g_list_free(members); } } } }
static void skypeweb_got_vm_download_info(SkypeWebAccount *sa, JsonNode *node, gpointer user_data) { PurpleConversation *conv = user_data; PurpleXfer *xfer; JsonObject *obj, *file; JsonArray *files; gint64 fileSize; const gchar *url, *assetId, *status; gchar *filename; if (node == NULL || json_node_get_node_type(node) != JSON_NODE_OBJECT) return; obj = json_node_get_object(node); files = json_object_get_array_member(obj, "files"); file = json_array_get_object_element(files, 0); if (file != NULL) { status = json_object_get_string_member(file, "status"); if (status && g_str_equal(status, "ok")) { assetId = json_object_get_string_member(obj, "assetId"); fileSize = json_object_get_int_member(file, "fileSize"); url = json_object_get_string_member(file, "url"); (void) url; filename = g_strconcat(assetId, ".mp4", NULL); xfer = purple_xfer_new(sa->account, PURPLE_XFER_RECEIVE, conv->name); purple_xfer_set_size(xfer, fileSize); purple_xfer_set_filename(xfer, filename); json_object_ref(file); purple_xfer_set_protocol_data(xfer, file); purple_xfer_set_init_fnc(xfer, skypeweb_init_vm_download); purple_xfer_set_cancel_recv_fnc(xfer, skypeweb_cancel_vm_download); purple_xfer_add(xfer); g_free(filename); } else if (status && g_str_equal(status, "running")) { //skypeweb_download_video_message(sa, sid??????, conv); } } }
static gboolean parse_emojione_unicode (JsonNode *node, EmojiData *data) { const gchar *str, *unicode; gchar *endptr = NULL; guint32 uch; static gchar outbuf[8] = { 0, }; GString *emoji; if (json_node_get_node_type (node) != JSON_NODE_VALUE) { g_warning ("'unicode' element is not string"); return FALSE; } emoji = g_string_new (NULL); str = unicode = json_node_get_string (node); while (str && *str) { uch = g_ascii_strtoull (str, &endptr, 16); outbuf[g_unichar_to_utf8 (uch, outbuf)] = '\0'; g_string_append (emoji, outbuf); if (*endptr == '\0') { break; } else { switch (*endptr) { case '-': endptr++; break; default: g_warning ("Failed to parse unicode %s", unicode); } } str = endptr; endptr = NULL; } data->emoji = g_string_free (emoji, FALSE); return TRUE; }
/* * For a given parent @node, get the child node called @name and return a copy * of the content, or NULL. If the content is the empty string, NULL is * returned. */ char * get_child_node_value (JsonNode *node, const char *name) { JsonNode *subnode; JsonObject *object; GValue value = {0}; const char *string; char *result = NULL; if (!node || !name) return NULL; if (json_node_get_node_type (node) == JSON_NODE_OBJECT) { object = json_node_get_object (node); } else { return NULL; } if (!json_object_has_member (object, name)) { return NULL; } subnode = json_object_get_member (object, name); if (!subnode) return NULL; json_node_get_value (subnode, &value); string = g_value_get_string (&value); if (string && string[0]) { result = g_strdup (string); } g_value_unset (&value); return result; }
static void skypeweb_got_vm_info(SkypeWebAccount *sa, JsonNode *node, gpointer user_data) { PurpleConversation *conv = user_data; JsonObject *obj, *response, *media_stream; const gchar *filename; if (node == NULL || json_node_get_node_type(node) != JSON_NODE_OBJECT) return; obj = json_node_get_object(node); response = json_object_get_object_member(obj, "response"); media_stream = json_object_get_object_member(response, "media_stream"); filename = json_object_get_string_member(media_stream, "filename"); if (filename != NULL) { // Need to keep retrying this url until it comes back with status:ok gchar *url = g_strdup_printf("/vod/api-create?assetId=%s&profile=mp4-vm", purple_url_encode(filename)); skypeweb_post_or_get(sa, SKYPEWEB_METHOD_GET | SKYPEWEB_METHOD_SSL, "media.vm.skype.com", url, NULL, skypeweb_got_vm_download_info, conv, TRUE); g_free(url); } }
void flist_web_request_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message) { FListWebRequestData *req_data = user_data; if(!url_text) { purple_debug_warning(FLIST_DEBUG, "Web Request failed with error message: %s\n", error_message); req_data->cb(req_data, req_data->user_data, NULL, error_message); } else { JsonParser *parser; JsonNode *root; GError *err = NULL; purple_debug_info(FLIST_DEBUG, "Web Request JSON Received: %s\n", url_text); parser = json_parser_new(); json_parser_load_from_data(parser, url_text, len, &err); if(err) { /* not valid json */ purple_debug_warning(FLIST_DEBUG, "Expected JSON Object, but did not parse with error message: %s\n", err->message); purple_debug_warning(FLIST_DEBUG, "Raw JSON: %s\n", url_text); req_data->cb(req_data, req_data->user_data, NULL, "Invalid JSON."); g_error_free(err); } else { root = json_parser_get_root(parser); if(json_node_get_node_type(root) != JSON_NODE_OBJECT) { purple_debug_warning(FLIST_DEBUG, "Expected JSON Object, but received a different node.\n"); purple_debug_warning(FLIST_DEBUG, "Raw JSON: %s\n", url_text); req_data->cb(req_data, req_data->user_data, NULL, "Invalid JSON."); } else { req_data->cb(req_data, req_data->user_data, json_node_get_object(root), NULL); } } g_object_unref(parser); } purple_timeout_remove(req_data->timer); g_free(req_data); }
/** * couchdb_struct_field_new_from_string: * @str: A JSON string * * Create a new struct field object, filling it with values taken from a string * representing a JSON object. * * Return value: A newly-created #CouchdbStructField object. */ CouchdbStructField * couchdb_struct_field_new_from_string (const char *str) { JsonParser *parser; GError *error = NULL; CouchdbStructField *sf = NULL; g_return_val_if_fail (str != NULL, NULL); parser = json_parser_new (); if (json_parser_load_from_data (parser, str, strlen (str), &error)) { JsonNode *node = json_parser_get_root (parser); if (json_node_get_node_type (node) == JSON_NODE_OBJECT) sf = couchdb_struct_field_new_from_json_object (json_node_get_object (node)); } else { g_warning ("Could not parse string: %s", error->message); g_error_free (error); } g_object_unref (G_OBJECT (parser)); return sf; }
/* See "man 5 passwd" We just make sure the name and uid/gid match, and that none are missing. don't care about GECOS/dir/shell. */ static gboolean rpmostree_check_passwd_groups (gboolean passwd, OstreeRepo *repo, GFile *yumroot, GFile *treefile_dirpath, JsonObject *treedata, const char *previous_commit, GCancellable *cancellable, GError **error) { gboolean ret = FALSE; const char *direct = NULL; const char *chk_type = "previous"; const char *commit_filepath = passwd ? "usr/lib/passwd" : "usr/lib/group"; const char *json_conf_name = passwd ? "check-passwd" : "check-groups"; const char *json_conf_ign = passwd ? "ignore-removed-users" : "ignore-removed-groups"; g_autoptr(GFile) old_path = NULL; g_autoptr(GFile) new_path = g_file_resolve_relative_path (yumroot, commit_filepath); g_autoptr(GPtrArray) ignore_removed_ents = NULL; gboolean ignore_all_removed = FALSE; g_autofree char *old_contents = NULL; g_autofree char *new_contents = NULL; g_autoptr(GPtrArray) old_ents = NULL; g_autoptr(GPtrArray) new_ents = NULL; unsigned int oiter = 0; unsigned int niter = 0; if (json_object_has_member (treedata, json_conf_name)) { JsonObject *chk = json_object_get_object_member (treedata,json_conf_name); if (!chk) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "%s is not an object", json_conf_name); goto out; } chk_type = _rpmostree_jsonutil_object_require_string_member (chk, "type", error); if (!chk_type) goto out; if (g_str_equal (chk_type, "none")) { ret = TRUE; goto out; } else if (g_str_equal (chk_type, "file")) { direct = _rpmostree_jsonutil_object_require_string_member (chk, "filename", error); if (!direct) goto out; } else if (g_str_equal (chk_type, "data")) { JsonNode *ents_node = json_object_get_member (chk, "entries"); JsonObject *ents_obj = NULL; GList *ents; GList *iter; if (!ents_node) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "No entries member for data in %s", json_conf_name); goto out; } ents_obj = json_node_get_object (ents_node); if (passwd) old_ents = g_ptr_array_new_with_free_func (conv_passwd_ent_free); else old_ents = g_ptr_array_new_with_free_func (conv_group_ent_free); ents = json_object_get_members (ents_obj); for (iter = ents; iter; iter = iter->next) if (passwd) { const char *name = iter->data; JsonNode *val = json_object_get_member (ents_obj, name); JsonNodeType child_type = json_node_get_node_type (val); gint64 uid = 0; gint64 gid = 0; struct conv_passwd_ent *convent = g_new (struct conv_passwd_ent, 1); if (child_type != JSON_NODE_ARRAY) { if (!_rpmostree_jsonutil_object_require_int_member (ents_obj, name, &uid, error)) goto out; gid = uid; } else { JsonArray *child_array = json_node_get_array (val); guint len = json_array_get_length (child_array); if (!len || (len > 2)) { g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Array %s is only for uid and gid. Has length %u", name, len); goto out; } if (!_rpmostree_jsonutil_array_require_int_element (child_array, 0, &uid, error)) goto out; if (len == 1) gid = uid; else if (!_rpmostree_jsonutil_array_require_int_element (child_array, 1, &gid, error)) goto out; } convent->name = g_strdup (name); convent->uid = uid; convent->gid = gid; g_ptr_array_add (old_ents, convent); } else { const char *name = iter->data; gint64 gid = 0; struct conv_group_ent *convent = g_new (struct conv_group_ent, 1); if (!_rpmostree_jsonutil_object_require_int_member (ents_obj, name, &gid, error)) goto out; convent->name = g_strdup (name); convent->gid = gid; g_ptr_array_add (old_ents, convent); } }
/** * json_reader_read_element: * @reader: a #JsonReader * @index_: the index of the element * * Advances the cursor of @reader to the element @index_ of the array * or the object at the current position. * * You can use the json_reader_get_value* family of functions to retrieve * the value of the element; for instance: * * |[ * json_reader_read_element (reader, 0); * int_value = json_reader_get_int_value (reader); * ]| * * After reading the value, json_reader_end_element() should be called to * reposition the cursor inside the #JsonReader, e.g.: * * |[ * json_reader_read_element (reader, 1); * str_value = json_reader_get_string_value (reader); * json_reader_end_element (reader); * * json_reader_read_element (reader, 2); * str_value = json_reader_get_string_value (reader); * json_reader_end_element (reader); * ]| * * If @reader is not currently on an array or an object, or if the @index_ is * bigger than the size of the array or the object, the #JsonReader will be * put in an error state until json_reader_end_element() is called. * * Return value: %TRUE on success, and %FALSE otherwise * * Since: 0.12 */ gboolean json_reader_read_element (JsonReader *reader, guint index_) { JsonReaderPrivate *priv; g_return_val_if_fail (JSON_READER (reader), FALSE); json_reader_return_val_if_error_set (reader, FALSE); priv = reader->priv; if (priv->current_node == NULL) priv->current_node = priv->root; if (!(JSON_NODE_HOLDS_ARRAY (priv->current_node) || JSON_NODE_HOLDS_OBJECT (priv->current_node))) return json_reader_set_error (reader, JSON_READER_ERROR_NO_ARRAY, "The current node is of type '%s', but " "an array or an object was expected.", json_node_type_name (priv->current_node)); switch (json_node_get_node_type (priv->current_node)) { case JSON_NODE_ARRAY: { JsonArray *array = json_node_get_array (priv->current_node); if (index_ >= json_array_get_length (array)) return json_reader_set_error (reader, JSON_READER_ERROR_INVALID_INDEX, "The index '%d' is greater than the size " "of the array at the current position.", index_); priv->previous_node = priv->current_node; priv->current_node = json_array_get_element (array, index_); } break; case JSON_NODE_OBJECT: { JsonObject *object = json_node_get_object (priv->current_node); GList *members; const gchar *name; if (index_ >= json_object_get_size (object)) return json_reader_set_error (reader, JSON_READER_ERROR_INVALID_INDEX, "The index '%d' is greater than the size " "of the object at the current position.", index_); priv->previous_node = priv->current_node; g_free (priv->current_member); members = json_object_get_members (object); name = g_list_nth_data (members, index_); priv->current_node = json_object_get_member (object, name); priv->current_member = g_strdup (name); g_list_free (members); } break; default: g_assert_not_reached (); return FALSE; } return TRUE; }
gboolean json_deserialize_pspec (GValue *value, GParamSpec *pspec, JsonNode *node) { GValue node_value = { 0, }; gboolean retval = FALSE; if (G_TYPE_FUNDAMENTAL (G_VALUE_TYPE (value)) == G_TYPE_BOXED) { JsonNodeType node_type = json_node_get_node_type (node); GType boxed_type = G_VALUE_TYPE (value); if (json_boxed_can_deserialize (boxed_type, node_type)) { gpointer boxed = json_boxed_deserialize (boxed_type, node); g_value_take_boxed (value, boxed); return TRUE; } } switch (JSON_NODE_TYPE (node)) { case JSON_NODE_OBJECT: if (g_type_is_a (G_VALUE_TYPE (value), G_TYPE_OBJECT)) { GObject *object; object = json_gobject_new (G_VALUE_TYPE (value), json_node_get_object (node)); if (object != NULL) g_value_take_object (value, object); else g_value_set_object (value, NULL); retval = TRUE; } break; case JSON_NODE_ARRAY: if (G_VALUE_HOLDS (value, G_TYPE_STRV)) { JsonArray *array = json_node_get_array (node); guint i, array_len = json_array_get_length (array); GPtrArray *str_array = g_ptr_array_sized_new (array_len + 1); for (i = 0; i < array_len; i++) { JsonNode *val = json_array_get_element (array, i); if (JSON_NODE_TYPE (val) != JSON_NODE_VALUE) continue; if (json_node_get_string (val) != NULL) g_ptr_array_add (str_array, (gpointer) json_node_get_string (val)); } g_ptr_array_add (str_array, NULL); g_value_set_boxed (value, str_array->pdata); g_ptr_array_free (str_array, TRUE); retval = TRUE; } break; case JSON_NODE_VALUE: json_node_get_value (node, &node_value); #if 0 { gchar *node_str = g_strdup_value_contents (&node_value); g_debug ("%s: value type '%s' := node value type '%s' -> '%s'", G_STRLOC, g_type_name (G_VALUE_TYPE (value)), g_type_name (G_VALUE_TYPE (&node_value)), node_str); g_free (node_str); } #endif switch (G_TYPE_FUNDAMENTAL (G_VALUE_TYPE (value))) { case G_TYPE_BOOLEAN: case G_TYPE_INT64: case G_TYPE_STRING: if (G_VALUE_HOLDS (&node_value, G_VALUE_TYPE (value))) { g_value_copy (&node_value, value); retval = TRUE; } break; case G_TYPE_INT: if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) { g_value_set_int (value, (gint) g_value_get_int64 (&node_value)); retval = TRUE; } break; case G_TYPE_CHAR: if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) { g_value_set_schar (value, (gchar) g_value_get_int64 (&node_value)); retval = TRUE; } break; case G_TYPE_UINT: if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) { g_value_set_uint (value, (guint) g_value_get_int64 (&node_value)); retval = TRUE; } break; case G_TYPE_UCHAR: if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) { g_value_set_uchar (value, (guchar) g_value_get_int64 (&node_value)); retval = TRUE; } break; case G_TYPE_LONG: if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) { g_value_set_long (value, (glong) g_value_get_int64 (&node_value)); retval = TRUE; } break; case G_TYPE_ULONG: if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) { g_value_set_ulong (value, (gulong) g_value_get_int64 (&node_value)); retval = TRUE; } break; case G_TYPE_UINT64: if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) { g_value_set_uint64 (value, (guint64) g_value_get_int64 (&node_value)); retval = TRUE; } break; case G_TYPE_DOUBLE: if (G_VALUE_HOLDS (&node_value, G_TYPE_DOUBLE)) { g_value_set_double (value, g_value_get_double (&node_value)); retval = TRUE; } else if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) { g_value_set_double (value, (gdouble) g_value_get_int64 (&node_value)); retval = TRUE; } break; case G_TYPE_FLOAT: if (G_VALUE_HOLDS (&node_value, G_TYPE_DOUBLE)) { g_value_set_float (value, (gfloat) g_value_get_double (&node_value)); retval = TRUE; } else if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) { g_value_set_float (value, (gfloat) g_value_get_int64 (&node_value)); retval = TRUE; } break; case G_TYPE_ENUM: { gint enum_value = 0; if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) { enum_value = g_value_get_int64 (&node_value); retval = TRUE; } else if (G_VALUE_HOLDS (&node_value, G_TYPE_STRING)) { retval = enum_from_string (G_VALUE_TYPE (value), g_value_get_string (&node_value), &enum_value); } if (retval) g_value_set_enum (value, enum_value); } break; case G_TYPE_FLAGS: { gint flags_value = 0; if (G_VALUE_HOLDS (&node_value, G_TYPE_INT64)) { flags_value = g_value_get_int64 (&node_value); retval = TRUE; } else if (G_VALUE_HOLDS (&node_value, G_TYPE_STRING)) { retval = flags_from_string (G_VALUE_TYPE (value), g_value_get_string (&node_value), &flags_value); } if (retval) g_value_set_flags (value, flags_value); } break; default: retval = FALSE; break; } g_value_unset (&node_value); break; case JSON_NODE_NULL: if (G_TYPE_FUNDAMENTAL (G_VALUE_TYPE (value)) == G_TYPE_STRING) { g_value_set_string (value, NULL); retval = TRUE; } else if (G_TYPE_FUNDAMENTAL (G_VALUE_TYPE (value)) == G_TYPE_OBJECT) { g_value_set_object (value, NULL); retval = TRUE; } else retval = FALSE; break; } return retval; }
static gboolean gs_plugin_odrs_parse_success (const gchar *data, gssize data_len, GError **error) { JsonNode *json_root; JsonObject *json_item; const gchar *msg = NULL; g_autoptr(JsonParser) json_parser = NULL; /* nothing */ if (data == NULL) { g_set_error_literal (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, "server returned no data"); return FALSE; } /* parse the data and find the success */ json_parser = json_parser_new (); if (!json_parser_load_from_data (json_parser, data, data_len, error)) { gs_utils_error_convert_json_glib (error); return FALSE; } json_root = json_parser_get_root (json_parser); if (json_root == NULL) { g_set_error_literal (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, "no error root"); return FALSE; } if (json_node_get_node_type (json_root) != JSON_NODE_OBJECT) { g_set_error_literal (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, "no error object"); return FALSE; } json_item = json_node_get_object (json_root); if (json_item == NULL) { g_set_error_literal (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, "no error object"); return FALSE; } /* failed? */ if (json_object_has_member (json_item, "msg")) msg = json_object_get_string_member (json_item, "msg"); if (!json_object_get_boolean_member (json_item, "success")) { g_set_error_literal (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, msg != NULL ? msg : "unknown failure"); return FALSE; } /* just for the console */ if (msg != NULL) g_debug ("success: %s", msg); return TRUE; }
static GPtrArray * gs_plugin_odrs_parse_reviews (GsPlugin *plugin, const gchar *data, gssize data_len, GError **error) { JsonArray *json_reviews; JsonNode *json_root; guint i; g_autoptr(JsonParser) json_parser = NULL; g_autoptr(GPtrArray) reviews = NULL; /* nothing */ if (data == NULL) { g_set_error_literal (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, "server returned no data"); return NULL; } /* parse the data and find the array or ratings */ json_parser = json_parser_new (); if (!json_parser_load_from_data (json_parser, data, data_len, error)) { gs_utils_error_convert_json_glib (error); return NULL; } json_root = json_parser_get_root (json_parser); if (json_root == NULL) { g_set_error_literal (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, "no root"); return NULL; } if (json_node_get_node_type (json_root) != JSON_NODE_ARRAY) { g_set_error_literal (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, "no array"); return NULL; } /* parse each rating */ reviews = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref); json_reviews = json_node_get_array (json_root); for (i = 0; i < json_array_get_length (json_reviews); i++) { JsonNode *json_review; JsonObject *json_item; g_autoptr(AsReview) review = NULL; /* extract the data */ json_review = json_array_get_element (json_reviews, i); if (json_node_get_node_type (json_review) != JSON_NODE_OBJECT) { g_set_error_literal (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, "no object type"); return NULL; } json_item = json_node_get_object (json_review); if (json_item == NULL) { g_set_error_literal (error, GS_PLUGIN_ERROR, GS_PLUGIN_ERROR_INVALID_FORMAT, "no object"); return NULL; } /* create review */ review = gs_plugin_odrs_parse_review_object (plugin, json_item); g_ptr_array_add (reviews, g_object_ref (review)); } return g_steal_pointer (&reviews); }
static gboolean parse_json (GssAdaptive * adaptive, JsonParser * parser, const char *dir, const char *requested_version) { JsonNode *node; JsonObject *obj; JsonNode *n; JsonArray *version_array; int version; int len; int i; g_return_val_if_fail (adaptive != NULL, FALSE); g_return_val_if_fail (parser != NULL, FALSE); g_return_val_if_fail (dir != NULL, FALSE); node = json_parser_get_root (parser); obj = json_node_get_object (node); n = json_object_get_member (obj, "manifest_version"); version = json_node_get_int (n); if (version != 0) { GST_ERROR ("bad version %d", version); return FALSE; } n = json_object_get_member (obj, "versions"); version_array = json_node_get_array (n); len = json_array_get_length (version_array); for (i = 0; i < len; i++) { JsonArray *files_array; int files_len; const char *version_string; int j; n = json_array_get_element (version_array, i); if (n == NULL) return FALSE; obj = json_node_get_object (n); if (obj == NULL) return FALSE; n = json_object_get_member (obj, "version"); if (n == NULL) return FALSE; version_string = json_node_get_string (n); if (version_string == NULL) return FALSE; if (strcmp (version_string, requested_version) != 0) continue; n = json_object_get_member (obj, "files"); if (n == NULL) return FALSE; files_array = json_node_get_array (n); if (files_array == NULL) return FALSE; files_len = json_array_get_length (files_array); if (files_len == 0) return FALSE; for (j = 0; j < files_len; j++) { const char *filename; char *full_fn; n = json_array_get_element (files_array, j); if (n == NULL) return FALSE; if (json_node_get_node_type (n) == JSON_NODE_OBJECT) { obj = json_node_get_object (n); if (obj) { n = json_object_get_member (obj, "filename"); if (n == NULL) return FALSE; } } filename = json_node_get_string (n); if (filename == NULL) return FALSE; full_fn = g_strdup_printf ("%s/%s", dir, filename); load_file (adaptive, full_fn); g_free (full_fn); } return TRUE; } GST_ERROR ("requested version not found: %s", requested_version); return FALSE; }
static void skk_map_file_load (SkkMapFile* self, const gchar* rule, const gchar* type, const gchar* name, GeeSet* included, GError** error) { const gchar* _tmp0_; SkkRuleMetadata* _tmp1_ = NULL; SkkRuleMetadata* metadata; SkkRuleMetadata* _tmp2_; SkkRuleMetadata* _tmp5_; const gchar* _tmp6_; const gchar* _tmp7_; const gchar* _tmp8_; gchar* _tmp9_; gchar* _tmp10_; gchar* _tmp11_ = NULL; gchar* _tmp12_; gchar* filename; const gchar* _tmp13_; gboolean _tmp14_ = FALSE; JsonParser* _tmp17_; JsonParser* parser; JsonParser* _tmp30_; JsonNode* _tmp31_ = NULL; JsonNode* _tmp32_; JsonNode* root; JsonNode* _tmp33_; JsonNodeType _tmp34_ = 0; JsonNode* _tmp36_; JsonObject* _tmp37_ = NULL; JsonObject* _tmp38_; JsonObject* object; JsonNode* member = NULL; JsonObject* _tmp39_; gboolean _tmp40_ = FALSE; JsonObject* _tmp83_; gboolean _tmp84_ = FALSE; GError * _inner_error_ = NULL; g_return_if_fail (self != NULL); g_return_if_fail (rule != NULL); g_return_if_fail (type != NULL); g_return_if_fail (name != NULL); g_return_if_fail (included != NULL); _tmp0_ = rule; _tmp1_ = skk_rule_find_rule (_tmp0_); metadata = _tmp1_; _tmp2_ = metadata; if (_tmp2_ == NULL) { const gchar* _tmp3_; GError* _tmp4_; _tmp3_ = rule; _tmp4_ = g_error_new (SKK_RULE_PARSE_ERROR, SKK_RULE_PARSE_ERROR_FAILED, "can't find rule %s", _tmp3_); _inner_error_ = _tmp4_; if (_inner_error_->domain == SKK_RULE_PARSE_ERROR) { g_propagate_error (error, _inner_error_); _skk_rule_metadata_free0 (metadata); return; } else { _skk_rule_metadata_free0 (metadata); g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); return; } } _tmp5_ = metadata; _tmp6_ = (*_tmp5_).base_dir; _tmp7_ = type; _tmp8_ = name; _tmp9_ = g_strconcat (_tmp8_, ".json", NULL); _tmp10_ = _tmp9_; _tmp11_ = g_build_filename (_tmp6_, _tmp7_, _tmp10_, NULL); _tmp12_ = _tmp11_; _g_free0 (_tmp10_); filename = _tmp12_; _tmp13_ = filename; _tmp14_ = g_file_test (_tmp13_, G_FILE_TEST_EXISTS); if (!_tmp14_) { const gchar* _tmp15_; GError* _tmp16_; _tmp15_ = filename; _tmp16_ = g_error_new (SKK_RULE_PARSE_ERROR, SKK_RULE_PARSE_ERROR_FAILED, "no such file %s", _tmp15_); _inner_error_ = _tmp16_; if (_inner_error_->domain == SKK_RULE_PARSE_ERROR) { g_propagate_error (error, _inner_error_); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); return; } else { _g_free0 (filename); _skk_rule_metadata_free0 (metadata); g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); return; } } _tmp17_ = json_parser_new (); parser = _tmp17_; { JsonParser* _tmp18_; const gchar* _tmp19_; gboolean _tmp20_ = FALSE; gboolean _tmp21_; _tmp18_ = parser; _tmp19_ = filename; _tmp20_ = json_parser_load_from_file (_tmp18_, _tmp19_, &_inner_error_); _tmp21_ = _tmp20_; if (_inner_error_ != NULL) { goto __catch28_g_error; } if (!_tmp21_) { GError* _tmp22_; _tmp22_ = g_error_new_literal (SKK_RULE_PARSE_ERROR, SKK_RULE_PARSE_ERROR_FAILED, ""); _inner_error_ = _tmp22_; goto __catch28_g_error; } } goto __finally28; __catch28_g_error: { GError* e = NULL; const gchar* _tmp23_; GError* _tmp24_; const gchar* _tmp25_; gchar* _tmp26_ = NULL; gchar* _tmp27_; GError* _tmp28_; GError* _tmp29_; e = _inner_error_; _inner_error_ = NULL; _tmp23_ = filename; _tmp24_ = e; _tmp25_ = _tmp24_->message; _tmp26_ = g_strdup_printf ("can't load %s: %s", _tmp23_, _tmp25_); _tmp27_ = _tmp26_; _tmp28_ = g_error_new_literal (SKK_RULE_PARSE_ERROR, SKK_RULE_PARSE_ERROR_FAILED, _tmp27_); _tmp29_ = _tmp28_; _g_free0 (_tmp27_); _inner_error_ = _tmp29_; _g_error_free0 (e); goto __finally28; } __finally28: if (_inner_error_ != NULL) { if (_inner_error_->domain == SKK_RULE_PARSE_ERROR) { g_propagate_error (error, _inner_error_); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); return; } else { _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); return; } } _tmp30_ = parser; _tmp31_ = json_parser_get_root (_tmp30_); _tmp32_ = __vala_JsonNode_copy0 (_tmp31_); root = _tmp32_; _tmp33_ = root; _tmp34_ = json_node_get_node_type (_tmp33_); if (_tmp34_ != JSON_NODE_OBJECT) { GError* _tmp35_; _tmp35_ = g_error_new_literal (SKK_RULE_PARSE_ERROR, SKK_RULE_PARSE_ERROR_FAILED, "root element must be an object"); _inner_error_ = _tmp35_; if (_inner_error_->domain == SKK_RULE_PARSE_ERROR) { g_propagate_error (error, _inner_error_); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); return; } else { __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); return; } } _tmp36_ = root; _tmp37_ = json_node_get_object (_tmp36_); _tmp38_ = __vala_JsonObject_copy0 (_tmp37_); object = _tmp38_; _tmp39_ = object; _tmp40_ = json_object_has_member (_tmp39_, "include"); if (_tmp40_) { JsonObject* _tmp41_; JsonNode* _tmp42_ = NULL; JsonNode* _tmp43_; JsonNode* _tmp44_; JsonNodeType _tmp45_ = 0; JsonNode* _tmp47_; JsonArray* _tmp48_ = NULL; JsonArray* _tmp49_; JsonArray* include; JsonArray* _tmp50_; GList* _tmp51_ = NULL; GList* elements; GList* _tmp52_; _tmp41_ = object; _tmp42_ = json_object_get_member (_tmp41_, "include"); _tmp43_ = __vala_JsonNode_copy0 (_tmp42_); __vala_JsonNode_free0 (member); member = _tmp43_; _tmp44_ = member; _tmp45_ = json_node_get_node_type (_tmp44_); if (_tmp45_ != JSON_NODE_ARRAY) { GError* _tmp46_; _tmp46_ = g_error_new_literal (SKK_RULE_PARSE_ERROR, SKK_RULE_PARSE_ERROR_FAILED, "\"include\" element must be an array"); _inner_error_ = _tmp46_; if (_inner_error_->domain == SKK_RULE_PARSE_ERROR) { g_propagate_error (error, _inner_error_); __vala_JsonNode_free0 (member); __vala_JsonObject_free0 (object); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); return; } else { __vala_JsonNode_free0 (member); __vala_JsonObject_free0 (object); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); return; } } _tmp47_ = member; _tmp48_ = json_node_get_array (_tmp47_); _tmp49_ = __vala_JsonArray_copy0 (_tmp48_); include = _tmp49_; _tmp50_ = include; _tmp51_ = json_array_get_elements (_tmp50_); elements = _tmp51_; _tmp52_ = elements; { GList* element_collection = NULL; GList* element_it = NULL; element_collection = _tmp52_; for (element_it = element_collection; element_it != NULL; element_it = element_it->next) { JsonNode* element = NULL; element = (JsonNode*) element_it->data; { JsonNode* _tmp53_; const gchar* _tmp54_ = NULL; gchar* _tmp55_; gchar* parent; GeeSet* _tmp56_; const gchar* _tmp57_; gboolean _tmp58_ = FALSE; const gchar* _tmp61_; gint _tmp62_ = 0; gint index; gint _tmp63_; GeeSet* _tmp81_; const gchar* _tmp82_; _tmp53_ = element; _tmp54_ = json_node_get_string (_tmp53_); _tmp55_ = g_strdup (_tmp54_); parent = _tmp55_; _tmp56_ = included; _tmp57_ = parent; _tmp58_ = gee_collection_contains ((GeeCollection*) _tmp56_, _tmp57_); if (_tmp58_) { const gchar* _tmp59_; GError* _tmp60_; _tmp59_ = parent; _tmp60_ = g_error_new (SKK_RULE_PARSE_ERROR, SKK_RULE_PARSE_ERROR_FAILED, "found circular include of %s", _tmp59_); _inner_error_ = _tmp60_; if (_inner_error_->domain == SKK_RULE_PARSE_ERROR) { g_propagate_error (error, _inner_error_); _g_free0 (parent); _g_list_free0 (elements); __vala_JsonArray_free0 (include); __vala_JsonNode_free0 (member); __vala_JsonObject_free0 (object); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); return; } else { _g_free0 (parent); _g_list_free0 (elements); __vala_JsonArray_free0 (include); __vala_JsonNode_free0 (member); __vala_JsonObject_free0 (object); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); return; } } _tmp61_ = parent; _tmp62_ = string_index_of (_tmp61_, "/", 0); index = _tmp62_; _tmp63_ = index; if (_tmp63_ < 0) { const gchar* _tmp64_; const gchar* _tmp65_; const gchar* _tmp66_; GeeSet* _tmp67_; _tmp64_ = rule; _tmp65_ = type; _tmp66_ = parent; _tmp67_ = included; skk_map_file_load (self, _tmp64_, _tmp65_, _tmp66_, _tmp67_, &_inner_error_); if (_inner_error_ != NULL) { if (_inner_error_->domain == SKK_RULE_PARSE_ERROR) { g_propagate_error (error, _inner_error_); _g_free0 (parent); _g_list_free0 (elements); __vala_JsonArray_free0 (include); __vala_JsonNode_free0 (member); __vala_JsonObject_free0 (object); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); return; } else { _g_free0 (parent); _g_list_free0 (elements); __vala_JsonArray_free0 (include); __vala_JsonNode_free0 (member); __vala_JsonObject_free0 (object); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); return; } } } else { const gchar* _tmp68_; gint _tmp69_; gchar* _tmp70_ = NULL; gchar* _tmp71_; const gchar* _tmp72_; const gchar* _tmp73_; gint _tmp74_; const gchar* _tmp75_; gint _tmp76_; gint _tmp77_; gchar* _tmp78_ = NULL; gchar* _tmp79_; GeeSet* _tmp80_; _tmp68_ = parent; _tmp69_ = index; _tmp70_ = string_slice (_tmp68_, (glong) 0, (glong) _tmp69_); _tmp71_ = _tmp70_; _tmp72_ = type; _tmp73_ = parent; _tmp74_ = index; _tmp75_ = parent; _tmp76_ = strlen (_tmp75_); _tmp77_ = _tmp76_; _tmp78_ = string_slice (_tmp73_, (glong) (_tmp74_ + 1), (glong) _tmp77_); _tmp79_ = _tmp78_; _tmp80_ = included; skk_map_file_load (self, _tmp71_, _tmp72_, _tmp79_, _tmp80_, &_inner_error_); _g_free0 (_tmp79_); _g_free0 (_tmp71_); if (_inner_error_ != NULL) { if (_inner_error_->domain == SKK_RULE_PARSE_ERROR) { g_propagate_error (error, _inner_error_); _g_free0 (parent); _g_list_free0 (elements); __vala_JsonArray_free0 (include); __vala_JsonNode_free0 (member); __vala_JsonObject_free0 (object); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); return; } else { _g_free0 (parent); _g_list_free0 (elements); __vala_JsonArray_free0 (include); __vala_JsonNode_free0 (member); __vala_JsonObject_free0 (object); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); return; } } } _tmp81_ = included; _tmp82_ = parent; gee_collection_add ((GeeCollection*) _tmp81_, _tmp82_); _g_free0 (parent); } } } _g_list_free0 (elements); __vala_JsonArray_free0 (include); } _tmp83_ = object; _tmp84_ = json_object_has_member (_tmp83_, "define"); if (_tmp84_) { JsonObject* _tmp85_; JsonNode* _tmp86_ = NULL; JsonNode* _tmp87_; JsonNode* _tmp88_; JsonNodeType _tmp89_ = 0; JsonNode* _tmp91_; JsonObject* _tmp92_ = NULL; JsonObject* _tmp93_; JsonObject* define; JsonObject* _tmp94_; GList* _tmp95_ = NULL; GList* keys; GList* _tmp96_; _tmp85_ = object; _tmp86_ = json_object_get_member (_tmp85_, "define"); _tmp87_ = __vala_JsonNode_copy0 (_tmp86_); __vala_JsonNode_free0 (member); member = _tmp87_; _tmp88_ = member; _tmp89_ = json_node_get_node_type (_tmp88_); if (_tmp89_ != JSON_NODE_OBJECT) { GError* _tmp90_; _tmp90_ = g_error_new_literal (SKK_RULE_PARSE_ERROR, SKK_RULE_PARSE_ERROR_FAILED, "\"define\" element must be an object"); _inner_error_ = _tmp90_; if (_inner_error_->domain == SKK_RULE_PARSE_ERROR) { g_propagate_error (error, _inner_error_); __vala_JsonNode_free0 (member); __vala_JsonObject_free0 (object); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); return; } else { __vala_JsonNode_free0 (member); __vala_JsonObject_free0 (object); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); return; } } _tmp91_ = member; _tmp92_ = json_node_get_object (_tmp91_); _tmp93_ = __vala_JsonObject_copy0 (_tmp92_); define = _tmp93_; _tmp94_ = define; _tmp95_ = json_object_get_members (_tmp94_); keys = _tmp95_; _tmp96_ = keys; { GList* key_collection = NULL; GList* key_it = NULL; key_collection = _tmp96_; for (key_it = key_collection; key_it != NULL; key_it = key_it->next) { const gchar* key = NULL; key = (const gchar*) key_it->data; { GeeMap* _tmp97_; const gchar* _tmp98_; gboolean _tmp99_ = FALSE; JsonObject* _tmp104_; const gchar* _tmp105_; JsonNode* _tmp106_ = NULL; JsonNode* _tmp107_; JsonNode* _tmp108_; JsonNodeType _tmp109_ = 0; GeeMap* _tmp111_; const gchar* _tmp112_; gpointer _tmp113_ = NULL; GeeMap* _tmp114_; JsonNode* _tmp115_; JsonObject* _tmp116_ = NULL; _tmp97_ = self->priv->maps; _tmp98_ = key; _tmp99_ = gee_map_has_key (_tmp97_, _tmp98_); if (!_tmp99_) { GeeHashMap* _tmp100_; GeeHashMap* map; GeeMap* _tmp101_; const gchar* _tmp102_; GeeHashMap* _tmp103_; _tmp100_ = gee_hash_map_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, g_free, json_node_get_type (), (GBoxedCopyFunc) _vala_JsonNode_copy, _vala_JsonNode_free, NULL, NULL, NULL); map = _tmp100_; _tmp101_ = self->priv->maps; _tmp102_ = key; _tmp103_ = map; gee_map_set (_tmp101_, _tmp102_, (GeeMap*) _tmp103_); _g_object_unref0 (map); } _tmp104_ = define; _tmp105_ = key; _tmp106_ = json_object_get_member (_tmp104_, _tmp105_); _tmp107_ = __vala_JsonNode_copy0 (_tmp106_); __vala_JsonNode_free0 (member); member = _tmp107_; _tmp108_ = member; _tmp109_ = json_node_get_node_type (_tmp108_); if (_tmp109_ != JSON_NODE_OBJECT) { GError* _tmp110_; _tmp110_ = g_error_new_literal (SKK_RULE_PARSE_ERROR, SKK_RULE_PARSE_ERROR_FAILED, "map element must be an object"); _inner_error_ = _tmp110_; if (_inner_error_->domain == SKK_RULE_PARSE_ERROR) { g_propagate_error (error, _inner_error_); _g_list_free0 (keys); __vala_JsonObject_free0 (define); __vala_JsonNode_free0 (member); __vala_JsonObject_free0 (object); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); return; } else { _g_list_free0 (keys); __vala_JsonObject_free0 (define); __vala_JsonNode_free0 (member); __vala_JsonObject_free0 (object); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code); g_clear_error (&_inner_error_); return; } } _tmp111_ = self->priv->maps; _tmp112_ = key; _tmp113_ = gee_map_get (_tmp111_, _tmp112_); _tmp114_ = (GeeMap*) _tmp113_; _tmp115_ = member; _tmp116_ = json_node_get_object (_tmp115_); skk_map_file_load_map (self, _tmp114_, _tmp116_); _g_object_unref0 (_tmp114_); } } } _g_list_free0 (keys); __vala_JsonObject_free0 (define); } __vala_JsonNode_free0 (member); __vala_JsonObject_free0 (object); __vala_JsonNode_free0 (root); _g_object_unref0 (parser); _g_free0 (filename); _skk_rule_metadata_free0 (metadata); }