static void start_format_and_configure_block (StorageProvider *provider, UDisksBlock *block, GDBusMethodInvocation *invocation, const gchar *type, const gchar *erase, const gchar *label, const gchar *passphrase, const gchar *mount_point, const gchar *mount_options, const gchar *crypto_passphrase, const gchar *crypto_options) { GError *error = NULL; if (!storage_cleanup_block (provider, block, &error)) { g_dbus_error_strip_remote_error (error); g_dbus_method_invocation_return_error (invocation, COCKPIT_ERROR, COCKPIT_ERROR_FAILED, "%s", error->message); g_error_free (error); return; } FormatData *data = g_new0(FormatData, 1); data->block = g_object_ref (block); data->invocation = g_object_ref (invocation); data->mount_point = g_strdup (mount_point); data->mount_options = g_strdup (mount_options); data->crypto_passphrase = g_strdup (crypto_passphrase); data->crypto_options = g_strdup (crypto_options); data->udisks_object_manager = udisks_client_get_object_manager (storage_provider_get_udisks_client (provider)); data->object_added_handler_id = g_signal_connect (data->udisks_object_manager, "object-added", G_CALLBACK (on_udisks_object_added), data); GVariantBuilder options; g_variant_builder_init (&options, G_VARIANT_TYPE("a{sv}")); if (erase && strcmp (erase, "no") != 0) g_variant_builder_add (&options, "{sv}", "erase", g_variant_new_string (erase)); if (label && *label) g_variant_builder_add (&options, "{sv}", "label", g_variant_new_string (label)); if (passphrase && *passphrase) g_variant_builder_add (&options, "{sv}", "encrypt.passphrase", g_variant_new_string (passphrase)); udisks_block_call_format (block, type, g_variant_builder_end (&options), NULL, on_format_done, data); }
static void ensure_unused_cb (UDisksClient *client, GAsyncResult *res, gpointer user_data) { FormatVolumeData *data = user_data; GVariantBuilder options_builder; const gchar *erase_type; const gchar *fstype; const gchar *name; const gchar *passphrase; if (!gdu_utils_ensure_unused_finish (client, res, NULL)) { format_volume_data_free (data); goto out; } erase_type = gdu_create_filesystem_widget_get_erase (GDU_CREATE_FILESYSTEM_WIDGET (data->create_filesystem_widget)); fstype = gdu_create_filesystem_widget_get_fstype (GDU_CREATE_FILESYSTEM_WIDGET (data->create_filesystem_widget)); name = gdu_create_filesystem_widget_get_name (GDU_CREATE_FILESYSTEM_WIDGET (data->create_filesystem_widget)); passphrase = gdu_create_filesystem_widget_get_passphrase (GDU_CREATE_FILESYSTEM_WIDGET (data->create_filesystem_widget)); g_variant_builder_init (&options_builder, G_VARIANT_TYPE_VARDICT); if (name != NULL && strlen (name) > 0) g_variant_builder_add (&options_builder, "{sv}", "label", g_variant_new_string (name)); if (!(g_strcmp0 (fstype, "vfat") == 0 || g_strcmp0 (fstype, "ntfs") == 0)) { /* TODO: need a better way to determine if this should be TRUE */ g_variant_builder_add (&options_builder, "{sv}", "take-ownership", g_variant_new_boolean (TRUE)); } if (passphrase != NULL && strlen (passphrase) > 0) g_variant_builder_add (&options_builder, "{sv}", "encrypt.passphrase", g_variant_new_string (passphrase)); if (erase_type != NULL) g_variant_builder_add (&options_builder, "{sv}", "erase", g_variant_new_string (erase_type)); g_variant_builder_add (&options_builder, "{sv}", "update-partition-type", g_variant_new_boolean (TRUE)); udisks_block_call_format (data->block, fstype, g_variant_builder_end (&options_builder), NULL, /* GCancellable */ format_cb, data); out: ; }