Merge branch 'wip/smcv/none-flags' into 'main'

Add a NONE or DEFAULT member to most flags-sets

See merge request GNOME/glib!2576
This commit is contained in:
Philip Withnall
2022-06-23 16:09:38 +00:00
64 changed files with 384 additions and 256 deletions

View File

@@ -589,7 +589,7 @@ g_cancellable_connect (GCancellable *cancellable,
id = g_signal_connect_data (cancellable, "cancelled",
callback, data,
(GClosureNotify) data_destroy_func,
0);
G_CONNECT_DEFAULT);
g_mutex_unlock (&cancellable_mutex);
}

View File

@@ -435,7 +435,8 @@ load_comment_for_mime_helper (const char *dir,
if (!res)
return NULL;
context = g_markup_parse_context_new (&parser, 0, &parse_data, NULL);
context = g_markup_parse_context_new (&parser, G_MARKUP_PARSE_FLAGS_NONE,
&parse_data, NULL);
res = g_markup_parse_context_parse (context, data, len, NULL);
g_free (data);
g_markup_parse_context_free (context);

View File

@@ -1456,7 +1456,7 @@ initable_init (GInitable *initable,
G_CALLBACK (on_notify_g_name_owner),
weak_ref_new (G_OBJECT (manager)),
(GClosureNotify) weak_ref_free,
0 /* flags */);
G_CONNECT_DEFAULT);
manager->priv->signal_signal_id =
g_signal_connect_data (manager->priv->control_proxy,
@@ -1464,7 +1464,7 @@ initable_init (GInitable *initable,
G_CALLBACK (on_control_proxy_g_signal),
weak_ref_new (G_OBJECT (manager)),
(GClosureNotify) weak_ref_free,
0 /* flags */);
G_CONNECT_DEFAULT);
manager->priv->name_owner = g_dbus_proxy_get_name_owner (manager->priv->control_proxy);
if (manager->priv->name_owner == NULL && manager->priv->name != NULL)

View File

@@ -630,7 +630,7 @@ g_dbus_server_start (GDBusServer *server)
G_CALLBACK (on_run),
g_object_ref (server),
(GClosureNotify) g_object_unref,
0 /* flags */);
G_CONNECT_DEFAULT);
g_socket_service_start (G_SOCKET_SERVICE (server->listener));
server->active = TRUE;
g_object_notify (G_OBJECT (server), "active");

View File

