gboolean control_client_socket(GIOChannel *clientchan) { char *ctl_line; GString *result = g_string_new(""); GError *error = NULL; GIOStatus ret; gsize len; ret = g_io_channel_read_line(clientchan, &ctl_line, &len, NULL, &error); if (ret == G_IO_STATUS_ERROR) { g_warning ("Error reading: %s", error->message); g_clear_error (&error); ret = g_io_channel_shutdown (clientchan, TRUE, &error); remove_socket_from_array (clientchan); if (ret == G_IO_STATUS_ERROR) { g_warning ("Error closing: %s", error->message); g_clear_error (&error); } return FALSE; } else if (ret == G_IO_STATUS_EOF) { /* shutdown and remove channel watch from main loop */ ret = g_io_channel_shutdown (clientchan, TRUE, &error); remove_socket_from_array (clientchan); if (ret == G_IO_STATUS_ERROR) { g_warning ("Error closing: %s", error->message); g_clear_error (&error); } return FALSE; } if (ctl_line) { parse_cmd_line (ctl_line, result); g_string_append_c(result, '\n'); ret = g_io_channel_write_chars (clientchan, result->str, result->len, &len, &error); if (ret == G_IO_STATUS_ERROR) { g_warning ("Error writing: %s", error->message); g_clear_error (&error); } if (g_io_channel_flush(clientchan, &error) == G_IO_STATUS_ERROR) { g_warning ("Error flushing: %s", error->message); g_clear_error (&error); } } g_string_free(result, TRUE); g_free(ctl_line); return TRUE; }
void event_fixture_teardown(struct EventFixture *ef, const void *data) { (void) data; /* there should be no events left waiting */ assert_no_event(ef); /* clean up the io channel we opened for uzbl */ GIOChannel *iochan = g_ptr_array_index(uzbl.comm.client_chan, 0); remove_socket_from_array(iochan); /* close the sockets so that nothing sticks around between tests */ close(ef->uzbl_sock); close(ef->test_sock); }