/** * appdata_validate_and_show_results: **/ static gint appdata_validate_and_show_results (const gchar *filename_original, const gchar *filename, const gchar *output_format, AsAppValidateFlags flags) { AsApp *app; GError *error = NULL; GPtrArray *problems = NULL; const gchar *tmp; gboolean ret; gint retval = EXIT_CODE_SUCCESS; /* scan file for problems */ app = as_app_new (); as_app_set_source_kind (app, AS_APP_SOURCE_KIND_APPDATA); ret = as_app_parse_file (app, filename, AS_APP_PARSE_FLAG_NONE, &error); if (!ret) { retval = EXIT_CODE_FAILURE; g_print ("Failed: %s\n", error->message); g_error_free (error); goto out; } problems = as_app_validate (app, flags, &error); if (problems == NULL) { retval = EXIT_CODE_FAILURE; g_print ("Failed: %s\n", error->message); g_error_free (error); goto out; } if (problems->len > 0) retval = EXIT_CODE_WARNINGS; /* print problems */ tmp = filename_original != NULL ? filename_original : filename; if (g_strcmp0 (output_format, "html") == 0) { appdata_validate_format_html (tmp, problems); } else if (g_strcmp0 (output_format, "xml") == 0) { appdata_validate_format_xml (tmp, problems); } else { appdata_validate_format_text (tmp, problems); } out: g_object_unref (app); if (problems) g_ptr_array_unref (problems); return retval; }
/** * fu_util_verify_update: **/ static gboolean fu_util_verify_update (FuUtilPrivate *priv, gchar **values, GError **error) { guint i; _cleanup_object_unref_ AsStore *store = NULL; _cleanup_object_unref_ GFile *xml_file = NULL; if (g_strv_length (values) < 2) { g_set_error_literal (error, FWUPD_ERROR, FWUPD_ERROR_INTERNAL, "Invalid arguments: expected 'filename.xml' 'filename.rom'"); return FALSE; } store = as_store_new (); /* open existing file */ xml_file = g_file_new_for_path (values[0]); if (g_file_query_exists (xml_file, NULL)) { if (!as_store_from_file (store, xml_file, NULL, NULL, error)) return FALSE; } /* add new values */ as_store_set_api_version (store, 0.9); for (i = 1; values[i] != NULL; i++) { _cleanup_free_ gchar *guid = NULL; _cleanup_free_ gchar *id = NULL; _cleanup_object_unref_ AsApp *app = NULL; _cleanup_object_unref_ AsRelease *rel = NULL; _cleanup_object_unref_ FuRom *rom = NULL; _cleanup_object_unref_ GFile *file = NULL; _cleanup_error_free_ GError *error_local = NULL; file = g_file_new_for_path (values[i]); rom = fu_rom_new (); g_print ("Processing %s...\n", values[i]); if (!fu_rom_load_file (rom, file, FU_ROM_LOAD_FLAG_BLANK_PPID, NULL, &error_local)) { g_print ("%s\n", error_local->message); continue; } /* add app to store */ app = as_app_new (); id = g_strdup_printf ("0x%04x:0x%04x", fu_rom_get_vendor (rom), fu_rom_get_model (rom)); guid = fu_guid_generate_from_string (id); as_app_set_id (app, guid, -1); as_app_set_id_kind (app, AS_ID_KIND_FIRMWARE); as_app_set_source_kind (app, AS_APP_SOURCE_KIND_INF); rel = as_release_new (); as_release_set_version (rel, fu_rom_get_version (rom), -1); as_release_set_checksum (rel, G_CHECKSUM_SHA1, fu_rom_get_checksum (rom), -1); as_app_add_release (app, rel); as_store_add_app (store, app); } if (!as_store_to_file (store, xml_file, AS_NODE_TO_XML_FLAG_ADD_HEADER | AS_NODE_TO_XML_FLAG_FORMAT_INDENT | AS_NODE_TO_XML_FLAG_FORMAT_MULTILINE, NULL, error)) return FALSE; return TRUE; }