@@ -191,7 +191,7 @@ g_dtls_client_connection_new (GDatagramBased *base_socket,
GTlsCertificateFlags
g_dtls_client_connection_get_validation_flags (GDtlsClientConnection *conn)
{
GTlsCertificateFlags flags = 0;
GTlsCertificateFlags flags = G_TLS_CERTIFICATE_FLAGS_NONE;
g_return_val_if_fail (G_IS_DTLS_CLIENT_CONNECTION (conn), 0);

View File

@@ -1580,6 +1580,7 @@ typedef enum {
/**
* GTlsCertificateFlags:
* @G_TLS_CERTIFICATE_FLAGS_NONE: No flags. Since: 2.74
* @G_TLS_CERTIFICATE_UNKNOWN_CA: The signing certificate authority is
* not known.
* @G_TLS_CERTIFICATE_BAD_IDENTITY: The certificate does not match the
@@ -1611,6 +1612,7 @@ typedef enum {
* Since: 2.28
*/
typedef enum {
G_TLS_CERTIFICATE_FLAGS_NONE GLIB_AVAILABLE_ENUMERATOR_IN_2_74 = 0,
G_TLS_CERTIFICATE_UNKNOWN_CA = (1 << 0),
G_TLS_CERTIFICATE_BAD_IDENTITY = (1 << 1),
G_TLS_CERTIFICATE_NOT_ACTIVATED = (1 << 2),

View File

@@ -809,7 +809,8 @@ g_local_file_monitor_start (GLocalFileMonitor *local_monitor,
local_monitor->mount_monitor = g_unix_mount_monitor_get ();
g_signal_connect_object (local_monitor->mount_monitor, "mounts-changed",
G_CALLBACK (g_local_file_monitor_mounts_changed), local_monitor, 0);
G_CALLBACK (g_local_file_monitor_mounts_changed), local_monitor,
G_CONNECT_DEFAULT);
#endif
}
@@ -924,7 +925,7 @@ g_local_file_monitor_new_in_worker (const gchar *pathname,
{
if (callback)
g_signal_connect_data (monitor, "changed", G_CALLBACK (callback),
user_data, destroy_user_data, 0 /* flags */);
user_data, destroy_user_data, G_CONNECT_DEFAULT);
g_local_file_monitor_start (monitor, pathname, is_directory, flags, GLIB_PRIVATE_CALL(g_get_worker_context) ());
}

View File

@@ -579,10 +579,14 @@ normalise_whitespace (const gchar *orig)
{
GRegex *s;
cleanup[0] = g_regex_new ("^\\s+", 0, 0, 0);
cleanup[1] = g_regex_new ("\\s+$", 0, 0, 0);
cleanup[2] = g_regex_new ("\\s+", 0, 0, 0);
s = g_regex_new ("\\n\\s*\\n+", 0, 0, 0);
cleanup[0] = g_regex_new ("^\\s+", G_REGEX_DEFAULT,
G_REGEX_MATCH_DEFAULT, NULL);
cleanup[1] = g_regex_new ("\\s+$", G_REGEX_DEFAULT,
G_REGEX_MATCH_DEFAULT, NULL);
cleanup[2] = g_regex_new ("\\s+", G_REGEX_DEFAULT,
G_REGEX_MATCH_DEFAULT, NULL);
s = g_regex_new ("\\n\\s*\\n+", G_REGEX_DEFAULT,
G_REGEX_MATCH_DEFAULT, NULL);
g_once_init_leave (&splitter, s);
}

View File

@@ -756,7 +756,9 @@ g_subprocess_wait_async (GSubprocess *subprocess,
* see the cancellation in the _finish().
*/
if (cancellable)
g_signal_connect_object (cancellable, "cancelled", G_CALLBACK (g_subprocess_wait_cancelled), task, 0);
g_signal_connect_object (cancellable, "cancelled",
G_CALLBACK (g_subprocess_wait_cancelled),
task, G_CONNECT_DEFAULT);
subprocess->pending_waits = g_slist_prepend (subprocess->pending_waits, task);
task = NULL;

View File

@@ -1530,7 +1530,8 @@ g_task_start_task_thread (GTask *task,
g_signal_connect_data (task->cancellable, "cancelled",
G_CALLBACK (task_thread_cancelled),
g_object_ref (task),
task_thread_cancelled_disconnect_notify, 0);
task_thread_cancelled_disconnect_notify,
G_CONNECT_DEFAULT);
}
if (g_private_get (&task_private))

View File

@@ -1121,6 +1121,8 @@ g_tls_certificate_get_issuer (GTlsCertificate *cert)
* check a certificate against a CA that is not part of the system
* CA database.
*
* If @cert is valid, %G_TLS_CERTIFICATE_FLAGS_NONE is returned.
*
* If @identity is not %NULL, @cert's name(s) will be compared against
* it, and %G_TLS_CERTIFICATE_BAD_IDENTITY will be set in the return
* value if it does not match. If @identity is %NULL, that bit will

View File

@@ -213,7 +213,7 @@ g_tls_client_connection_new (GIOStream *base_io_stream,
GTlsCertificateFlags
g_tls_client_connection_get_validation_flags (GTlsClientConnection *conn)
{
GTlsCertificateFlags flags = 0;
GTlsCertificateFlags flags = G_TLS_CERTIFICATE_FLAGS_NONE;
g_return_val_if_fail (G_IS_TLS_CLIENT_CONNECTION (conn), 0);

View File

@@ -827,7 +827,7 @@ test_help (void)
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_passed ();
g_test_trap_assert_stdout ("*Application options*");
}

View File

@@ -144,7 +144,7 @@ test_x11_autolaunch (void)
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_stderr_unmatched ("?*");
g_test_trap_assert_stdout ("hello:this=address-is-from-the,mock=dbus-launch\n");
g_test_trap_assert_passed ();
@@ -167,7 +167,7 @@ test_xdg_runtime (void)
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_stderr_unmatched ("?*");
g_test_trap_assert_stdout ("unix:path=/tmp/gdbus%2Cunix%2Ctest.*/bus\n");
g_test_trap_assert_passed ();
@@ -203,7 +203,7 @@ test_win32_autolaunch (void)
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
/* stderr is not checked: coverage prints warnings there */
g_test_trap_assert_stdout ("nonce-tcp:host=localhost,port=*,noncefile=*\\gdbus-nonce-file-*\n");
g_test_trap_assert_passed ();

View File

@@ -222,7 +222,7 @@ test_non_socket (void)
/* This is #ifdef G_OS_UNIX anyway, so just use g_test_trap_fork() */
G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
if (!g_test_trap_fork (0, 0))
if (!g_test_trap_fork (0, G_TEST_TRAP_DEFAULT))
{
/* parent */
g_object_unref (streams[0]);

View File

@@ -1202,7 +1202,7 @@ test_peer_invalid_server (void)
}
else
{
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*CRITICAL*G_DBUS_SERVER_FLAGS_ALL*");
}
@@ -1249,7 +1249,7 @@ test_peer_invalid_conn_stream_sync (void)
}
else
{
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*CRITICAL*G_DBUS_CONNECTION_FLAGS_ALL*");
}
@@ -1295,7 +1295,7 @@ test_peer_invalid_conn_stream_async (void)
}
else
{
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*CRITICAL*G_DBUS_CONNECTION_FLAGS_ALL*");
}
@@ -1324,7 +1324,7 @@ test_peer_invalid_conn_addr_sync (void)
}
else
{
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*CRITICAL*G_DBUS_CONNECTION_FLAGS_ALL*");
}
@@ -1347,7 +1347,7 @@ test_peer_invalid_conn_addr_async (void)
}
else
{
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*CRITICAL*G_DBUS_CONNECTION_FLAGS_ALL*");
}

View File

@@ -80,6 +80,10 @@ test_extension_point (void)
g_assert (g_io_extension_get_priority (ext) == 10);
}
#define INHERIT_ALL (G_TEST_SUBPROCESS_INHERIT_STDIN | \
G_TEST_SUBPROCESS_INHERIT_STDOUT | \
G_TEST_SUBPROCESS_INHERIT_STDERR)
static void
test_module_scan_all (void)
{
@@ -105,7 +109,7 @@ test_module_scan_all (void)
g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-a");
return;
}
g_test_trap_subprocess (NULL, 0, 7);
g_test_trap_subprocess (NULL, 0, INHERIT_ALL);
g_test_trap_assert_passed ();
}
@@ -136,7 +140,7 @@ test_module_scan_all_with_scope (void)
g_io_module_scope_free (scope);
return;
}
g_test_trap_subprocess (NULL, 0, 7);
g_test_trap_subprocess (NULL, 0, INHERIT_ALL);
g_test_trap_assert_passed ();
}

View File

@@ -71,7 +71,7 @@ test_store_non_gobjects (void)
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*WARNING*value * of type 'GType' is invalid or "
"out of range for property 'item-type'*");

View File

@@ -38,7 +38,7 @@ test_schema (gpointer data)
gchar *child_name;
child_name = g_strdup_printf ("/gschema/%s%s/subprocess/do_compile", test->name, test->opt ? "/opt" : "");
g_test_trap_subprocess (child_name, 0, 0);
g_test_trap_subprocess (child_name, 0, G_TEST_SUBPROCESS_DEFAULT);
g_free (child_name);
if (test->err)

View File

@@ -147,7 +147,7 @@ test_unknown_key (void)
g_object_unref (settings);
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*does not contain*");
}
@@ -170,7 +170,7 @@ test_no_schema (void)
g_assert_null (settings);
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*Settings schema 'no.such.schema' is not installed*");
}
@@ -220,7 +220,7 @@ test_wrong_path (void)
settings = g_settings_new_with_path ("org.gtk.test", "/wrong-path/");
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*but path * specified by schema*");
}
@@ -238,7 +238,7 @@ test_no_path (void)
settings = g_settings_new ("org.gtk.test.no-path");
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*attempting to create schema * without a path**");
}
@@ -1507,7 +1507,7 @@ test_typesafe_binding (void)
g_object_unref (settings);
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*not compatible*");
}
@@ -1665,12 +1665,14 @@ test_no_read_binding (void)
{
if (g_test_undefined ())
{
g_test_trap_subprocess ("/gsettings/no-read-binding/subprocess/fail", 0, 0);
g_test_trap_subprocess ("/gsettings/no-read-binding/subprocess/fail", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*property*is not readable*");
}
g_test_trap_subprocess ("/gsettings/no-read-binding/subprocess/pass", 0, 0);
g_test_trap_subprocess ("/gsettings/no-read-binding/subprocess/pass", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_passed ();
}
@@ -1708,12 +1710,14 @@ test_no_write_binding (void)
{
if (g_test_undefined ())
{
g_test_trap_subprocess ("/gsettings/no-write-binding/subprocess/fail", 0, 0);
g_test_trap_subprocess ("/gsettings/no-write-binding/subprocess/fail", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*property*is not writable*");
}
g_test_trap_subprocess ("/gsettings/no-write-binding/subprocess/pass", 0, 0);
g_test_trap_subprocess ("/gsettings/no-write-binding/subprocess/pass", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_passed ();
}
@@ -2141,19 +2145,23 @@ test_enums (void)
if (g_test_undefined () && !backend_set)
{
g_test_trap_subprocess ("/gsettings/enums/subprocess/non-enum-key", 0, 0);
g_test_trap_subprocess ("/gsettings/enums/subprocess/non-enum-key", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*not associated with an enum*");
g_test_trap_subprocess ("/gsettings/enums/subprocess/non-enum-value", 0, 0);
g_test_trap_subprocess ("/gsettings/enums/subprocess/non-enum-value", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*invalid enum value 42*");
g_test_trap_subprocess ("/gsettings/enums/subprocess/range", 0, 0);
g_test_trap_subprocess ("/gsettings/enums/subprocess/range", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*g_settings_set_value*valid range*");
g_test_trap_subprocess ("/gsettings/enums/subprocess/non-flags", 0, 0);
g_test_trap_subprocess ("/gsettings/enums/subprocess/non-flags", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*not associated with a flags*");
}
@@ -2239,19 +2247,23 @@ test_flags (void)
if (g_test_undefined () && !backend_set)
{
g_test_trap_subprocess ("/gsettings/flags/subprocess/non-flags-key", 0, 0);
g_test_trap_subprocess ("/gsettings/flags/subprocess/non-flags-key", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*not associated with a flags*");
g_test_trap_subprocess ("/gsettings/flags/subprocess/non-flags-value", 0, 0);
g_test_trap_subprocess ("/gsettings/flags/subprocess/non-flags-value", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*invalid flags value 0x00000042*");
g_test_trap_subprocess ("/gsettings/flags/subprocess/range", 0, 0);
g_test_trap_subprocess ("/gsettings/flags/subprocess/range", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*g_settings_set_value*valid range*");
g_test_trap_subprocess ("/gsettings/flags/subprocess/non-enum", 0, 0);
g_test_trap_subprocess ("/gsettings/flags/subprocess/non-enum", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*not associated with an enum*");
}
@@ -2328,11 +2340,13 @@ test_range (void)
if (g_test_undefined () && !backend_set)
{
g_test_trap_subprocess ("/gsettings/range/subprocess/high", 0, 0);
g_test_trap_subprocess ("/gsettings/range/subprocess/high", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*g_settings_set_value*valid range*");
g_test_trap_subprocess ("/gsettings/range/subprocess/low", 0, 0);
g_test_trap_subprocess ("/gsettings/range/subprocess/low", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*g_settings_set_value*valid range*");
}
@@ -2881,7 +2895,8 @@ test_per_desktop (void)
if (!g_test_subprocess ())
{
g_test_trap_subprocess ("/gsettings/per-desktop/subprocess", 0, 0);
g_test_trap_subprocess ("/gsettings/per-desktop/subprocess", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_passed ();
}

View File

@@ -2305,7 +2305,7 @@ test_return_in_idle_error_first (void)
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*CRITICAL*assertion '!task->ever_returned' failed*");
}
@@ -2321,7 +2321,7 @@ test_return_in_idle_value_first (void)
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*CRITICAL*assertion '!task->ever_returned' failed*");
}
@@ -2337,7 +2337,7 @@ test_return_error_first (void)
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*CRITICAL*assertion '!task->ever_returned' failed*");
}
@@ -2353,7 +2353,7 @@ test_return_value_first (void)
return;
}
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*CRITICAL*assertion '!task->ever_returned' failed*");
}

View File

@@ -40,7 +40,7 @@ get_tls_channel_binding (void)
G_TLS_CHANNEL_BINDING_TLS_UNIQUE, NULL, (GError **)&not_null));
g_object_unref (tls);
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*GLib-GIO-CRITICAL*");
}
@@ -75,7 +75,7 @@ get_dtls_channel_binding (void)
G_TLS_CHANNEL_BINDING_TLS_UNIQUE, NULL, (GError **)&not_null));
g_object_unref (dtls);
g_test_trap_subprocess (NULL, 0, 0);
g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*GLib-GIO-CRITICAL*");
}

View File

@@ -442,10 +442,12 @@ do_fail_on_broken_utf16_2 (void)
static void
test_fail_on_broken_utf16 (void)
{
g_test_trap_subprocess ("/appinfo/subprocess/win32-assert-broken-utf16_1", 0, 0);
g_test_trap_subprocess ("/appinfo/subprocess/win32-assert-broken-utf16_1", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*GLib-GIO:ERROR:*giowin32-private.c:*:_g_win32_extract_executable: assertion failed: (folded)*");
g_test_trap_subprocess ("/appinfo/subprocess/win32-assert-broken-utf16_2", 0, 0);
g_test_trap_subprocess ("/appinfo/subprocess/win32-assert-broken-utf16_2", 0,
G_TEST_SUBPROCESS_DEFAULT);
g_test_trap_assert_failed ();
g_test_trap_assert_stderr ("*GLib-GIO:ERROR:*giowin32-private.c:*:_g_win32_extract_executable: assertion failed: (folded)*");
}